From 9fe085bdbd5f752bb4b0a198d48a3b083dbf3ceb Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Fri, 21 Aug 2026 14:22:09 -0700 Subject: [PATCH 1/8] Remove unused source-map-support dependency --- package-lock.json | 34 ---------------------------------- package.json | 1 - 2 files changed, 35 deletions(-) diff --git a/package-lock.json b/package-lock.json index cd63ad38..149decfc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -58,7 +58,6 @@ "@types/yauzl": "^2.9.2", "@types/yazl": "^2.4.2", "mocha": "^11.1.0", - "source-map-support": "^0.4.2", "ts-node": "^10.9.1", "typescript": "~5.9.0" }, @@ -3719,24 +3718,6 @@ "node": ">=8" } }, - "node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-support": { - "version": "0.4.18", - "resolved": "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz", - "integrity": "sha1-Aoam3ovkJkEzhZTpfM6nXwosWF8= sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", - "dev": true, - "dependencies": { - "source-map": "^0.5.6" - } - }, "node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", @@ -6915,21 +6896,6 @@ } } }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - }, - "source-map-support": { - "version": "0.4.18", - "resolved": "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz", - "integrity": "sha1-Aoam3ovkJkEzhZTpfM6nXwosWF8= sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", - "dev": true, - "requires": { - "source-map": "^0.5.6" - } - }, "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", diff --git a/package.json b/package.json index 25b5dcc2..ef90cba7 100644 --- a/package.json +++ b/package.json @@ -85,7 +85,6 @@ "@types/yauzl": "^2.9.2", "@types/yazl": "^2.4.2", "mocha": "^11.1.0", - "source-map-support": "^0.4.2", "ts-node": "^10.9.1", "typescript": "~5.9.0" }, From df8999322691819d4f413da88b3b5dd8b4496740 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Fri, 21 Aug 2026 14:29:57 -0700 Subject: [PATCH 2/8] Remove redundant Cheerio and glob types --- package-lock.json | 54 ----------------------------------------------- package.json | 2 -- 2 files changed, 56 deletions(-) diff --git a/package-lock.json b/package-lock.json index 149decfc..11ab0c74 100644 --- a/package-lock.json +++ b/package-lock.json @@ -43,8 +43,6 @@ }, "devDependencies": { "@microsoft/api-extractor": "^7.33.7", - "@types/cheerio": "^0.22.29", - "@types/glob": "^8.1.0", "@types/hosted-git-info": "^3.0.2", "@types/markdown-it": "^0.0.2", "@types/mime": "^1", @@ -836,31 +834,6 @@ "dev": true, "license": "MIT" }, - "node_modules/@types/cheerio": { - "version": "0.22.29", - "resolved": "https://registry.npmjs.org/@types/cheerio/-/cheerio-0.22.29.tgz", - "integrity": "sha512-rNX1PsrDPxiNiyLnRKiW2NXHJFHqx0Fl3J2WsZq0MTBspa/FgwlqhXJE2crIcc+/2IglLHtSWw7g053oUR8fOg==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/glob": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-8.1.0.tgz", - "integrity": "sha512-IO+MJPVhoqz+28h1qLAcBEH2+xHMK6MTyHJc7MTnnYb6wsoLR29POVGJ7LycmVXIqyy/4/2ShP5sUwTXuOwb/w==", - "dev": true, - "dependencies": { - "@types/minimatch": "^5.1.2", - "@types/node": "*" - } - }, - "node_modules/@types/glob/node_modules/@types/minimatch": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz", - "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==", - "dev": true - }, "node_modules/@types/hosted-git-info": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/@types/hosted-git-info/-/hosted-git-info-3.0.2.tgz", @@ -4933,33 +4906,6 @@ "integrity": "sha512-ebDJ9b0e702Yr7pWgB0jzm+CX4Srzz8RcXtLJDJB+BSccqMa36uyH/zUsSYao5+BD1ytv3k3rPYCq4mAE1hsXA==", "dev": true }, - "@types/cheerio": { - "version": "0.22.29", - "resolved": "https://registry.npmjs.org/@types/cheerio/-/cheerio-0.22.29.tgz", - "integrity": "sha512-rNX1PsrDPxiNiyLnRKiW2NXHJFHqx0Fl3J2WsZq0MTBspa/FgwlqhXJE2crIcc+/2IglLHtSWw7g053oUR8fOg==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/glob": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-8.1.0.tgz", - "integrity": "sha512-IO+MJPVhoqz+28h1qLAcBEH2+xHMK6MTyHJc7MTnnYb6wsoLR29POVGJ7LycmVXIqyy/4/2ShP5sUwTXuOwb/w==", - "dev": true, - "requires": { - "@types/minimatch": "^5.1.2", - "@types/node": "*" - }, - "dependencies": { - "@types/minimatch": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz", - "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==", - "dev": true - } - } - }, "@types/hosted-git-info": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/@types/hosted-git-info/-/hosted-git-info-3.0.2.tgz", diff --git a/package.json b/package.json index ef90cba7..cc5d3c02 100644 --- a/package.json +++ b/package.json @@ -70,8 +70,6 @@ }, "devDependencies": { "@microsoft/api-extractor": "^7.33.7", - "@types/cheerio": "^0.22.29", - "@types/glob": "^8.1.0", "@types/hosted-git-info": "^3.0.2", "@types/markdown-it": "^0.0.2", "@types/mime": "^1", From cb7a9431232bed9fce3144df58fe1deb4d5d04b8 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Fri, 21 Aug 2026 14:37:23 -0700 Subject: [PATCH 3/8] Replace Cheerio with parse5 --- package-lock.json | 296 ++++------------------------------------------ package.json | 4 +- src/package.ts | 39 ++++-- 3 files changed, 58 insertions(+), 281 deletions(-) diff --git a/package-lock.json b/package-lock.json index 11ab0c74..8e76ead3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,7 +17,6 @@ "@vscode/vsce-sign": "^2.0.0", "azure-devops-node-api": "^12.5.0", "chalk": "^4.1.2", - "cheerio": "^1.0.0-rc.9", "cockatiel": "^3.1.2", "commander": "^12.1.0", "form-data": "^4.0.0", @@ -29,6 +28,7 @@ "mime": "^1.3.4", "minimatch": "^10.2.2", "parse-semver": "^1.1.1", + "parse5": "^8.0.1", "read": "^1.0.7", "semver": "^7.5.2", "tmp": "^0.2.3", @@ -60,7 +60,7 @@ "typescript": "~5.9.0" }, "engines": { - "node": ">= 20" + "node": ">= 20.19" }, "optionalDependencies": { "keytar": "^7.7.0" @@ -1323,11 +1323,6 @@ "readable-stream": "^3.4.0" } }, - "node_modules/boolbase": { - "version": "1.0.0", - "resolved": "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" - }, "node_modules/boundary": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/boundary/-/boundary-2.0.0.tgz", @@ -1456,41 +1451,6 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/cheerio": { - "version": "1.0.0-rc.9", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.9.tgz", - "integrity": "sha512-QF6XVdrLONO6DXRF5iaolY+odmhj2CLj+xzNod7INPWMi/x9X4SOylH0S/vaPpX+AUU6t04s34SQNh7DbkuCng==", - "dependencies": { - "cheerio-select": "^1.4.0", - "dom-serializer": "^1.3.1", - "domhandler": "^4.2.0", - "htmlparser2": "^6.1.0", - "parse5": "^6.0.1", - "parse5-htmlparser2-tree-adapter": "^6.0.1", - "tslib": "^2.2.0" - }, - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/cheeriojs/cheerio?sponsor=1" - } - }, - "node_modules/cheerio-select": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-1.4.0.tgz", - "integrity": "sha512-sobR3Yqz27L553Qa7cK6rtJlMDbiKPdNywtR95Sj/YgfpLfy0u6CGJuaBKe5YE/vTc23SCRKxWSdlon/w6I/Ew==", - "dependencies": { - "css-select": "^4.1.2", - "css-what": "^5.0.0", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0", - "domutils": "^2.6.0" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, "node_modules/chokidar": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", @@ -1616,32 +1576,6 @@ "node": ">= 8" } }, - "node_modules/css-select": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.1.2.tgz", - "integrity": "sha512-nu5ye2Hg/4ISq4XqdLY2bEatAcLIdt3OYGFc9Tm9n7VSlFBcfRv0gBNksHRgSdUDQGtN3XrZ94ztW+NfzkFSUw==", - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^5.0.0", - "domhandler": "^4.2.0", - "domutils": "^2.6.0", - "nth-check": "^2.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/css-what": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.0.1.tgz", - "integrity": "sha512-FYDTSHb/7KXsWICVsxdmiExPjCfRC4qRFBdVwv7Ax9hMnvMmEjP9RfxTEZ3qPZGmADDn2vAKSo9UcN1jKVYscg==", - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, "node_modules/debug": { "version": "4.4.3", "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", @@ -1755,57 +1689,6 @@ "node": ">=0.3.1" } }, - "node_modules/dom-serializer": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", - "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/domelementtype": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", - "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ] - }, - "node_modules/domhandler": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.0.tgz", - "integrity": "sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA==", - "dependencies": { - "domelementtype": "^2.2.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/domutils": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.6.0.tgz", - "integrity": "sha512-y0BezHuy4MDYxh6OvolXYsH+1EMGmFbwv5FKW7ovwMG6zTPWqNPq3WF9ayZssFq+UlKdffGLbOEaghNdaOm1WA==", - "dependencies": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, "node_modules/dunder-proto": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", @@ -1864,9 +1747,13 @@ } }, "node_modules/entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-8.0.0.tgz", + "integrity": "sha512-zwfzJecQ/Uej6tusMqwAqU/6KL2XaB2VZ2Jg54Je6ahNBGNH6Ek6g3jjNCF0fG9EWQKGZNddNjU5F1ZQn/sBnA==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=20.19.0" + }, "funding": { "url": "https://github.com/fb55/entities?sponsor=1" } @@ -2274,24 +2161,6 @@ "node": ">=10" } }, - "node_modules/htmlparser2": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", - "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", - "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.0.0", - "domutils": "^2.5.2", - "entities": "^2.0.0" - } - }, "node_modules/http-proxy-agent": { "version": "7.0.2", "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", @@ -3081,17 +2950,6 @@ "set-blocking": "~2.0.0" } }, - "node_modules/nth-check": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.1.tgz", - "integrity": "sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==", - "dependencies": { - "boolbase": "^1.0.0" - }, - "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" - } - }, "node_modules/number-is-nan": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", @@ -3213,16 +3071,15 @@ } }, "node_modules/parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" - }, - "node_modules/parse5-htmlparser2-tree-adapter": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", - "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-8.0.1.tgz", + "integrity": "sha512-z1e/HMG90obSGeidlli3hj7cbocou0/wa5HacvI3ASx34PecNjNQeaHNo5WIZpWofN9kgkqV1q5YvXe3F0FoPw==", + "license": "MIT", "dependencies": { - "parse5": "^6.0.1" + "entities": "^8.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" } }, "node_modules/path-key": { @@ -5249,11 +5106,6 @@ "readable-stream": "^3.4.0" } }, - "boolbase": { - "version": "1.0.0", - "resolved": "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" - }, "boundary": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/boundary/-/boundary-2.0.0.tgz", @@ -5335,32 +5187,6 @@ "supports-color": "^7.1.0" } }, - "cheerio": { - "version": "1.0.0-rc.9", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.9.tgz", - "integrity": "sha512-QF6XVdrLONO6DXRF5iaolY+odmhj2CLj+xzNod7INPWMi/x9X4SOylH0S/vaPpX+AUU6t04s34SQNh7DbkuCng==", - "requires": { - "cheerio-select": "^1.4.0", - "dom-serializer": "^1.3.1", - "domhandler": "^4.2.0", - "htmlparser2": "^6.1.0", - "parse5": "^6.0.1", - "parse5-htmlparser2-tree-adapter": "^6.0.1", - "tslib": "^2.2.0" - } - }, - "cheerio-select": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-1.4.0.tgz", - "integrity": "sha512-sobR3Yqz27L553Qa7cK6rtJlMDbiKPdNywtR95Sj/YgfpLfy0u6CGJuaBKe5YE/vTc23SCRKxWSdlon/w6I/Ew==", - "requires": { - "css-select": "^4.1.2", - "css-what": "^5.0.0", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0", - "domutils": "^2.6.0" - } - }, "chokidar": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", @@ -5453,23 +5279,6 @@ "which": "^2.0.1" } }, - "css-select": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.1.2.tgz", - "integrity": "sha512-nu5ye2Hg/4ISq4XqdLY2bEatAcLIdt3OYGFc9Tm9n7VSlFBcfRv0gBNksHRgSdUDQGtN3XrZ94ztW+NfzkFSUw==", - "requires": { - "boolbase": "^1.0.0", - "css-what": "^5.0.0", - "domhandler": "^4.2.0", - "domutils": "^2.6.0", - "nth-check": "^2.0.0" - } - }, - "css-what": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.0.1.tgz", - "integrity": "sha512-FYDTSHb/7KXsWICVsxdmiExPjCfRC4qRFBdVwv7Ax9hMnvMmEjP9RfxTEZ3qPZGmADDn2vAKSo9UcN1jKVYscg==" - }, "debug": { "version": "4.4.3", "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", @@ -5535,39 +5344,6 @@ "integrity": "sha512-svtcdpS8CgJyqAjEQIXdb3OjhFVVYjzGAPO8WGCmRbrml64SPw/jJD4GoE98aR7r25A0XcgrK3F02yw9R/vhQw==", "dev": true }, - "dom-serializer": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", - "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", - "requires": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - } - }, - "domelementtype": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", - "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==" - }, - "domhandler": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.0.tgz", - "integrity": "sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA==", - "requires": { - "domelementtype": "^2.2.0" - } - }, - "domutils": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.6.0.tgz", - "integrity": "sha512-y0BezHuy4MDYxh6OvolXYsH+1EMGmFbwv5FKW7ovwMG6zTPWqNPq3WF9ayZssFq+UlKdffGLbOEaghNdaOm1WA==", - "requires": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - } - }, "dunder-proto": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", @@ -5615,9 +5391,9 @@ } }, "entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==" + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-8.0.0.tgz", + "integrity": "sha512-zwfzJecQ/Uej6tusMqwAqU/6KL2XaB2VZ2Jg54Je6ahNBGNH6Ek6g3jjNCF0fG9EWQKGZNddNjU5F1ZQn/sBnA==" }, "environment": { "version": "1.1.0", @@ -5898,17 +5674,6 @@ "lru-cache": "^6.0.0" } }, - "htmlparser2": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", - "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", - "requires": { - "domelementtype": "^2.0.1", - "domhandler": "^4.0.0", - "domutils": "^2.5.2", - "entities": "^2.0.0" - } - }, "http-proxy-agent": { "version": "7.0.2", "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", @@ -6440,14 +6205,6 @@ "set-blocking": "~2.0.0" } }, - "nth-check": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.1.tgz", - "integrity": "sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==", - "requires": { - "boolbase": "^1.0.0" - } - }, "number-is-nan": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", @@ -6532,16 +6289,11 @@ } }, "parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" - }, - "parse5-htmlparser2-tree-adapter": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", - "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-8.0.1.tgz", + "integrity": "sha512-z1e/HMG90obSGeidlli3hj7cbocou0/wa5HacvI3ASx34PecNjNQeaHNo5WIZpWofN9kgkqV1q5YvXe3F0FoPw==", "requires": { - "parse5": "^6.0.1" + "entities": "^8.0.0" } }, "path-key": { diff --git a/package.json b/package.json index cc5d3c02..10d9bf73 100644 --- a/package.json +++ b/package.json @@ -36,7 +36,7 @@ "watch:test": "npm run test -- --watch" }, "engines": { - "node": ">= 20" + "node": ">= 20.19" }, "dependencies": { "@azure/identity": "^4.1.0", @@ -47,7 +47,6 @@ "@vscode/vsce-sign": "^2.0.0", "azure-devops-node-api": "^12.5.0", "chalk": "^4.1.2", - "cheerio": "^1.0.0-rc.9", "cockatiel": "^3.1.2", "commander": "^12.1.0", "form-data": "^4.0.0", @@ -59,6 +58,7 @@ "mime": "^1.3.4", "minimatch": "^10.2.2", "parse-semver": "^1.1.1", + "parse5": "^8.0.1", "read": "^1.0.7", "semver": "^7.5.2", "tmp": "^0.2.3", diff --git a/src/package.ts b/src/package.ts index 91f315b5..7857fa29 100644 --- a/src/package.ts +++ b/src/package.ts @@ -9,7 +9,7 @@ import * as util from './util'; import { glob } from 'glob'; import { minimatch, MinimatchOptions } from 'minimatch'; import markdownit from 'markdown-it'; -import * as cheerio from 'cheerio'; +import { parse, type DefaultTreeAdapterTypes } from 'parse5'; import * as url from 'url'; import mime from 'mime'; import * as semver from 'semver'; @@ -890,11 +890,36 @@ export abstract class MarkdownProcessor extends BaseProcessor { } const html = markdownit({ html: true }).render(contents); - const $ = cheerio.load(html); + const document = parse(html); + const images: DefaultTreeAdapterTypes.Element[] = []; + let hasSvg = false; + const nodes: DefaultTreeAdapterTypes.Node[] = [document]; + + while (nodes.length > 0) { + const node = nodes.pop()!; + + if ('tagName' in node) { + if (node.tagName === 'img') { + images.push(node); + } else if (node.tagName === 'svg') { + hasSvg = true; + } + } + + const children = 'content' in node + ? node.content.childNodes + : 'childNodes' in node + ? node.childNodes + : []; + + for (let index = children.length - 1; index >= 0; index--) { + nodes.push(children[index]); + } + } if (this.rewriteRelativeLinks) { - $('img').each((_, img) => { - const rawSrc = $(img).attr('src'); + for (const image of images) { + const rawSrc = image.attrs.find(attribute => attribute.name === 'src')?.value; if (!rawSrc) { throw new Error(`Images in ${this.name} must have a source.`); @@ -922,12 +947,12 @@ export abstract class MarkdownProcessor extends BaseProcessor { `SVGs are restricted in ${this.name}; please use other file image formats, such as PNG: ${src}` ); } - }); + } } - $('svg').each(() => { + if (hasSvg) { throw new Error(`SVG tags are not allowed in ${this.name}.`); - }); + } return { path: file.path, From d2d8ed662bfce777df71f9ac211d8cf1326f7f94 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Fri, 21 Aug 2026 14:39:18 -0700 Subject: [PATCH 4/8] Replace markdown-it with marked --- package-lock.json | 141 +++++----------------------------------------- package.json | 3 +- src/package.ts | 4 +- 3 files changed, 16 insertions(+), 132 deletions(-) diff --git a/package-lock.json b/package-lock.json index 8e76ead3..7df7d456 100644 --- a/package-lock.json +++ b/package-lock.json @@ -24,7 +24,7 @@ "hosted-git-info": "^4.0.2", "jsonc-parser": "^3.2.0", "leven": "^3.1.0", - "markdown-it": "^14.1.0", + "marked": "^18.0.10", "mime": "^1.3.4", "minimatch": "^10.2.2", "parse-semver": "^1.1.1", @@ -44,7 +44,6 @@ "devDependencies": { "@microsoft/api-extractor": "^7.33.7", "@types/hosted-git-info": "^3.0.2", - "@types/markdown-it": "^0.0.2", "@types/mime": "^1", "@types/mocha": "^7.0.2", "@types/node": "^20.0.0", @@ -840,12 +839,6 @@ "integrity": "sha512-RURNTeEFUwF+ifnp7kK3WLLlTmBSlRynLNS9jeAsI6RHtSrupV0l0nO6kmpaz75EUJVexy348bR452SvmH98vQ==", "dev": true }, - "node_modules/@types/markdown-it": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-0.0.2.tgz", - "integrity": "sha1-XZrRnm5lCM3S8llt+G/Qqt5ZhmA=", - "dev": true - }, "node_modules/@types/mime": { "version": "1.3.1", "resolved": "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.1.tgz", @@ -2481,24 +2474,6 @@ "node": ">=6" } }, - "node_modules/linkify-it": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.2.tgz", - "integrity": "sha512-ONTm2jCMAVZjgQa/Fy1kScXsuOoF5NPTsoFBdE1KVIZ2vAh/r9+Bqo+0jINCBYnavTPQZz38QzFTme79ENoN3Q==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/puzrin" - }, - { - "type": "github", - "url": "https://github.com/sponsors/markdown-it" - } - ], - "dependencies": { - "uc.micro": "^2.0.0" - } - }, "node_modules/locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", @@ -2601,42 +2576,16 @@ "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", "dev": true }, - "node_modules/markdown-it": { - "version": "14.2.0", - "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.2.0.tgz", - "integrity": "sha512-1TGiQiJVRQ3NPmZH6sx5Cfnmg6GQm9jvC1ch4TK511NjSJvjzKLzn5pPfZRNZkRPZP0HqCioSndqH8v2nRaWVQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/puzrin" - }, - { - "type": "github", - "url": "https://github.com/sponsors/markdown-it" - } - ], - "dependencies": { - "argparse": "^2.0.1", - "entities": "^4.4.0", - "linkify-it": "^5.0.1", - "mdurl": "^2.0.0", - "punycode.js": "^2.3.1", - "uc.micro": "^2.1.0" - }, + "node_modules/marked": { + "version": "18.0.10", + "resolved": "https://registry.npmjs.org/marked/-/marked-18.0.10.tgz", + "integrity": "sha512-FJeH4bRpYoXiggcgriCGItKCSv3xkngJc4QCZ/rkQCogU3VYaLxYJoZl8Nw/b4+x7iij/pd+09mZ6A1dXzpL0A==", + "license": "MIT", "bin": { - "markdown-it": "bin/markdown-it.mjs" - } - }, - "node_modules/markdown-it/node_modules/entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.12" + "marked": "bin/marked.js" }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" + "engines": { + "node": ">= 20" } }, "node_modules/math-intrinsics": { @@ -2647,12 +2596,6 @@ "node": ">= 0.4" } }, - "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==", - "license": "MIT" - }, "node_modules/mime": { "version": "1.6.0", "resolved": "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz", @@ -3187,15 +3130,6 @@ "once": "^1.3.1" } }, - "node_modules/punycode.js": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz", - "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, "node_modules/qs": { "version": "6.15.2", "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.2.tgz", @@ -3881,11 +3815,6 @@ "node": ">=14.17" } }, - "node_modules/uc.micro": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz", - "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==" - }, "node_modules/underscore": { "version": "1.13.8", "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.8.tgz", @@ -4769,12 +4698,6 @@ "integrity": "sha512-RURNTeEFUwF+ifnp7kK3WLLlTmBSlRynLNS9jeAsI6RHtSrupV0l0nO6kmpaz75EUJVexy348bR452SvmH98vQ==", "dev": true }, - "@types/markdown-it": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-0.0.2.tgz", - "integrity": "sha1-XZrRnm5lCM3S8llt+G/Qqt5ZhmA=", - "dev": true - }, "@types/mime": { "version": "1.3.1", "resolved": "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.1.tgz", @@ -5878,14 +5801,6 @@ "resolved": "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz", "integrity": "sha1-d4kd6DQGTMy6gq54QrtrFKE+1/I= sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==" }, - "linkify-it": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.2.tgz", - "integrity": "sha512-ONTm2jCMAVZjgQa/Fy1kScXsuOoF5NPTsoFBdE1KVIZ2vAh/r9+Bqo+0jINCBYnavTPQZz38QzFTme79ENoN3Q==", - "requires": { - "uc.micro": "^2.0.0" - } - }, "locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", @@ -5964,36 +5879,16 @@ "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", "dev": true }, - "markdown-it": { - "version": "14.2.0", - "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.2.0.tgz", - "integrity": "sha512-1TGiQiJVRQ3NPmZH6sx5Cfnmg6GQm9jvC1ch4TK511NjSJvjzKLzn5pPfZRNZkRPZP0HqCioSndqH8v2nRaWVQ==", - "requires": { - "argparse": "^2.0.1", - "entities": "^4.4.0", - "linkify-it": "^5.0.1", - "mdurl": "^2.0.0", - "punycode.js": "^2.3.1", - "uc.micro": "^2.1.0" - }, - "dependencies": { - "entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==" - } - } + "marked": { + "version": "18.0.10", + "resolved": "https://registry.npmjs.org/marked/-/marked-18.0.10.tgz", + "integrity": "sha512-FJeH4bRpYoXiggcgriCGItKCSv3xkngJc4QCZ/rkQCogU3VYaLxYJoZl8Nw/b4+x7iij/pd+09mZ6A1dXzpL0A==" }, "math-intrinsics": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==" }, - "mdurl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz", - "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==" - }, "mime": { "version": "1.6.0", "resolved": "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz", @@ -6377,11 +6272,6 @@ "once": "^1.3.1" } }, - "punycode.js": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz", - "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==" - }, "qs": { "version": "6.15.2", "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.2.tgz", @@ -6825,11 +6715,6 @@ "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "dev": true }, - "uc.micro": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz", - "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==" - }, "underscore": { "version": "1.13.8", "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.8.tgz", diff --git a/package.json b/package.json index 10d9bf73..ba81a87c 100644 --- a/package.json +++ b/package.json @@ -54,7 +54,7 @@ "hosted-git-info": "^4.0.2", "jsonc-parser": "^3.2.0", "leven": "^3.1.0", - "markdown-it": "^14.1.0", + "marked": "^18.0.10", "mime": "^1.3.4", "minimatch": "^10.2.2", "parse-semver": "^1.1.1", @@ -71,7 +71,6 @@ "devDependencies": { "@microsoft/api-extractor": "^7.33.7", "@types/hosted-git-info": "^3.0.2", - "@types/markdown-it": "^0.0.2", "@types/mime": "^1", "@types/mocha": "^7.0.2", "@types/node": "^20.0.0", diff --git a/src/package.ts b/src/package.ts index 7857fa29..ad4f6bb5 100644 --- a/src/package.ts +++ b/src/package.ts @@ -8,8 +8,8 @@ import { ITranslations, patchNLS } from './nls'; import * as util from './util'; import { glob } from 'glob'; import { minimatch, MinimatchOptions } from 'minimatch'; -import markdownit from 'markdown-it'; import { parse, type DefaultTreeAdapterTypes } from 'parse5'; +import { marked } from 'marked'; import * as url from 'url'; import mime from 'mime'; import * as semver from 'semver'; @@ -889,7 +889,7 @@ export abstract class MarkdownProcessor extends BaseProcessor { } } - const html = markdownit({ html: true }).render(contents); + const html = marked.parse(contents, { async: false }); const document = parse(html); const images: DefaultTreeAdapterTypes.Element[] = []; let hasSvg = false; From 820d37caa921d60bf6e5b1112f2ff6f45e36910e Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Fri, 21 Aug 2026 14:44:37 -0700 Subject: [PATCH 5/8] Replace tmp with Node.js built-ins --- package-lock.json | 27 --------- package.json | 2 - src/publish.ts | 37 ++++++++----- src/test/package.test.ts | 35 +++++------- src/test/store.test.ts | 117 ++++++++++++++++++++------------------- 5 files changed, 99 insertions(+), 119 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7df7d456..d4c85e8e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -31,7 +31,6 @@ "parse5": "^8.0.1", "read": "^1.0.7", "semver": "^7.5.2", - "tmp": "^0.2.3", "typed-rest-client": "^1.8.4", "url-join": "^4.0.1", "xml2js": "^0.5.0", @@ -49,7 +48,6 @@ "@types/node": "^20.0.0", "@types/read": "^0.0.28", "@types/semver": "^6.0.0", - "@types/tmp": "^0.2.2", "@types/url-join": "^4.0.1", "@types/xml2js": "^0.4.4", "@types/yauzl": "^2.9.2", @@ -879,12 +877,6 @@ "integrity": "sha1-hrqJ8CpBTjnGjQKzUYcuTtMb13M= sha512-OO0srjOGH99a4LUN2its3+r6CBYcplhJ466yLqs+zvAWgphCpS8hYZEZ797tRDP/QKcqTdb/YCN6ifASoAWkrQ==", "dev": true }, - "node_modules/@types/tmp": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/@types/tmp/-/tmp-0.2.2.tgz", - "integrity": "sha512-MhSa0yylXtVMsyT8qFpHA1DLHj4DvQGH5ntxrhHSh8PxUVNi35Wk+P5hVgqbO2qZqOotqr9jaoPRL+iRjWYm/A==", - "dev": true - }, "node_modules/@types/url-join": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/@types/url-join/-/url-join-4.0.1.tgz", @@ -3715,14 +3707,6 @@ "url": "https://bevry.me/fund" } }, - "node_modules/tmp": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.7.tgz", - "integrity": "sha512-e0votIpp4Uo2AJYSzVHV6xCcawuiez3DzqDAbrTc3YxBkplN6e+dM13ZeIcZnDg/QpSuU2zfZ3rzwY8ukEnaXw==", - "engines": { - "node": ">=14.14" - } - }, "node_modules/ts-node": { "version": "10.9.1", "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", @@ -4736,12 +4720,6 @@ "integrity": "sha1-hrqJ8CpBTjnGjQKzUYcuTtMb13M= sha512-OO0srjOGH99a4LUN2its3+r6CBYcplhJ466yLqs+zvAWgphCpS8hYZEZ797tRDP/QKcqTdb/YCN6ifASoAWkrQ==", "dev": true }, - "@types/tmp": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/@types/tmp/-/tmp-0.2.2.tgz", - "integrity": "sha512-MhSa0yylXtVMsyT8qFpHA1DLHj4DvQGH5ntxrhHSh8PxUVNi35Wk+P5hVgqbO2qZqOotqr9jaoPRL+iRjWYm/A==", - "dev": true - }, "@types/url-join": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/@types/url-join/-/url-join-4.0.1.tgz", @@ -6654,11 +6632,6 @@ "editions": "^6.21.0" } }, - "tmp": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.7.tgz", - "integrity": "sha512-e0votIpp4Uo2AJYSzVHV6xCcawuiez3DzqDAbrTc3YxBkplN6e+dM13ZeIcZnDg/QpSuU2zfZ3rzwY8ukEnaXw==" - }, "ts-node": { "version": "10.9.1", "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", diff --git a/package.json b/package.json index ba81a87c..ff35b027 100644 --- a/package.json +++ b/package.json @@ -61,7 +61,6 @@ "parse5": "^8.0.1", "read": "^1.0.7", "semver": "^7.5.2", - "tmp": "^0.2.3", "typed-rest-client": "^1.8.4", "url-join": "^4.0.1", "xml2js": "^0.5.0", @@ -76,7 +75,6 @@ "@types/node": "^20.0.0", "@types/read": "^0.0.28", "@types/semver": "^6.0.0", - "@types/tmp": "^0.2.2", "@types/url-join": "^4.0.1", "@types/xml2js": "^0.4.4", "@types/yauzl": "^2.9.2", diff --git a/src/publish.ts b/src/publish.ts index 825c8aa9..997bfacf 100644 --- a/src/publish.ts +++ b/src/publish.ts @@ -1,9 +1,7 @@ import * as fs from 'fs'; -import { promisify } from 'util'; import * as semver from 'semver'; import { ExtensionQueryFlags, PublishedExtension } from 'azure-devops-node-api/interfaces/GalleryInterfaces'; import { pack, readManifest, versionBump, prepublish, signPackage, createSignatureArchive } from './package'; -import * as tmp from 'tmp'; import { getPublisher } from './store'; import { getGalleryAPI, read, getPublishedUrl, log, getHubUrl, patchOptionsWithManifest } from './util'; import { ManifestPackage, ManifestPublish } from './manifest'; @@ -11,12 +9,21 @@ import { readVSIXPackage } from './zip'; import { validatePublisher } from './validation'; import { GalleryApi } from 'azure-devops-node-api/GalleryApi'; import FormData from 'form-data'; -import { basename } from 'path'; +import { basename, join } from 'path'; +import { tmpdir } from 'os'; import { IterableBackoff, handleWhen, retry } from 'cockatiel'; import { getAzureCredentialAccessToken } from './auth'; import { getOIDCCredential } from './oidc'; -const tmpName = promisify(tmp.tmpName); +async function withTemporaryPackage(fn: (packagePath: string) => Promise): Promise { + const directory = await fs.promises.mkdtemp(join(tmpdir(), 'vsce-')); + + try { + return await fn(join(directory, 'extension.vsix')); + } finally { + await fs.promises.rm(directory, { recursive: true, force: true }); + } +} /** * Options for the `publish` function. @@ -173,18 +180,20 @@ export async function publish(options: IPublishOptions = {}): Promise { if (options.targets) { for (const target of options.targets) { - const packagePath = await tmpName(); - const packageResult = await pack({ ...options, target, packagePath }); - const manifestValidated = validateManifestForPublishing(packageResult.manifest, options); - const sigzipPath = options.signTool ? await signPackage(packagePath, options.signTool) : undefined; - await _publish(packagePath, sigzipPath, manifestValidated, { ...options, target }); + await withTemporaryPackage(async packagePath => { + const packageResult = await pack({ ...options, target, packagePath }); + const manifestValidated = validateManifestForPublishing(packageResult.manifest, options); + const sigzipPath = options.signTool ? await signPackage(packagePath, options.signTool) : undefined; + await _publish(packagePath, sigzipPath, manifestValidated, { ...options, target }); + }); } } else { - const packagePath = await tmpName(); - const packageResult = await pack({ ...options, packagePath }); - const manifestValidated = validateManifestForPublishing(packageResult.manifest, options); - const sigzipPath = options.signTool ? await signPackage(packagePath, options.signTool) : undefined; - await _publish(packagePath, sigzipPath, manifestValidated, options); + await withTemporaryPackage(async packagePath => { + const packageResult = await pack({ ...options, packagePath }); + const manifestValidated = validateManifestForPublishing(packageResult.manifest, options); + const sigzipPath = options.signTool ? await signPackage(packagePath, options.signTool) : undefined; + await _publish(packagePath, sigzipPath, manifestValidated, options); + }); } } } diff --git a/src/test/package.test.ts b/src/test/package.test.ts index a575e5b9..d2925dce 100644 --- a/src/test/package.test.ts +++ b/src/test/package.test.ts @@ -19,9 +19,8 @@ import { import { ManifestPackage } from '../manifest'; import * as path from 'path'; import * as fs from 'fs'; -import * as fsp from 'fs/promises'; import * as assert from 'assert'; -import * as tmp from 'tmp'; +import { tmpdir } from 'os'; import { spawnSync } from 'child_process'; import { XMLManifest, parseXmlManifest, parseContentTypes } from '../xml'; import { flatten, log } from '../util'; @@ -182,17 +181,17 @@ async function processExitNotExpected(fn: () => Promise, errorMessage: stri describe('collect', function () { this.timeout(60000); - let testDir: tmp.DirResult; + let testDir: string; before(() => { - testDir = tmp.dirSync({ unsafeCleanup: true, tmpdir: fixture('') }); + testDir = fs.mkdtempSync(path.join(fixture(''), 'vsce-test-')); }); after(() => { - testDir.removeCallback(); + fs.rmSync(testDir, { recursive: true, force: true }); }); function getVisxOutputPath() { const randomValue = Math.random().toString(36).substring(2, 15); - return path.join(testDir.name, `extension-${randomValue}.vsix`); + return path.join(testDir, `extension-${randomValue}.vsix`); } it('should catch all files', () => { @@ -3288,15 +3287,15 @@ describe('LicenseProcessor', () => { describe('version', function () { this.timeout(5000); - let dir: tmp.DirResult; + let dir: string; const fixtureFolder = fixture('vsixmanifest'); let cwd: string; const git = (args: string[]) => spawnSync('git', args, { cwd, encoding: 'utf-8', shell: true }); beforeEach(() => { - dir = tmp.dirSync({ unsafeCleanup: true }); - cwd = dir.name; + dir = fs.mkdtempSync(path.join(tmpdir(), 'vsce-test-')); + cwd = dir; fs.copyFileSync(path.join(fixtureFolder, 'package.json'), path.join(cwd, 'package.json')); git(['init']); git(['config', '--local', 'user.name', 'Sample Name']); @@ -3304,7 +3303,7 @@ describe('version', function () { }); afterEach(() => { - dir.removeCallback(); + fs.rmSync(dir, { recursive: true, force: true }); }); it('should bump patch version', async () => { @@ -3383,8 +3382,8 @@ describe('writeVsix', function () { const exampleProject = fixture('manifestFiles'); const fixtureDir = fixture(''); - const testDir = tmp.dirSync({ unsafeCleanup: true, tmpdir: fixtureDir }); - const cwd = testDir.name; + const testDir = fs.mkdtempSync(path.join(fixtureDir, 'vsce-test-')); + const cwd = testDir; try { fs.cpSync(exampleProject, cwd, { recursive: true }); @@ -3394,9 +3393,9 @@ describe('writeVsix', function () { await pack({ cwd, packagePath: vsixPath }); } - const vsix1 = testDir.name + '/vsix1.vsix'; - const vsix2 = testDir.name + '/vsix2.vsix'; - const vsix3 = testDir.name + '/vsix3.vsix'; + const vsix1 = path.join(testDir, 'vsix1.vsix'); + const vsix2 = path.join(testDir, 'vsix2.vsix'); + const vsix3 = path.join(testDir, 'vsix3.vsix'); await createVsix(vsix1, 1000000000); await createVsix(vsix2, 1000000000); @@ -3410,11 +3409,7 @@ describe('writeVsix', function () { assert.notDeepStrictEqual(vsix1bytes, vsix3bytes); } finally { - try { - await fsp.rm(testDir.name, { recursive: true, force: true }); - } catch (e) { - testDir.removeCallback(); - } + await fs.promises.rm(testDir, { recursive: true, force: true }); } }); }); diff --git a/src/test/store.test.ts b/src/test/store.test.ts index 209ae207..c2d52d44 100644 --- a/src/test/store.test.ts +++ b/src/test/store.test.ts @@ -1,72 +1,77 @@ import * as assert from 'assert'; -import * as tmp from 'tmp'; import * as fs from 'fs'; +import * as path from 'path'; +import { tmpdir } from 'os'; import { FileStore } from '../store'; describe('FileStore', () => { it('works', async () => { - const name = tmp.tmpNameSync(); - const store = await FileStore.open(name); + const directory = fs.mkdtempSync(path.join(tmpdir(), 'vsce-test-')); + const name = path.join(directory, 'store.json'); - assert.deepStrictEqual(store.get('joe'), undefined); - assert.deepStrictEqual([...store], []); - assert.ok(!fs.existsSync(name)); + try { + const store = await FileStore.open(name); - await store.add({ name: 'joe', pat: 'abc' }); - assert.deepStrictEqual(store.get('joe'), { name: 'joe', pat: 'abc' }); - assert.deepStrictEqual([...store], [{ name: 'joe', pat: 'abc' }]); - assert.deepStrictEqual(JSON.parse(fs.readFileSync(name, 'utf8')), { - publishers: [{ name: 'joe', pat: 'abc' }], - }); + assert.deepStrictEqual(store.get('joe'), undefined); + assert.deepStrictEqual([...store], []); + assert.ok(!fs.existsSync(name)); - await store.add({ name: 'joe', pat: 'what' }); - assert.deepStrictEqual(store.get('joe'), { name: 'joe', pat: 'what' }); - assert.deepStrictEqual([...store], [{ name: 'joe', pat: 'what' }]); - assert.deepStrictEqual(JSON.parse(fs.readFileSync(name, 'utf8')), { - publishers: [{ name: 'joe', pat: 'what' }], - }); + await store.add({ name: 'joe', pat: 'abc' }); + assert.deepStrictEqual(store.get('joe'), { name: 'joe', pat: 'abc' }); + assert.deepStrictEqual([...store], [{ name: 'joe', pat: 'abc' }]); + assert.deepStrictEqual(JSON.parse(fs.readFileSync(name, 'utf8')), { + publishers: [{ name: 'joe', pat: 'abc' }], + }); - await store.add({ name: 'jane', pat: 'oh' }); - assert.deepStrictEqual(store.get('joe'), { name: 'joe', pat: 'what' }); - assert.deepStrictEqual(store.get('jane'), { name: 'jane', pat: 'oh' }); - assert.deepStrictEqual( - [...store], - [ - { name: 'joe', pat: 'what' }, - { name: 'jane', pat: 'oh' }, - ] - ); - assert.deepStrictEqual(JSON.parse(fs.readFileSync(name, 'utf8')), { - publishers: [ - { name: 'joe', pat: 'what' }, - { name: 'jane', pat: 'oh' }, - ], - }); + await store.add({ name: 'joe', pat: 'what' }); + assert.deepStrictEqual(store.get('joe'), { name: 'joe', pat: 'what' }); + assert.deepStrictEqual([...store], [{ name: 'joe', pat: 'what' }]); + assert.deepStrictEqual(JSON.parse(fs.readFileSync(name, 'utf8')), { + publishers: [{ name: 'joe', pat: 'what' }], + }); - await store.delete('joe'); - assert.deepStrictEqual(store.get('joe'), undefined); - assert.deepStrictEqual(store.get('jane'), { name: 'jane', pat: 'oh' }); - assert.deepStrictEqual([...store], [{ name: 'jane', pat: 'oh' }]); - assert.deepStrictEqual(JSON.parse(fs.readFileSync(name, 'utf8')), { - publishers: [{ name: 'jane', pat: 'oh' }], - }); + await store.add({ name: 'jane', pat: 'oh' }); + assert.deepStrictEqual(store.get('joe'), { name: 'joe', pat: 'what' }); + assert.deepStrictEqual(store.get('jane'), { name: 'jane', pat: 'oh' }); + assert.deepStrictEqual( + [...store], + [ + { name: 'joe', pat: 'what' }, + { name: 'jane', pat: 'oh' }, + ] + ); + assert.deepStrictEqual(JSON.parse(fs.readFileSync(name, 'utf8')), { + publishers: [ + { name: 'joe', pat: 'what' }, + { name: 'jane', pat: 'oh' }, + ], + }); - await store.delete('joe'); - assert.deepStrictEqual(store.get('joe'), undefined); - assert.deepStrictEqual(store.get('jane'), { name: 'jane', pat: 'oh' }); - assert.deepStrictEqual([...store], [{ name: 'jane', pat: 'oh' }]); - assert.deepStrictEqual(JSON.parse(fs.readFileSync(name, 'utf8')), { - publishers: [{ name: 'jane', pat: 'oh' }], - }); + await store.delete('joe'); + assert.deepStrictEqual(store.get('joe'), undefined); + assert.deepStrictEqual(store.get('jane'), { name: 'jane', pat: 'oh' }); + assert.deepStrictEqual([...store], [{ name: 'jane', pat: 'oh' }]); + assert.deepStrictEqual(JSON.parse(fs.readFileSync(name, 'utf8')), { + publishers: [{ name: 'jane', pat: 'oh' }], + }); - await store.delete('jane'); - assert.deepStrictEqual(store.get('joe'), undefined); - assert.deepStrictEqual(store.get('jane'), undefined); - assert.deepStrictEqual([...store], []); - assert.deepStrictEqual(JSON.parse(fs.readFileSync(name, 'utf8')), { - publishers: [], - }); + await store.delete('joe'); + assert.deepStrictEqual(store.get('joe'), undefined); + assert.deepStrictEqual(store.get('jane'), { name: 'jane', pat: 'oh' }); + assert.deepStrictEqual([...store], [{ name: 'jane', pat: 'oh' }]); + assert.deepStrictEqual(JSON.parse(fs.readFileSync(name, 'utf8')), { + publishers: [{ name: 'jane', pat: 'oh' }], + }); - fs.unlinkSync(name); + await store.delete('jane'); + assert.deepStrictEqual(store.get('joe'), undefined); + assert.deepStrictEqual(store.get('jane'), undefined); + assert.deepStrictEqual([...store], []); + assert.deepStrictEqual(JSON.parse(fs.readFileSync(name, 'utf8')), { + publishers: [], + }); + } finally { + fs.rmSync(directory, { recursive: true, force: true }); + } }); }); From bc351fbcb96351885f328075225859941ed1acf5 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Fri, 21 Aug 2026 14:54:20 -0700 Subject: [PATCH 6/8] Remove Secretlint SARIF formatter dependency --- package-lock.json | 65 +- package.json | 1 - src/secretLint.ts | 144 +- src/typings/secret-lint-types.ts | 3348 ------------------------------ 4 files changed, 118 insertions(+), 3440 deletions(-) delete mode 100644 src/typings/secret-lint-types.ts diff --git a/package-lock.json b/package-lock.json index d4c85e8e..9562410a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,7 +11,6 @@ "dependencies": { "@azure/identity": "^4.1.0", "@secretlint/node": "^10.1.2", - "@secretlint/secretlint-formatter-sarif": "^10.1.2", "@secretlint/secretlint-rule-no-dotenv": "^10.1.2", "@secretlint/secretlint-rule-preset-recommend": "^10.1.2", "@vscode/vsce-sign": "^2.0.0", @@ -698,15 +697,6 @@ "integrity": "sha512-3md0cp12e+Ae5V+crPQYGd6aaO7ahw95s28OlULGyclyyUtf861UoRGS2prnUrKh7MZb23kdDOyGCYb9br5e4w==", "license": "MIT" }, - "node_modules/@secretlint/secretlint-formatter-sarif": { - "version": "10.2.2", - "resolved": "https://registry.npmjs.org/@secretlint/secretlint-formatter-sarif/-/secretlint-formatter-sarif-10.2.2.tgz", - "integrity": "sha512-ojiF9TGRKJJw308DnYBucHxkpNovDNu1XvPh7IfUp0A12gzTtxuWDqdpuVezL7/IP8Ua7mp5/VkDMN9OLp1doQ==", - "license": "MIT", - "dependencies": { - "node-sarif-builder": "^3.2.0" - } - }, "node_modules/@secretlint/secretlint-rule-no-dotenv": { "version": "10.2.2", "resolved": "https://registry.npmjs.org/@secretlint/secretlint-rule-no-dotenv/-/secretlint-rule-no-dotenv-10.2.2.tgz", @@ -865,12 +855,6 @@ "integrity": "sha1-zQvkCbGSxhGfF+Z9Q09MbpQY8bU=", "dev": true }, - "node_modules/@types/sarif": { - "version": "2.1.7", - "resolved": "https://registry.npmjs.org/@types/sarif/-/sarif-2.1.7.tgz", - "integrity": "sha512-kRz0VEkJqWLf1LLVN4pT1cg1Z9wAuvI6L97V3m2f5B76Tg8d413ddvLBPTEHAZJlnn4XSvu0FkZtViCQGVyrXQ==", - "license": "MIT" - }, "node_modules/@types/semver": { "version": "6.0.0", "resolved": "https://registry.yarnpkg.com/@types/semver/-/semver-6.0.0.tgz", @@ -1922,6 +1906,7 @@ "version": "11.3.4", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.4.tgz", "integrity": "sha512-CTXd6rk/M3/ULNQj8FBqBWHYBVYybQ3VPBw0xGKFe3tuH7ytT6ACnvzpIQ3UZtB8yvUKC2cXn1a+x+5EVQLovA==", + "dev": true, "license": "MIT", "dependencies": { "graceful-fs": "^4.2.0", @@ -2073,7 +2058,8 @@ "node_modules/graceful-fs": { "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true }, "node_modules/has-flag": { "version": "4.0.0", @@ -2396,6 +2382,7 @@ "version": "6.2.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", + "dev": true, "license": "MIT", "dependencies": { "universalify": "^2.0.0" @@ -2860,19 +2847,6 @@ "integrity": "sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==", "optional": true }, - "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==", - "license": "MIT", - "dependencies": { - "@types/sarif": "^2.1.7", - "fs-extra": "^11.1.1" - }, - "engines": { - "node": ">=18" - } - }, "node_modules/npmlog": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", @@ -3815,6 +3789,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, "license": "MIT", "engines": { "node": ">= 10.0.0" @@ -4560,14 +4535,6 @@ "resolved": "https://registry.npmjs.org/@secretlint/resolver/-/resolver-10.2.2.tgz", "integrity": "sha512-3md0cp12e+Ae5V+crPQYGd6aaO7ahw95s28OlULGyclyyUtf861UoRGS2prnUrKh7MZb23kdDOyGCYb9br5e4w==" }, - "@secretlint/secretlint-formatter-sarif": { - "version": "10.2.2", - "resolved": "https://registry.npmjs.org/@secretlint/secretlint-formatter-sarif/-/secretlint-formatter-sarif-10.2.2.tgz", - "integrity": "sha512-ojiF9TGRKJJw308DnYBucHxkpNovDNu1XvPh7IfUp0A12gzTtxuWDqdpuVezL7/IP8Ua7mp5/VkDMN9OLp1doQ==", - "requires": { - "node-sarif-builder": "^3.2.0" - } - }, "@secretlint/secretlint-rule-no-dotenv": { "version": "10.2.2", "resolved": "https://registry.npmjs.org/@secretlint/secretlint-rule-no-dotenv/-/secretlint-rule-no-dotenv-10.2.2.tgz", @@ -4709,11 +4676,6 @@ "integrity": "sha1-zQvkCbGSxhGfF+Z9Q09MbpQY8bU=", "dev": true }, - "@types/sarif": { - "version": "2.1.7", - "resolved": "https://registry.npmjs.org/@types/sarif/-/sarif-2.1.7.tgz", - "integrity": "sha512-kRz0VEkJqWLf1LLVN4pT1cg1Z9wAuvI6L97V3m2f5B76Tg8d413ddvLBPTEHAZJlnn4XSvu0FkZtViCQGVyrXQ==" - }, "@types/semver": { "version": "6.0.0", "resolved": "https://registry.yarnpkg.com/@types/semver/-/semver-6.0.0.tgz", @@ -5416,6 +5378,7 @@ "version": "11.3.4", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.4.tgz", "integrity": "sha512-CTXd6rk/M3/ULNQj8FBqBWHYBVYybQ3VPBw0xGKFe3tuH7ytT6ACnvzpIQ3UZtB8yvUKC2cXn1a+x+5EVQLovA==", + "dev": true, "requires": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", @@ -5527,7 +5490,8 @@ "graceful-fs": { "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true }, "has-flag": { "version": "4.0.0", @@ -5723,6 +5687,7 @@ "version": "6.2.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", + "dev": true, "requires": { "graceful-fs": "^4.1.6", "universalify": "^2.0.0" @@ -6057,15 +6022,6 @@ "integrity": "sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==", "optional": true }, - "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==", - "requires": { - "@types/sarif": "^2.1.7", - "fs-extra": "^11.1.1" - } - }, "npmlog": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", @@ -6702,7 +6658,8 @@ "universalify": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==" + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true }, "url-join": { "version": "4.0.1", diff --git a/package.json b/package.json index ff35b027..f5fd76f8 100644 --- a/package.json +++ b/package.json @@ -41,7 +41,6 @@ "dependencies": { "@azure/identity": "^4.1.0", "@secretlint/node": "^10.1.2", - "@secretlint/secretlint-formatter-sarif": "^10.1.2", "@secretlint/secretlint-rule-no-dotenv": "^10.1.2", "@secretlint/secretlint-rule-preset-recommend": "^10.1.2", "@vscode/vsce-sign": "^2.0.0", diff --git a/src/secretLint.ts b/src/secretLint.ts index 104bbbe0..656116a3 100644 --- a/src/secretLint.ts +++ b/src/secretLint.ts @@ -1,5 +1,6 @@ import chalk from "chalk"; -import { Convert, Location, Region, Result, Level } from "./typings/secret-lint-types"; +import * as path from "path"; +import { pathToFileURL } from "url"; import { log } from "./util"; interface SecretLintEngineResult { @@ -7,9 +8,43 @@ interface SecretLintEngineResult { output: string; } +type SecretLintSeverity = "error" | "warning" | "info"; + +interface SecretLintPosition { + line: number | null; + column: number | null; +} + +interface SecretLintMessage { + message: string; + ruleId: string; + ruleParentId?: string; + loc: { + start: SecretLintPosition; + end: SecretLintPosition; + }; + severity: SecretLintSeverity; +} + +interface SecretLintFileResult { + filePath: string; + messages: SecretLintMessage[]; +} + +interface SecretLintFinding { + message: string; + ruleId: string; + level: "error" | "warning" | "note"; + filePath: string; + startLine?: number; + startColumn?: number; + endLine?: number; + endColumn?: number; +} + interface SecretLintResult { ok: boolean; - results: Result[]; + results: SecretLintFinding[]; } const secretsScanningRules = [ @@ -49,11 +84,8 @@ const dotEnvRules = [ } ]; -// Helper function to dynamically import the createEngine function async function getEngine(scanSecrets: boolean, scanDotEnv: boolean) { - // Use a raw dynamic import that will not be transformed - // This is necessary because @secretlint/node is an ESM module - const secretlintModule = await eval('import("@secretlint/node")'); + const { createEngine } = require("@secretlint/node") as typeof import("@secretlint/node"); const rules = []; if (scanSecrets) { @@ -65,12 +97,12 @@ async function getEngine(scanSecrets: boolean, scanDotEnv: boolean) { const lintOptions = { configFileJSON: { rules: rules }, - formatter: "@secretlint/secretlint-formatter-sarif", // checkstyle, compact, jslint-xml, junit, pretty-error, stylish, tap, unix, json, mask-result, table + formatter: "json", color: true, maskSecrets: false }; - const engine = await secretlintModule.createEngine(lintOptions); + const engine = await createEngine(lintOptions); return engine; } @@ -116,46 +148,84 @@ export async function lintText( } function parseResult(result: SecretLintEngineResult): SecretLintResult { - const output = Convert.toSecretLintOutput(result.output); - const results = output.runs.at(0)?.results ?? []; + const output: unknown = JSON.parse(result.output); + if (!Array.isArray(output) || !output.every(isSecretLintFileResult)) { + throw new Error("Unexpected output from secretlint"); + } + + const results = output.flatMap(fileResult => + fileResult.messages.map((message): SecretLintFinding => ({ + message: message.message, + ruleId: message.ruleParentId ? `${message.ruleParentId} > ${message.ruleId}` : message.ruleId, + level: message.severity === "info" ? "note" : message.severity, + filePath: process.env.SARIF_URI_ABSOLUTE + ? pathToFileURL(fileResult.filePath).toString() + : path.relative(process.cwd(), fileResult.filePath), + startLine: fixLine(message.loc.start.line), + startColumn: fixColumn(message.loc.start.column), + endLine: fixLine(message.loc.end.line), + endColumn: fixColumn(message.loc.end.column) + })) + ); + return { ok: result.ok, results }; } +function isSecretLintFileResult(value: unknown): value is SecretLintFileResult { + return isRecord(value) + && typeof value.filePath === "string" + && Array.isArray(value.messages) + && value.messages.every(isSecretLintMessage); +} + +function isSecretLintMessage(value: unknown): value is SecretLintMessage { + return isRecord(value) + && typeof value.message === "string" + && typeof value.ruleId === "string" + && (value.ruleParentId === undefined || typeof value.ruleParentId === "string") + && isRecord(value.loc) + && isSecretLintPosition(value.loc.start) + && isSecretLintPosition(value.loc.end) + && (value.severity === "error" || value.severity === "warning" || value.severity === "info"); +} + +function isSecretLintPosition(value: unknown): value is SecretLintPosition { + return isRecord(value) + && (value.line === null || typeof value.line === "number") + && (value.column === null || typeof value.column === "number"); +} + +function isRecord(value: unknown): value is Record { + return typeof value === "object" && value !== null; +} + +function fixLine(value: number | null): number | undefined { + return value === null ? undefined : value === 0 ? 1 : value; +} + +function fixColumn(value: number | null): number | undefined { + return value === null ? undefined : value === 0 ? 1 : value + 1; +} + export function getRuleNameFromRuleId(ruleId: string): string { const parts = ruleId.split('-rule-'); return parts[parts.length - 1]; } -export function prettyPrintLintResult(result: Result): string { - if (!result.message.text) { - return JSON.stringify(result); - } - - const text = result.message.text; - const titleColor = result.level === undefined || result.level === Level.Error ? chalk.bold.red : chalk.bold.yellow; +export function prettyPrintLintResult(result: SecretLintFinding): string { + const text = result.message; + const titleColor = result.level === "error" ? chalk.bold.red : chalk.bold.yellow; const title = text.length > 54 ? text.slice(0, 50) + '...' : text; - const ruleName = result.ruleId ? getRuleNameFromRuleId(result.ruleId) : 'unknown'; + const ruleName = getRuleNameFromRuleId(result.ruleId); let output = `\t${titleColor(title)} [${ruleName}]\n`; - - if (result.locations) { - result.locations.forEach(location => { - output += `\t${prettyPrintLocation(location)}\n`; - }); - } + output += `\t${prettyPrintLocation(result)}\n`; return output; } -function prettyPrintLocation(location: Location): string { - if (!location.physicalLocation) { return JSON.stringify(location); } - - const uri = location.physicalLocation.artifactLocation?.uri; - if (!uri) { return JSON.stringify(location); } - - let output = uri; - - const region = location.physicalLocation.region; - const regionStringified = region ? prettyPrintRegion(region) : undefined; +function prettyPrintLocation(result: SecretLintFinding): string { + let output = result.filePath; + const regionStringified = prettyPrintRegion(result); if (regionStringified) { output += `#${regionStringified}`; } @@ -163,9 +233,9 @@ function prettyPrintLocation(location: Location): string { return output; } -function prettyPrintRegion(region: Region): string | undefined { - const startPosition = prettyPrintPosition(region.startLine, region.startColumn); - const endPosition = prettyPrintPosition(region.endLine, region.endColumn); +function prettyPrintRegion(result: SecretLintFinding): string | undefined { + const startPosition = prettyPrintPosition(result.startLine, result.startColumn); + const endPosition = prettyPrintPosition(result.endLine, result.endColumn); if (!startPosition) { return undefined; diff --git a/src/typings/secret-lint-types.ts b/src/typings/secret-lint-types.ts deleted file mode 100644 index 6a540c58..00000000 --- a/src/typings/secret-lint-types.ts +++ /dev/null @@ -1,3348 +0,0 @@ -// To parse this data: -// -// import { Convert, SecretLintOutput } from "./file"; -// -// const secretLintOutput = Convert.toSecretLintOutput(json); -// -// These functions will throw an error if the JSON doesn't -// match the expected interface, even if the JSON is valid. - -/** - * Static Analysis Results Format (SARIF) Version 2.1.0-rtm.5 JSON Schema: a standard format - * for the output of static analysis tools. - */ -export interface SecretLintOutput { - /** - * The URI of the JSON schema corresponding to the version. - */ - $schema?: string; - /** - * References to external property files that share data between runs. - */ - inlineExternalProperties?: ExternalProperties[]; - /** - * Key/value pairs that provide additional information about the log file. - */ - properties?: PropertyBag; - /** - * The set of runs contained in this log file. - */ - runs: Run[]; - /** - * The SARIF format version of this log file. - */ - version: Version; -} - -/** - * The top-level element of an external property file. - */ -export interface ExternalProperties { - /** - * Addresses that will be merged with a separate run. - */ - addresses?: Address[]; - /** - * An array of artifact objects that will be merged with a separate run. - */ - artifacts?: Artifact[]; - /** - * A conversion object that will be merged with a separate run. - */ - conversion?: Conversion; - /** - * The analysis tool object that will be merged with a separate run. - */ - driver?: ToolComponent; - /** - * Tool extensions that will be merged with a separate run. - */ - extensions?: ToolComponent[]; - /** - * Key/value pairs that provide additional information that will be merged with a separate - * run. - */ - externalizedProperties?: PropertyBag; - /** - * An array of graph objects that will be merged with a separate run. - */ - graphs?: Graph[]; - /** - * A stable, unique identifier for this external properties object, in the form of a GUID. - */ - guid?: string; - /** - * Describes the invocation of the analysis tool that will be merged with a separate run. - */ - invocations?: Invocation[]; - /** - * An array of logical locations such as namespaces, types or functions that will be merged - * with a separate run. - */ - logicalLocations?: LogicalLocation[]; - /** - * Tool policies that will be merged with a separate run. - */ - policies?: ToolComponent[]; - /** - * Key/value pairs that provide additional information about the external properties. - */ - properties?: PropertyBag; - /** - * An array of result objects that will be merged with a separate run. - */ - results?: Result[]; - /** - * A stable, unique identifier for the run associated with this external properties object, - * in the form of a GUID. - */ - runGuid?: string; - /** - * The URI of the JSON schema corresponding to the version of the external property file - * format. - */ - schema?: string; - /** - * Tool taxonomies that will be merged with a separate run. - */ - taxonomies?: ToolComponent[]; - /** - * An array of threadFlowLocation objects that will be merged with a separate run. - */ - threadFlowLocations?: ThreadFlowLocation[]; - /** - * Tool translations that will be merged with a separate run. - */ - translations?: ToolComponent[]; - /** - * The SARIF format version of this external properties object. - */ - version?: Version; - /** - * Requests that will be merged with a separate run. - */ - webRequests?: WebRequest[]; - /** - * Responses that will be merged with a separate run. - */ - webResponses?: WebResponse[]; -} - -/** - * A physical or virtual address, or a range of addresses, in an 'addressable region' - * (memory or a binary file). - * - * The address of the location. - */ -export interface Address { - /** - * The address expressed as a byte offset from the start of the addressable region. - */ - absoluteAddress?: number; - /** - * A human-readable fully qualified name that is associated with the address. - */ - fullyQualifiedName?: string; - /** - * The index within run.addresses of the cached object for this address. - */ - index?: number; - /** - * An open-ended string that identifies the address kind. 'data', 'function', - * 'header','instruction', 'module', 'page', 'section', 'segment', 'stack', 'stackFrame', - * 'table' are well-known values. - */ - kind?: string; - /** - * The number of bytes in this range of addresses. - */ - length?: number; - /** - * A name that is associated with the address, e.g., '.text'. - */ - name?: string; - /** - * The byte offset of this address from the absolute or relative address of the parent - * object. - */ - offsetFromParent?: number; - /** - * The index within run.addresses of the parent object. - */ - parentIndex?: number; - /** - * Key/value pairs that provide additional information about the address. - */ - properties?: PropertyBag; - /** - * The address expressed as a byte offset from the absolute address of the top-most parent - * object. - */ - relativeAddress?: number; -} - -/** - * Key/value pairs that provide additional information about the address. - * - * Key/value pairs that provide additional information about the object. - * - * Key/value pairs that provide additional information about the artifact content. - * - * Key/value pairs that provide additional information about the message. - * - * Key/value pairs that provide additional information about the artifact location. - * - * Key/value pairs that provide additional information about the artifact. - * - * Contains configuration information specific to a report. - * - * Key/value pairs that provide additional information about the reporting configuration. - * - * Key/value pairs that provide additional information about the reporting descriptor - * reference. - * - * Key/value pairs that provide additional information about the toolComponentReference. - * - * Key/value pairs that provide additional information about the configuration override. - * - * Key/value pairs that provide additional information about the invocation. - * - * Key/value pairs that provide additional information about the exception. - * - * Key/value pairs that provide additional information about the region. - * - * Key/value pairs that provide additional information about the logical location. - * - * Key/value pairs that provide additional information about the physical location. - * - * Key/value pairs that provide additional information about the location. - * - * Key/value pairs that provide additional information about the location relationship. - * - * Key/value pairs that provide additional information about the stack frame. - * - * Key/value pairs that provide additional information about the stack. - * - * Key/value pairs that provide additional information about the notification. - * - * Key/value pairs that provide additional information about the conversion. - * - * Key/value pairs that provide additional information about the report. - * - * Key/value pairs that provide additional information about the tool component. - * - * Key/value pairs that provide additional information about the translation metadata. - * - * Key/value pairs that provide additional information about the tool. - * - * Key/value pairs that provide additional information that will be merged with a separate - * run. - * - * Key/value pairs that provide additional information about the edge. - * - * Key/value pairs that provide additional information about the node. - * - * Key/value pairs that provide additional information about the graph. - * - * Key/value pairs that provide additional information about the external properties. - * - * Key/value pairs that provide additional information about the attachment. - * - * Key/value pairs that provide additional information about the rectangle. - * - * Key/value pairs that provide additional information about the code flow. - * - * Key/value pairs that provide additional information about the threadflow location. - * - * Key/value pairs that provide additional information about the request. - * - * Key/value pairs that provide additional information about the response. - * - * Key/value pairs that provide additional information about the thread flow. - * - * Key/value pairs that provide additional information about the change. - * - * Key/value pairs that provide additional information about the replacement. - * - * Key/value pairs that provide additional information about the fix. - * - * Key/value pairs that provide additional information about the edge traversal. - * - * Key/value pairs that provide additional information about the graph traversal. - * - * Key/value pairs that provide additional information about the result. - * - * Key/value pairs that provide additional information about the suppression. - * - * Key/value pairs that provide additional information about the log file. - * - * Key/value pairs that provide additional information about the run automation details. - * - * Key/value pairs that provide additional information about the external property file. - * - * Key/value pairs that provide additional information about the external property files. - * - * Key/value pairs that provide additional information about the run. - * - * Key/value pairs that provide additional information about the special locations. - * - * Key/value pairs that provide additional information about the version control details. - */ -export interface PropertyBag { - /** - * A set of distinct strings that provide additional information. - */ - tags?: string[]; - [property: string]: any; -} - -/** - * A single artifact. In some cases, this artifact might be nested within another artifact. - */ -export interface Artifact { - /** - * The contents of the artifact. - */ - contents?: ArtifactContent; - /** - * A short description of the artifact. - */ - description?: Message; - /** - * Specifies the encoding for an artifact object that refers to a text file. - */ - encoding?: string; - /** - * A dictionary, each of whose keys is the name of a hash function and each of whose values - * is the hashed value of the artifact produced by the specified hash function. - */ - hashes?: { [key: string]: string }; - /** - * The Coordinated Universal Time (UTC) date and time at which the artifact was most - * recently modified. See "Date/time properties" in the SARIF spec for the required format. - */ - lastModifiedTimeUtc?: Date; - /** - * The length of the artifact in bytes. - */ - length?: number; - /** - * The location of the artifact. - */ - location?: ArtifactLocation; - /** - * The MIME type (RFC 2045) of the artifact. - */ - mimeType?: string; - /** - * The offset in bytes of the artifact within its containing artifact. - */ - offset?: number; - /** - * Identifies the index of the immediate parent of the artifact, if this artifact is nested. - */ - parentIndex?: number; - /** - * Key/value pairs that provide additional information about the artifact. - */ - properties?: PropertyBag; - /** - * The role or roles played by the artifact in the analysis. - */ - roles?: Role[]; - /** - * Specifies the source language for any artifact object that refers to a text file that - * contains source code. - */ - sourceLanguage?: string; -} - -/** - * The contents of the artifact. - * - * Represents the contents of an artifact. - * - * The portion of the artifact contents within the specified region. - * - * The body of the request. - * - * The body of the response. - * - * The content to insert at the location specified by the 'deletedRegion' property. - */ -export interface ArtifactContent { - /** - * MIME Base64-encoded content from a binary artifact, or from a text artifact in its - * original encoding. - */ - binary?: string; - /** - * Key/value pairs that provide additional information about the artifact content. - */ - properties?: PropertyBag; - /** - * An alternate rendered representation of the artifact (e.g., a decompiled representation - * of a binary region). - */ - rendered?: MultiformatMessageString; - /** - * UTF-8-encoded content from a text artifact. - */ - text?: string; -} - -/** - * An alternate rendered representation of the artifact (e.g., a decompiled representation - * of a binary region). - * - * A message string or message format string rendered in multiple formats. - * - * A comprehensive description of the tool component. - * - * A description of the report. Should, as far as possible, provide details sufficient to - * enable resolution of any problem indicated by the result. - * - * Provides the primary documentation for the report, useful when there is no online - * documentation. - * - * A concise description of the report. Should be a single sentence that is understandable - * when visible space is limited to a single line of text. - * - * A brief description of the tool component. - * - * A comprehensive description of the translation metadata. - * - * A brief description of the translation metadata. - */ -export interface MultiformatMessageString { - /** - * A Markdown message string or format string. - */ - markdown?: string; - /** - * Key/value pairs that provide additional information about the message. - */ - properties?: PropertyBag; - /** - * A plain text message string or format string. - */ - text: string; -} - -/** - * A short description of the artifact. - * - * A short description of the artifact location. - * - * A message relevant to the region. - * - * A message relevant to the location. - * - * A description of the location relationship. - * - * A message relevant to this call stack. - * - * A message that describes the condition that was encountered. - * - * A description of the reporting descriptor relationship. - * - * A description of the graph. - * - * A short description of the edge. - * - * A short description of the node. - * - * A message describing the role played by the attachment. - * - * A message relevant to the rectangle. - * - * A message relevant to the code flow. - * - * A message relevant to the thread flow. - * - * A message that describes the proposed fix, enabling viewers to present the proposed - * change to an end user. - * - * A description of this graph traversal. - * - * A message to display to the user as the edge is traversed. - * - * A message that describes the result. The first sentence of the message only will be - * displayed when visible space is limited. - * - * A description of the identity and role played within the engineering system by this - * object's containing run object. - * - * Encapsulates a message intended to be read by the end user. - */ -export interface Message { - /** - * An array of strings to substitute into the message string. - */ - arguments?: string[]; - /** - * The identifier for this message. - */ - id?: string; - /** - * A Markdown message string. - */ - markdown?: string; - /** - * Key/value pairs that provide additional information about the message. - */ - properties?: PropertyBag; - /** - * A plain text message string. - */ - text?: string; -} - -/** - * The location of the artifact. - * - * Specifies the location of an artifact. - * - * An absolute URI specifying the location of the executable that was invoked. - * - * A file containing the standard error stream from the process that was invoked. - * - * A file containing the standard input stream to the process that was invoked. - * - * A file containing the standard output stream from the process that was invoked. - * - * A file containing the interleaved standard output and standard error stream from the - * process that was invoked. - * - * The working directory for the invocation. - * - * Identifies the artifact that the analysis tool was instructed to scan. This need not be - * the same as the artifact where the result actually occurred. - * - * The location of the attachment. - * - * The location of the artifact to change. - * - * The location of the external property file. - * - * Provides a suggestion to SARIF consumers to display file paths relative to the specified - * location. - * - * The location in the local file system to which the root of the repository was mapped at - * the time of the analysis. - */ -export interface ArtifactLocation { - /** - * A short description of the artifact location. - */ - description?: Message; - /** - * The index within the run artifacts array of the artifact object associated with the - * artifact location. - */ - index?: number; - /** - * Key/value pairs that provide additional information about the artifact location. - */ - properties?: PropertyBag; - /** - * A string containing a valid relative or absolute URI. - */ - uri?: string; - /** - * A string which indirectly specifies the absolute URI with respect to which a relative URI - * in the "uri" property is interpreted. - */ - uriBaseId?: string; -} - -export enum Role { - Added = "added", - AnalysisTarget = "analysisTarget", - Attachment = "attachment", - DebugOutputFile = "debugOutputFile", - Deleted = "deleted", - Directory = "directory", - Driver = "driver", - Extension = "extension", - MemoryContents = "memoryContents", - Modified = "modified", - Policy = "policy", - ReferencedOnCommandLine = "referencedOnCommandLine", - Renamed = "renamed", - ResponseFile = "responseFile", - ResultFile = "resultFile", - StandardStream = "standardStream", - Taxonomy = "taxonomy", - ToolSpecifiedConfiguration = "toolSpecifiedConfiguration", - TracedFile = "tracedFile", - Translation = "translation", - Uncontrolled = "uncontrolled", - Unmodified = "unmodified", - UserSpecifiedConfiguration = "userSpecifiedConfiguration", -} - -/** - * A conversion object that will be merged with a separate run. - * - * Describes how a converter transformed the output of a static analysis tool from the - * analysis tool's native output format into the SARIF format. - * - * A conversion object that describes how a converter transformed an analysis tool's native - * reporting format into the SARIF format. - */ -export interface Conversion { - /** - * The locations of the analysis tool's per-run log files. - */ - analysisToolLogFiles?: ArtifactLocation[]; - /** - * An invocation object that describes the invocation of the converter. - */ - invocation?: Invocation; - /** - * Key/value pairs that provide additional information about the conversion. - */ - properties?: PropertyBag; - /** - * A tool object that describes the converter. - */ - tool: Tool; -} - -/** - * An invocation object that describes the invocation of the converter. - * - * The runtime environment of the analysis tool run. - */ -export interface Invocation { - /** - * The account under which the invocation occurred. - */ - account?: string; - /** - * An array of strings, containing in order the command line arguments passed to the tool - * from the operating system. - */ - arguments?: string[]; - /** - * The command line used to invoke the tool. - */ - commandLine?: string; - /** - * The Coordinated Universal Time (UTC) date and time at which the invocation ended. See - * "Date/time properties" in the SARIF spec for the required format. - */ - endTimeUtc?: Date; - /** - * The environment variables associated with the analysis tool process, expressed as - * key/value pairs. - */ - environmentVariables?: { [key: string]: string }; - /** - * An absolute URI specifying the location of the executable that was invoked. - */ - executableLocation?: ArtifactLocation; - /** - * Specifies whether the tool's execution completed successfully. - */ - executionSuccessful: boolean; - /** - * The process exit code. - */ - exitCode?: number; - /** - * The reason for the process exit. - */ - exitCodeDescription?: string; - /** - * The name of the signal that caused the process to exit. - */ - exitSignalName?: string; - /** - * The numeric value of the signal that caused the process to exit. - */ - exitSignalNumber?: number; - /** - * The machine on which the invocation occurred. - */ - machine?: string; - /** - * An array of configurationOverride objects that describe notifications related runtime - * overrides. - */ - notificationConfigurationOverrides?: ConfigurationOverride[]; - /** - * The id of the process in which the invocation occurred. - */ - processId?: number; - /** - * The reason given by the operating system that the process failed to start. - */ - processStartFailureMessage?: string; - /** - * Key/value pairs that provide additional information about the invocation. - */ - properties?: PropertyBag; - /** - * The locations of any response files specified on the tool's command line. - */ - responseFiles?: ArtifactLocation[]; - /** - * An array of configurationOverride objects that describe rules related runtime overrides. - */ - ruleConfigurationOverrides?: ConfigurationOverride[]; - /** - * The Coordinated Universal Time (UTC) date and time at which the invocation started. See - * "Date/time properties" in the SARIF spec for the required format. - */ - startTimeUtc?: Date; - /** - * A file containing the standard error stream from the process that was invoked. - */ - stderr?: ArtifactLocation; - /** - * A file containing the standard input stream to the process that was invoked. - */ - stdin?: ArtifactLocation; - /** - * A file containing the standard output stream from the process that was invoked. - */ - stdout?: ArtifactLocation; - /** - * A file containing the interleaved standard output and standard error stream from the - * process that was invoked. - */ - stdoutStderr?: ArtifactLocation; - /** - * A list of conditions detected by the tool that are relevant to the tool's configuration. - */ - toolConfigurationNotifications?: Notification[]; - /** - * A list of runtime conditions detected by the tool during the analysis. - */ - toolExecutionNotifications?: Notification[]; - /** - * The working directory for the invocation. - */ - workingDirectory?: ArtifactLocation; -} - -/** - * Information about how a specific rule or notification was reconfigured at runtime. - */ -export interface ConfigurationOverride { - /** - * Specifies how the rule or notification was configured during the scan. - */ - configuration: ReportingConfiguration; - /** - * A reference used to locate the descriptor whose configuration was overridden. - */ - descriptor: ReportingDescriptorReference; - /** - * Key/value pairs that provide additional information about the configuration override. - */ - properties?: PropertyBag; -} - -/** - * Specifies how the rule or notification was configured during the scan. - * - * Information about a rule or notification that can be configured at runtime. - * - * Default reporting configuration information. - */ -export interface ReportingConfiguration { - /** - * Specifies whether the report may be produced during the scan. - */ - enabled?: boolean; - /** - * Specifies the failure level for the report. - */ - level?: Level; - /** - * Contains configuration information specific to a report. - */ - parameters?: PropertyBag; - /** - * Key/value pairs that provide additional information about the reporting configuration. - */ - properties?: PropertyBag; - /** - * Specifies the relative priority of the report. Used for analysis output only. - */ - rank?: number; -} - -/** - * Specifies the failure level for the report. - * - * A value specifying the severity level of the notification. - * - * A value specifying the severity level of the result. - */ -export enum Level { - Error = "error", - None = "none", - Note = "note", - Warning = "warning", -} - -/** - * A reference used to locate the descriptor whose configuration was overridden. - * - * A reference used to locate the rule descriptor associated with this notification. - * - * A reference used to locate the descriptor relevant to this notification. - * - * A reference to the related reporting descriptor. - * - * A reference used to locate the rule descriptor relevant to this result. - * - * Information about how to locate a relevant reporting descriptor. - */ -export interface ReportingDescriptorReference { - /** - * A guid that uniquely identifies the descriptor. - */ - guid?: string; - /** - * The id of the descriptor. - */ - id?: string; - /** - * The index into an array of descriptors in toolComponent.ruleDescriptors, - * toolComponent.notificationDescriptors, or toolComponent.taxonomyDescriptors, depending on - * context. - */ - index?: number; - /** - * Key/value pairs that provide additional information about the reporting descriptor - * reference. - */ - properties?: PropertyBag; - /** - * A reference used to locate the toolComponent associated with the descriptor. - */ - toolComponent?: ToolComponentReference; -} - -/** - * A reference used to locate the toolComponent associated with the descriptor. - * - * Identifies a particular toolComponent object, either the driver or an extension. - * - * The component which is strongly associated with this component. For a translation, this - * refers to the component which has been translated. For an extension, this is the driver - * that provides the extension's plugin model. - */ -export interface ToolComponentReference { - /** - * The 'guid' property of the referenced toolComponent. - */ - guid?: string; - /** - * An index into the referenced toolComponent in tool.extensions. - */ - index?: number; - /** - * The 'name' property of the referenced toolComponent. - */ - name?: string; - /** - * Key/value pairs that provide additional information about the toolComponentReference. - */ - properties?: PropertyBag; -} - -/** - * Describes a condition relevant to the tool itself, as opposed to being relevant to a - * target being analyzed by the tool. - */ -export interface Notification { - /** - * A reference used to locate the rule descriptor associated with this notification. - */ - associatedRule?: ReportingDescriptorReference; - /** - * A reference used to locate the descriptor relevant to this notification. - */ - descriptor?: ReportingDescriptorReference; - /** - * The runtime exception, if any, relevant to this notification. - */ - exception?: Exception; - /** - * A value specifying the severity level of the notification. - */ - level?: Level; - /** - * The locations relevant to this notification. - */ - locations?: Location[]; - /** - * A message that describes the condition that was encountered. - */ - message: Message; - /** - * Key/value pairs that provide additional information about the notification. - */ - properties?: PropertyBag; - /** - * The thread identifier of the code that generated the notification. - */ - threadId?: number; - /** - * The Coordinated Universal Time (UTC) date and time at which the analysis tool generated - * the notification. - */ - timeUtc?: Date; -} - -/** - * The runtime exception, if any, relevant to this notification. - * - * Describes a runtime exception encountered during the execution of an analysis tool. - */ -export interface Exception { - /** - * An array of exception objects each of which is considered a cause of this exception. - */ - innerExceptions?: Exception[]; - /** - * A string that identifies the kind of exception, for example, the fully qualified type - * name of an object that was thrown, or the symbolic name of a signal. - */ - kind?: string; - /** - * A message that describes the exception. - */ - message?: string; - /** - * Key/value pairs that provide additional information about the exception. - */ - properties?: PropertyBag; - /** - * The sequence of function calls leading to the exception. - */ - stack?: Stack; -} - -/** - * The sequence of function calls leading to the exception. - * - * A call stack that is relevant to a result. - * - * The call stack leading to this location. - */ -export interface Stack { - /** - * An array of stack frames that represents a sequence of calls, rendered in reverse - * chronological order, that comprise the call stack. - */ - frames: StackFrame[]; - /** - * A message relevant to this call stack. - */ - message?: Message; - /** - * Key/value pairs that provide additional information about the stack. - */ - properties?: PropertyBag; -} - -/** - * A function call within a stack trace. - */ -export interface StackFrame { - /** - * The location to which this stack frame refers. - */ - location?: Location; - /** - * The name of the module that contains the code of this stack frame. - */ - module?: string; - /** - * The parameters of the call that is executing. - */ - parameters?: string[]; - /** - * Key/value pairs that provide additional information about the stack frame. - */ - properties?: PropertyBag; - /** - * The thread identifier of the stack frame. - */ - threadId?: number; -} - -/** - * The location to which this stack frame refers. - * - * A location within a programming artifact. - * - * A code location associated with the node. - * - * The code location. - * - * Identifies the location associated with the suppression. - */ -export interface Location { - /** - * A set of regions relevant to the location. - */ - annotations?: Region[]; - /** - * Value that distinguishes this location from all other locations within a single result - * object. - */ - id?: number; - /** - * The logical locations associated with the result. - */ - logicalLocations?: LogicalLocation[]; - /** - * A message relevant to the location. - */ - message?: Message; - /** - * Identifies the artifact and region. - */ - physicalLocation?: PhysicalLocation; - /** - * Key/value pairs that provide additional information about the location. - */ - properties?: PropertyBag; - /** - * An array of objects that describe relationships between this location and others. - */ - relationships?: LocationRelationship[]; -} - -/** - * A region within an artifact where a result was detected. - * - * Specifies a portion of the artifact that encloses the region. Allows a viewer to display - * additional context around the region. - * - * Specifies a portion of the artifact. - * - * The region of the artifact to delete. - */ -export interface Region { - /** - * The length of the region in bytes. - */ - byteLength?: number; - /** - * The zero-based offset from the beginning of the artifact of the first byte in the region. - */ - byteOffset?: number; - /** - * The length of the region in characters. - */ - charLength?: number; - /** - * The zero-based offset from the beginning of the artifact of the first character in the - * region. - */ - charOffset?: number; - /** - * The column number of the character following the end of the region. - */ - endColumn?: number; - /** - * The line number of the last character in the region. - */ - endLine?: number; - /** - * A message relevant to the region. - */ - message?: Message; - /** - * Key/value pairs that provide additional information about the region. - */ - properties?: PropertyBag; - /** - * The portion of the artifact contents within the specified region. - */ - snippet?: ArtifactContent; - /** - * Specifies the source language, if any, of the portion of the artifact specified by the - * region object. - */ - sourceLanguage?: string; - /** - * The column number of the first character in the region. - */ - startColumn?: number; - /** - * The line number of the first character in the region. - */ - startLine?: number; -} - -/** - * A logical location of a construct that produced a result. - */ -export interface LogicalLocation { - /** - * The machine-readable name for the logical location, such as a mangled function name - * provided by a C++ compiler that encodes calling convention, return type and other details - * along with the function name. - */ - decoratedName?: string; - /** - * The human-readable fully qualified name of the logical location. - */ - fullyQualifiedName?: string; - /** - * The index within the logical locations array. - */ - index?: number; - /** - * The type of construct this logical location component refers to. Should be one of - * 'function', 'member', 'module', 'namespace', 'parameter', 'resource', 'returnType', - * 'type', 'variable', 'object', 'array', 'property', 'value', 'element', 'text', - * 'attribute', 'comment', 'declaration', 'dtd' or 'processingInstruction', if any of those - * accurately describe the construct. - */ - kind?: string; - /** - * Identifies the construct in which the result occurred. For example, this property might - * contain the name of a class or a method. - */ - name?: string; - /** - * Identifies the index of the immediate parent of the construct in which the result was - * detected. For example, this property might point to a logical location that represents - * the namespace that holds a type. - */ - parentIndex?: number; - /** - * Key/value pairs that provide additional information about the logical location. - */ - properties?: PropertyBag; -} - -/** - * Identifies the artifact and region. - * - * A physical location relevant to a result. Specifies a reference to a programming artifact - * together with a range of bytes or characters within that artifact. - */ -export interface PhysicalLocation { - /** - * The address of the location. - */ - address?: Address; - /** - * The location of the artifact. - */ - artifactLocation?: ArtifactLocation; - /** - * Specifies a portion of the artifact that encloses the region. Allows a viewer to display - * additional context around the region. - */ - contextRegion?: Region; - /** - * Key/value pairs that provide additional information about the physical location. - */ - properties?: PropertyBag; - /** - * Specifies a portion of the artifact. - */ - region?: Region; -} - -/** - * Information about the relation of one location to another. - */ -export interface LocationRelationship { - /** - * A description of the location relationship. - */ - description?: Message; - /** - * A set of distinct strings that categorize the relationship. Well-known kinds include - * 'includes', 'isIncludedBy' and 'relevant'. - */ - kinds?: string[]; - /** - * Key/value pairs that provide additional information about the location relationship. - */ - properties?: PropertyBag; - /** - * A reference to the related location. - */ - target: number; -} - -/** - * A tool object that describes the converter. - * - * The analysis tool that was run. - * - * Information about the tool or tool pipeline that generated the results in this run. A run - * can only contain results produced by a single tool or tool pipeline. A run can aggregate - * results from multiple log files, as long as context around the tool run (tool - * command-line arguments and the like) is identical for all aggregated files. - */ -export interface Tool { - /** - * The analysis tool that was run. - */ - driver: ToolComponent; - /** - * Tool extensions that contributed to or reconfigured the analysis tool that was run. - */ - extensions?: ToolComponent[]; - /** - * Key/value pairs that provide additional information about the tool. - */ - properties?: PropertyBag; -} - -/** - * The analysis tool that was run. - * - * A component, such as a plug-in or the driver, of the analysis tool that was run. - * - * The analysis tool object that will be merged with a separate run. - */ -export interface ToolComponent { - /** - * The component which is strongly associated with this component. For a translation, this - * refers to the component which has been translated. For an extension, this is the driver - * that provides the extension's plugin model. - */ - associatedComponent?: ToolComponentReference; - /** - * The kinds of data contained in this object. - */ - contents?: Content[]; - /** - * The binary version of the tool component's primary executable file expressed as four - * non-negative integers separated by a period (for operating systems that express file - * versions in this way). - */ - dottedQuadFileVersion?: string; - /** - * The absolute URI from which the tool component can be downloaded. - */ - downloadUri?: string; - /** - * A comprehensive description of the tool component. - */ - fullDescription?: MultiformatMessageString; - /** - * The name of the tool component along with its version and any other useful identifying - * information, such as its locale. - */ - fullName?: string; - /** - * A dictionary, each of whose keys is a resource identifier and each of whose values is a - * multiformatMessageString object, which holds message strings in plain text and - * (optionally) Markdown format. The strings can include placeholders, which can be used to - * construct a message in combination with an arbitrary number of additional string - * arguments. - */ - globalMessageStrings?: { [key: string]: MultiformatMessageString }; - /** - * A unique identifier for the tool component in the form of a GUID. - */ - guid?: string; - /** - * The absolute URI at which information about this version of the tool component can be - * found. - */ - informationUri?: string; - /** - * Specifies whether this object contains a complete definition of the localizable and/or - * non-localizable data for this component, as opposed to including only data that is - * relevant to the results persisted to this log file. - */ - isComprehensive?: boolean; - /** - * The language of the messages emitted into the log file during this run (expressed as an - * ISO 639-1 two-letter lowercase language code) and an optional region (expressed as an ISO - * 3166-1 two-letter uppercase subculture code associated with a country or region). The - * casing is recommended but not required (in order for this data to conform to RFC5646). - */ - language?: string; - /** - * The semantic version of the localized strings defined in this component; maintained by - * components that provide translations. - */ - localizedDataSemanticVersion?: string; - /** - * An array of the artifactLocation objects associated with the tool component. - */ - locations?: ArtifactLocation[]; - /** - * The minimum value of localizedDataSemanticVersion required in translations consumed by - * this component; used by components that consume translations. - */ - minimumRequiredLocalizedDataSemanticVersion?: string; - /** - * The name of the tool component. - */ - name: string; - /** - * An array of reportingDescriptor objects relevant to the notifications related to the - * configuration and runtime execution of the tool component. - */ - notifications?: ReportingDescriptor[]; - /** - * The organization or company that produced the tool component. - */ - organization?: string; - /** - * A product suite to which the tool component belongs. - */ - product?: string; - /** - * A localizable string containing the name of the suite of products to which the tool - * component belongs. - */ - productSuite?: string; - /** - * Key/value pairs that provide additional information about the tool component. - */ - properties?: PropertyBag; - /** - * A string specifying the UTC date (and optionally, the time) of the component's release. - */ - releaseDateUtc?: string; - /** - * An array of reportingDescriptor objects relevant to the analysis performed by the tool - * component. - */ - rules?: ReportingDescriptor[]; - /** - * The tool component version in the format specified by Semantic Versioning 2.0. - */ - semanticVersion?: string; - /** - * A brief description of the tool component. - */ - shortDescription?: MultiformatMessageString; - /** - * An array of toolComponentReference objects to declare the taxonomies supported by the - * tool component. - */ - supportedTaxonomies?: ToolComponentReference[]; - /** - * An array of reportingDescriptor objects relevant to the definitions of both standalone - * and tool-defined taxonomies. - */ - taxa?: ReportingDescriptor[]; - /** - * Translation metadata, required for a translation, not populated by other component types. - */ - translationMetadata?: TranslationMetadata; - /** - * The tool component version, in whatever format the component natively provides. - */ - version?: string; -} - -export enum Content { - LocalizedData = "localizedData", - NonLocalizedData = "nonLocalizedData", -} - -/** - * Metadata that describes a specific report produced by the tool, as part of the analysis - * it provides or its runtime reporting. - */ -export interface ReportingDescriptor { - /** - * Default reporting configuration information. - */ - defaultConfiguration?: ReportingConfiguration; - /** - * An array of unique identifies in the form of a GUID by which this report was known in - * some previous version of the analysis tool. - */ - deprecatedGuids?: string[]; - /** - * An array of stable, opaque identifiers by which this report was known in some previous - * version of the analysis tool. - */ - deprecatedIds?: string[]; - /** - * An array of readable identifiers by which this report was known in some previous version - * of the analysis tool. - */ - deprecatedNames?: string[]; - /** - * A description of the report. Should, as far as possible, provide details sufficient to - * enable resolution of any problem indicated by the result. - */ - fullDescription?: MultiformatMessageString; - /** - * A unique identifier for the reporting descriptor in the form of a GUID. - */ - guid?: string; - /** - * Provides the primary documentation for the report, useful when there is no online - * documentation. - */ - help?: MultiformatMessageString; - /** - * A URI where the primary documentation for the report can be found. - */ - helpUri?: string; - /** - * A stable, opaque identifier for the report. - */ - id: string; - /** - * A set of name/value pairs with arbitrary names. Each value is a multiformatMessageString - * object, which holds message strings in plain text and (optionally) Markdown format. The - * strings can include placeholders, which can be used to construct a message in combination - * with an arbitrary number of additional string arguments. - */ - messageStrings?: { [key: string]: MultiformatMessageString }; - /** - * A report identifier that is understandable to an end user. - */ - name?: string; - /** - * Key/value pairs that provide additional information about the report. - */ - properties?: PropertyBag; - /** - * An array of objects that describe relationships between this reporting descriptor and - * others. - */ - relationships?: ReportingDescriptorRelationship[]; - /** - * A concise description of the report. Should be a single sentence that is understandable - * when visible space is limited to a single line of text. - */ - shortDescription?: MultiformatMessageString; -} - -/** - * Information about the relation of one reporting descriptor to another. - */ -export interface ReportingDescriptorRelationship { - /** - * A description of the reporting descriptor relationship. - */ - description?: Message; - /** - * A set of distinct strings that categorize the relationship. Well-known kinds include - * 'canPrecede', 'canFollow', 'willPrecede', 'willFollow', 'superset', 'subset', 'equal', - * 'disjoint', 'relevant', and 'incomparable'. - */ - kinds?: string[]; - /** - * Key/value pairs that provide additional information about the reporting descriptor - * reference. - */ - properties?: PropertyBag; - /** - * A reference to the related reporting descriptor. - */ - target: ReportingDescriptorReference; -} - -/** - * Translation metadata, required for a translation, not populated by other component - * types. - * - * Provides additional metadata related to translation. - */ -export interface TranslationMetadata { - /** - * The absolute URI from which the translation metadata can be downloaded. - */ - downloadUri?: string; - /** - * A comprehensive description of the translation metadata. - */ - fullDescription?: MultiformatMessageString; - /** - * The full name associated with the translation metadata. - */ - fullName?: string; - /** - * The absolute URI from which information related to the translation metadata can be - * downloaded. - */ - informationUri?: string; - /** - * The name associated with the translation metadata. - */ - name: string; - /** - * Key/value pairs that provide additional information about the translation metadata. - */ - properties?: PropertyBag; - /** - * A brief description of the translation metadata. - */ - shortDescription?: MultiformatMessageString; -} - -/** - * A network of nodes and directed edges that describes some aspect of the structure of the - * code (for example, a call graph). - */ -export interface Graph { - /** - * A description of the graph. - */ - description?: Message; - /** - * An array of edge objects representing the edges of the graph. - */ - edges?: Edge[]; - /** - * An array of node objects representing the nodes of the graph. - */ - nodes?: Node[]; - /** - * Key/value pairs that provide additional information about the graph. - */ - properties?: PropertyBag; -} - -/** - * Represents a directed edge in a graph. - */ -export interface Edge { - /** - * A string that uniquely identifies the edge within its graph. - */ - id: string; - /** - * A short description of the edge. - */ - label?: Message; - /** - * Key/value pairs that provide additional information about the edge. - */ - properties?: PropertyBag; - /** - * Identifies the source node (the node at which the edge starts). - */ - sourceNodeId: string; - /** - * Identifies the target node (the node at which the edge ends). - */ - targetNodeId: string; -} - -/** - * Represents a node in a graph. - */ -export interface Node { - /** - * Array of child nodes. - */ - children?: Node[]; - /** - * A string that uniquely identifies the node within its graph. - */ - id: string; - /** - * A short description of the node. - */ - label?: Message; - /** - * A code location associated with the node. - */ - location?: Location; - /** - * Key/value pairs that provide additional information about the node. - */ - properties?: PropertyBag; -} - -/** - * A result produced by an analysis tool. - */ -export interface Result { - /** - * Identifies the artifact that the analysis tool was instructed to scan. This need not be - * the same as the artifact where the result actually occurred. - */ - analysisTarget?: ArtifactLocation; - /** - * A set of artifacts relevant to the result. - */ - attachments?: Attachment[]; - /** - * The state of a result relative to a baseline of a previous run. - */ - baselineState?: BaselineState; - /** - * An array of 'codeFlow' objects relevant to the result. - */ - codeFlows?: CodeFlow[]; - /** - * A stable, unique identifier for the equivalence class of logically identical results to - * which this result belongs, in the form of a GUID. - */ - correlationGuid?: string; - /** - * A set of strings each of which individually defines a stable, unique identity for the - * result. - */ - fingerprints?: { [key: string]: string }; - /** - * An array of 'fix' objects, each of which represents a proposed fix to the problem - * indicated by the result. - */ - fixes?: Fix[]; - /** - * An array of zero or more unique graph objects associated with the result. - */ - graphs?: Graph[]; - /** - * An array of one or more unique 'graphTraversal' objects. - */ - graphTraversals?: GraphTraversal[]; - /** - * A stable, unique identifier for the result in the form of a GUID. - */ - guid?: string; - /** - * An absolute URI at which the result can be viewed. - */ - hostedViewerUri?: string; - /** - * A value that categorizes results by evaluation state. - */ - kind?: ResultKind; - /** - * A value specifying the severity level of the result. - */ - level?: Level; - /** - * The set of locations where the result was detected. Specify only one location unless the - * problem indicated by the result can only be corrected by making a change at every - * specified location. - */ - locations?: Location[]; - /** - * A message that describes the result. The first sentence of the message only will be - * displayed when visible space is limited. - */ - message: Message; - /** - * A positive integer specifying the number of times this logically unique result was - * observed in this run. - */ - occurrenceCount?: number; - /** - * A set of strings that contribute to the stable, unique identity of the result. - */ - partialFingerprints?: { [key: string]: string }; - /** - * Key/value pairs that provide additional information about the result. - */ - properties?: PropertyBag; - /** - * Information about how and when the result was detected. - */ - provenance?: ResultProvenance; - /** - * A number representing the priority or importance of the result. - */ - rank?: number; - /** - * A set of locations relevant to this result. - */ - relatedLocations?: Location[]; - /** - * A reference used to locate the rule descriptor relevant to this result. - */ - rule?: ReportingDescriptorReference; - /** - * The stable, unique identifier of the rule, if any, to which this result is relevant. - */ - ruleId?: string; - /** - * The index within the tool component rules array of the rule object associated with this - * result. - */ - ruleIndex?: number; - /** - * An array of 'stack' objects relevant to the result. - */ - stacks?: Stack[]; - /** - * A set of suppressions relevant to this result. - */ - suppressions?: Suppression[]; - /** - * An array of references to taxonomy reporting descriptors that are applicable to the - * result. - */ - taxa?: ReportingDescriptorReference[]; - /** - * A web request associated with this result. - */ - webRequest?: WebRequest; - /** - * A web response associated with this result. - */ - webResponse?: WebResponse; - /** - * The URIs of the work items associated with this result. - */ - workItemUris?: string[]; -} - -/** - * An artifact relevant to a result. - */ -export interface Attachment { - /** - * The location of the attachment. - */ - artifactLocation: ArtifactLocation; - /** - * A message describing the role played by the attachment. - */ - description?: Message; - /** - * Key/value pairs that provide additional information about the attachment. - */ - properties?: PropertyBag; - /** - * An array of rectangles specifying areas of interest within the image. - */ - rectangles?: Rectangle[]; - /** - * An array of regions of interest within the attachment. - */ - regions?: Region[]; -} - -/** - * An area within an image. - */ -export interface Rectangle { - /** - * The Y coordinate of the bottom edge of the rectangle, measured in the image's natural - * units. - */ - bottom?: number; - /** - * The X coordinate of the left edge of the rectangle, measured in the image's natural units. - */ - left?: number; - /** - * A message relevant to the rectangle. - */ - message?: Message; - /** - * Key/value pairs that provide additional information about the rectangle. - */ - properties?: PropertyBag; - /** - * The X coordinate of the right edge of the rectangle, measured in the image's natural - * units. - */ - right?: number; - /** - * The Y coordinate of the top edge of the rectangle, measured in the image's natural units. - */ - top?: number; -} - -/** - * The state of a result relative to a baseline of a previous run. - */ -export enum BaselineState { - Absent = "absent", - New = "new", - Unchanged = "unchanged", - Updated = "updated", -} - -/** - * A set of threadFlows which together describe a pattern of code execution relevant to - * detecting a result. - */ -export interface CodeFlow { - /** - * A message relevant to the code flow. - */ - message?: Message; - /** - * Key/value pairs that provide additional information about the code flow. - */ - properties?: PropertyBag; - /** - * An array of one or more unique threadFlow objects, each of which describes the progress - * of a program through a thread of execution. - */ - threadFlows: ThreadFlow[]; -} - -/** - * Describes a sequence of code locations that specify a path through a single thread of - * execution such as an operating system or fiber. - */ -export interface ThreadFlow { - /** - * An string that uniquely identifies the threadFlow within the codeFlow in which it occurs. - */ - id?: string; - /** - * Values of relevant expressions at the start of the thread flow that remain constant. - */ - immutableState?: { [key: string]: MultiformatMessageString }; - /** - * Values of relevant expressions at the start of the thread flow that may change during - * thread flow execution. - */ - initialState?: { [key: string]: MultiformatMessageString }; - /** - * A temporally ordered array of 'threadFlowLocation' objects, each of which describes a - * location visited by the tool while producing the result. - */ - locations: ThreadFlowLocation[]; - /** - * A message relevant to the thread flow. - */ - message?: Message; - /** - * Key/value pairs that provide additional information about the thread flow. - */ - properties?: PropertyBag; -} - -/** - * A location visited by an analysis tool while simulating or monitoring the execution of a - * program. - */ -export interface ThreadFlowLocation { - /** - * An integer representing the temporal order in which execution reached this location. - */ - executionOrder?: number; - /** - * The Coordinated Universal Time (UTC) date and time at which this location was executed. - */ - executionTimeUtc?: Date; - /** - * Specifies the importance of this location in understanding the code flow in which it - * occurs. The order from most to least important is "essential", "important", - * "unimportant". Default: "important". - */ - importance?: Importance; - /** - * The index within the run threadFlowLocations array. - */ - index?: number; - /** - * A set of distinct strings that categorize the thread flow location. Well-known kinds - * include 'acquire', 'release', 'enter', 'exit', 'call', 'return', 'branch', 'implicit', - * 'false', 'true', 'caution', 'danger', 'unknown', 'unreachable', 'taint', 'function', - * 'handler', 'lock', 'memory', 'resource', 'scope' and 'value'. - */ - kinds?: string[]; - /** - * The code location. - */ - location?: Location; - /** - * The name of the module that contains the code that is executing. - */ - module?: string; - /** - * An integer representing a containment hierarchy within the thread flow. - */ - nestingLevel?: number; - /** - * Key/value pairs that provide additional information about the threadflow location. - */ - properties?: PropertyBag; - /** - * The call stack leading to this location. - */ - stack?: Stack; - /** - * A dictionary, each of whose keys specifies a variable or expression, the associated value - * of which represents the variable or expression value. For an annotation of kind - * 'continuation', for example, this dictionary might hold the current assumed values of a - * set of global variables. - */ - state?: { [key: string]: MultiformatMessageString }; - /** - * An array of references to rule or taxonomy reporting descriptors that are applicable to - * the thread flow location. - */ - taxa?: ReportingDescriptorReference[]; - /** - * A web request associated with this thread flow location. - */ - webRequest?: WebRequest; - /** - * A web response associated with this thread flow location. - */ - webResponse?: WebResponse; -} - -/** - * Specifies the importance of this location in understanding the code flow in which it - * occurs. The order from most to least important is "essential", "important", - * "unimportant". Default: "important". - */ -export enum Importance { - Essential = "essential", - Important = "important", - Unimportant = "unimportant", -} - -/** - * A web request associated with this thread flow location. - * - * Describes an HTTP request. - * - * A web request associated with this result. - */ -export interface WebRequest { - /** - * The body of the request. - */ - body?: ArtifactContent; - /** - * The request headers. - */ - headers?: { [key: string]: string }; - /** - * The index within the run.webRequests array of the request object associated with this - * result. - */ - index?: number; - /** - * The HTTP method. Well-known values are 'GET', 'PUT', 'POST', 'DELETE', 'PATCH', 'HEAD', - * 'OPTIONS', 'TRACE', 'CONNECT'. - */ - method?: string; - /** - * The request parameters. - */ - parameters?: { [key: string]: string }; - /** - * Key/value pairs that provide additional information about the request. - */ - properties?: PropertyBag; - /** - * The request protocol. Example: 'http'. - */ - protocol?: string; - /** - * The target of the request. - */ - target?: string; - /** - * The request version. Example: '1.1'. - */ - version?: string; -} - -/** - * A web response associated with this thread flow location. - * - * Describes the response to an HTTP request. - * - * A web response associated with this result. - */ -export interface WebResponse { - /** - * The body of the response. - */ - body?: ArtifactContent; - /** - * The response headers. - */ - headers?: { [key: string]: string }; - /** - * The index within the run.webResponses array of the response object associated with this - * result. - */ - index?: number; - /** - * Specifies whether a response was received from the server. - */ - noResponseReceived?: boolean; - /** - * Key/value pairs that provide additional information about the response. - */ - properties?: PropertyBag; - /** - * The response protocol. Example: 'http'. - */ - protocol?: string; - /** - * The response reason. Example: 'Not found'. - */ - reasonPhrase?: string; - /** - * The response status code. Example: 451. - */ - statusCode?: number; - /** - * The response version. Example: '1.1'. - */ - version?: string; -} - -/** - * A proposed fix for the problem represented by a result object. A fix specifies a set of - * artifacts to modify. For each artifact, it specifies a set of bytes to remove, and - * provides a set of new bytes to replace them. - */ -export interface Fix { - /** - * One or more artifact changes that comprise a fix for a result. - */ - artifactChanges: ArtifactChange[]; - /** - * A message that describes the proposed fix, enabling viewers to present the proposed - * change to an end user. - */ - description?: Message; - /** - * Key/value pairs that provide additional information about the fix. - */ - properties?: PropertyBag; -} - -/** - * A change to a single artifact. - */ -export interface ArtifactChange { - /** - * The location of the artifact to change. - */ - artifactLocation: ArtifactLocation; - /** - * Key/value pairs that provide additional information about the change. - */ - properties?: PropertyBag; - /** - * An array of replacement objects, each of which represents the replacement of a single - * region in a single artifact specified by 'artifactLocation'. - */ - replacements: Replacement[]; -} - -/** - * The replacement of a single region of an artifact. - */ -export interface Replacement { - /** - * The region of the artifact to delete. - */ - deletedRegion: Region; - /** - * The content to insert at the location specified by the 'deletedRegion' property. - */ - insertedContent?: ArtifactContent; - /** - * Key/value pairs that provide additional information about the replacement. - */ - properties?: PropertyBag; -} - -/** - * Represents a path through a graph. - */ -export interface GraphTraversal { - /** - * A description of this graph traversal. - */ - description?: Message; - /** - * The sequences of edges traversed by this graph traversal. - */ - edgeTraversals?: EdgeTraversal[]; - /** - * Values of relevant expressions at the start of the graph traversal that remain constant - * for the graph traversal. - */ - immutableState?: { [key: string]: MultiformatMessageString }; - /** - * Values of relevant expressions at the start of the graph traversal that may change during - * graph traversal. - */ - initialState?: { [key: string]: MultiformatMessageString }; - /** - * Key/value pairs that provide additional information about the graph traversal. - */ - properties?: PropertyBag; - /** - * The index within the result.graphs to be associated with the result. - */ - resultGraphIndex?: number; - /** - * The index within the run.graphs to be associated with the result. - */ - runGraphIndex?: number; -} - -/** - * Represents the traversal of a single edge during a graph traversal. - */ -export interface EdgeTraversal { - /** - * Identifies the edge being traversed. - */ - edgeId: string; - /** - * The values of relevant expressions after the edge has been traversed. - */ - finalState?: { [key: string]: MultiformatMessageString }; - /** - * A message to display to the user as the edge is traversed. - */ - message?: Message; - /** - * Key/value pairs that provide additional information about the edge traversal. - */ - properties?: PropertyBag; - /** - * The number of edge traversals necessary to return from a nested graph. - */ - stepOverEdgeCount?: number; -} - -/** - * A value that categorizes results by evaluation state. - */ -export enum ResultKind { - Fail = "fail", - Informational = "informational", - NotApplicable = "notApplicable", - Open = "open", - Pass = "pass", - Review = "review", -} - -/** - * Information about how and when the result was detected. - * - * Contains information about how and when a result was detected. - */ -export interface ResultProvenance { - /** - * An array of physicalLocation objects which specify the portions of an analysis tool's - * output that a converter transformed into the result. - */ - conversionSources?: PhysicalLocation[]; - /** - * A GUID-valued string equal to the automationDetails.guid property of the run in which the - * result was first detected. - */ - firstDetectionRunGuid?: string; - /** - * The Coordinated Universal Time (UTC) date and time at which the result was first - * detected. See "Date/time properties" in the SARIF spec for the required format. - */ - firstDetectionTimeUtc?: Date; - /** - * The index within the run.invocations array of the invocation object which describes the - * tool invocation that detected the result. - */ - invocationIndex?: number; - /** - * A GUID-valued string equal to the automationDetails.guid property of the run in which the - * result was most recently detected. - */ - lastDetectionRunGuid?: string; - /** - * The Coordinated Universal Time (UTC) date and time at which the result was most recently - * detected. See "Date/time properties" in the SARIF spec for the required format. - */ - lastDetectionTimeUtc?: Date; - /** - * Key/value pairs that provide additional information about the result. - */ - properties?: PropertyBag; -} - -/** - * A suppression that is relevant to a result. - */ -export interface Suppression { - /** - * A stable, unique identifier for the suppression in the form of a GUID. - */ - guid?: string; - /** - * A string representing the justification for the suppression. - */ - justification?: string; - /** - * A string that indicates where the suppression is persisted. - */ - kind: SuppressionKind; - /** - * Identifies the location associated with the suppression. - */ - location?: Location; - /** - * Key/value pairs that provide additional information about the suppression. - */ - properties?: PropertyBag; - /** - * A string that indicates the review status of the suppression. - */ - status?: Status; -} - -/** - * A string that indicates where the suppression is persisted. - */ -export enum SuppressionKind { - External = "external", - InSource = "inSource", -} - -/** - * A string that indicates the review status of the suppression. - */ -export enum Status { - Accepted = "accepted", - Rejected = "rejected", - UnderReview = "underReview", -} - -/** - * The SARIF format version of this external properties object. - * - * The SARIF format version of this log file. - */ -export enum Version { - The210 = "2.1.0", -} - -/** - * Describes a single run of an analysis tool, and contains the reported output of that run. - */ -export interface Run { - /** - * Addresses associated with this run instance, if any. - */ - addresses?: Address[]; - /** - * An array of artifact objects relevant to the run. - */ - artifacts?: Artifact[]; - /** - * Automation details that describe this run. - */ - automationDetails?: RunAutomationDetails; - /** - * The 'guid' property of a previous SARIF 'run' that comprises the baseline that was used - * to compute result 'baselineState' properties for the run. - */ - baselineGuid?: string; - /** - * Specifies the unit in which the tool measures columns. - */ - columnKind?: ColumnKind; - /** - * A conversion object that describes how a converter transformed an analysis tool's native - * reporting format into the SARIF format. - */ - conversion?: Conversion; - /** - * Specifies the default encoding for any artifact object that refers to a text file. - */ - defaultEncoding?: string; - /** - * Specifies the default source language for any artifact object that refers to a text file - * that contains source code. - */ - defaultSourceLanguage?: string; - /** - * References to external property files that should be inlined with the content of a root - * log file. - */ - externalPropertyFileReferences?: ExternalPropertyFileReferences; - /** - * An array of zero or more unique graph objects associated with the run. - */ - graphs?: Graph[]; - /** - * Describes the invocation of the analysis tool. - */ - invocations?: Invocation[]; - /** - * The language of the messages emitted into the log file during this run (expressed as an - * ISO 639-1 two-letter lowercase culture code) and an optional region (expressed as an ISO - * 3166-1 two-letter uppercase subculture code associated with a country or region). The - * casing is recommended but not required (in order for this data to conform to RFC5646). - */ - language?: string; - /** - * An array of logical locations such as namespaces, types or functions. - */ - logicalLocations?: LogicalLocation[]; - /** - * An ordered list of character sequences that were treated as line breaks when computing - * region information for the run. - */ - newlineSequences?: string[]; - /** - * The artifact location specified by each uriBaseId symbol on the machine where the tool - * originally ran. - */ - originalUriBaseIds?: { [key: string]: ArtifactLocation }; - /** - * Contains configurations that may potentially override both - * reportingDescriptor.defaultConfiguration (the tool's default severities) and - * invocation.configurationOverrides (severities established at run-time from the command - * line). - */ - policies?: ToolComponent[]; - /** - * Key/value pairs that provide additional information about the run. - */ - properties?: PropertyBag; - /** - * An array of strings used to replace sensitive information in a redaction-aware property. - */ - redactionTokens?: string[]; - /** - * The set of results contained in an SARIF log. The results array can be omitted when a run - * is solely exporting rules metadata. It must be present (but may be empty) if a log file - * represents an actual scan. - */ - results?: Result[]; - /** - * Automation details that describe the aggregate of runs to which this run belongs. - */ - runAggregates?: RunAutomationDetails[]; - /** - * A specialLocations object that defines locations of special significance to SARIF - * consumers. - */ - specialLocations?: SpecialLocations; - /** - * An array of toolComponent objects relevant to a taxonomy in which results are categorized. - */ - taxonomies?: ToolComponent[]; - /** - * An array of threadFlowLocation objects cached at run level. - */ - threadFlowLocations?: ThreadFlowLocation[]; - /** - * Information about the tool or tool pipeline that generated the results in this run. A run - * can only contain results produced by a single tool or tool pipeline. A run can aggregate - * results from multiple log files, as long as context around the tool run (tool - * command-line arguments and the like) is identical for all aggregated files. - */ - tool: Tool; - /** - * The set of available translations of the localized data provided by the tool. - */ - translations?: ToolComponent[]; - /** - * Specifies the revision in version control of the artifacts that were scanned. - */ - versionControlProvenance?: VersionControlDetails[]; - /** - * An array of request objects cached at run level. - */ - webRequests?: WebRequest[]; - /** - * An array of response objects cached at run level. - */ - webResponses?: WebResponse[]; -} - -/** - * Automation details that describe this run. - * - * Information that describes a run's identity and role within an engineering system process. - */ -export interface RunAutomationDetails { - /** - * A stable, unique identifier for the equivalence class of runs to which this object's - * containing run object belongs in the form of a GUID. - */ - correlationGuid?: string; - /** - * A description of the identity and role played within the engineering system by this - * object's containing run object. - */ - description?: Message; - /** - * A stable, unique identifier for this object's containing run object in the form of a GUID. - */ - guid?: string; - /** - * A hierarchical string that uniquely identifies this object's containing run object. - */ - id?: string; - /** - * Key/value pairs that provide additional information about the run automation details. - */ - properties?: PropertyBag; -} - -/** - * Specifies the unit in which the tool measures columns. - */ -export enum ColumnKind { - UnicodeCodePoints = "unicodeCodePoints", - Utf16CodeUnits = "utf16CodeUnits", -} - -/** - * References to external property files that should be inlined with the content of a root - * log file. - */ -export interface ExternalPropertyFileReferences { - /** - * An array of external property files containing run.addresses arrays to be merged with the - * root log file. - */ - addresses?: ExternalPropertyFileReference[]; - /** - * An array of external property files containing run.artifacts arrays to be merged with the - * root log file. - */ - artifacts?: ExternalPropertyFileReference[]; - /** - * An external property file containing a run.conversion object to be merged with the root - * log file. - */ - conversion?: ExternalPropertyFileReference; - /** - * An external property file containing a run.driver object to be merged with the root log - * file. - */ - driver?: ExternalPropertyFileReference; - /** - * An array of external property files containing run.extensions arrays to be merged with - * the root log file. - */ - extensions?: ExternalPropertyFileReference[]; - /** - * An external property file containing a run.properties object to be merged with the root - * log file. - */ - externalizedProperties?: ExternalPropertyFileReference; - /** - * An array of external property files containing a run.graphs object to be merged with the - * root log file. - */ - graphs?: ExternalPropertyFileReference[]; - /** - * An array of external property files containing run.invocations arrays to be merged with - * the root log file. - */ - invocations?: ExternalPropertyFileReference[]; - /** - * An array of external property files containing run.logicalLocations arrays to be merged - * with the root log file. - */ - logicalLocations?: ExternalPropertyFileReference[]; - /** - * An array of external property files containing run.policies arrays to be merged with the - * root log file. - */ - policies?: ExternalPropertyFileReference[]; - /** - * Key/value pairs that provide additional information about the external property files. - */ - properties?: PropertyBag; - /** - * An array of external property files containing run.results arrays to be merged with the - * root log file. - */ - results?: ExternalPropertyFileReference[]; - /** - * An array of external property files containing run.taxonomies arrays to be merged with - * the root log file. - */ - taxonomies?: ExternalPropertyFileReference[]; - /** - * An array of external property files containing run.threadFlowLocations arrays to be - * merged with the root log file. - */ - threadFlowLocations?: ExternalPropertyFileReference[]; - /** - * An array of external property files containing run.translations arrays to be merged with - * the root log file. - */ - translations?: ExternalPropertyFileReference[]; - /** - * An array of external property files containing run.requests arrays to be merged with the - * root log file. - */ - webRequests?: ExternalPropertyFileReference[]; - /** - * An array of external property files containing run.responses arrays to be merged with the - * root log file. - */ - webResponses?: ExternalPropertyFileReference[]; -} - -/** - * An external property file containing a run.conversion object to be merged with the root - * log file. - * - * An external property file containing a run.driver object to be merged with the root log - * file. - * - * An external property file containing a run.properties object to be merged with the root - * log file. - * - * Contains information that enables a SARIF consumer to locate the external property file - * that contains the value of an externalized property associated with the run. - */ -export interface ExternalPropertyFileReference { - /** - * A stable, unique identifier for the external property file in the form of a GUID. - */ - guid?: string; - /** - * A non-negative integer specifying the number of items contained in the external property - * file. - */ - itemCount?: number; - /** - * The location of the external property file. - */ - location?: ArtifactLocation; - /** - * Key/value pairs that provide additional information about the external property file. - */ - properties?: PropertyBag; -} - -/** - * A specialLocations object that defines locations of special significance to SARIF - * consumers. - * - * Defines locations of special significance to SARIF consumers. - */ -export interface SpecialLocations { - /** - * Provides a suggestion to SARIF consumers to display file paths relative to the specified - * location. - */ - displayBase?: ArtifactLocation; - /** - * Key/value pairs that provide additional information about the special locations. - */ - properties?: PropertyBag; -} - -/** - * Specifies the information necessary to retrieve a desired revision from a version control - * system. - */ -export interface VersionControlDetails { - /** - * A Coordinated Universal Time (UTC) date and time that can be used to synchronize an - * enlistment to the state of the repository at that time. - */ - asOfTimeUtc?: Date; - /** - * The name of a branch containing the revision. - */ - branch?: string; - /** - * The location in the local file system to which the root of the repository was mapped at - * the time of the analysis. - */ - mappedTo?: ArtifactLocation; - /** - * Key/value pairs that provide additional information about the version control details. - */ - properties?: PropertyBag; - /** - * The absolute URI of the repository. - */ - repositoryUri: string; - /** - * A string that uniquely and permanently identifies the revision within the repository. - */ - revisionId?: string; - /** - * A tag that has been applied to the revision. - */ - revisionTag?: string; -} - -// Converts JSON strings to/from your types -// and asserts the results of JSON.parse at runtime -export class Convert { - public static toSecretLintOutput(json: string): SecretLintOutput { - return cast(JSON.parse(json), r("SecretLintOutput")); - } - - public static SecretLintOutputToJson(value: SecretLintOutput): string { - return JSON.stringify(uncast(value, r("SecretLintOutput")), null, 2); - } -} - -function invalidValue(typ: any, val: any, key: any, parent: any = ''): never { - const prettyTyp = prettyTypeName(typ); - const parentText = parent ? ` on ${parent}` : ''; - const keyText = key ? ` for key "${key}"` : ''; - throw Error(`Invalid value${keyText}${parentText}. Expected ${prettyTyp} but got ${JSON.stringify(val)}`); -} - -function prettyTypeName(typ: any): string { - if (Array.isArray(typ)) { - if (typ.length === 2 && typ[0] === undefined) { - return `an optional ${prettyTypeName(typ[1])}`; - } else { - return `one of [${typ.map(a => { return prettyTypeName(a); }).join(", ")}]`; - } - } else if (typeof typ === "object" && typ.literal !== undefined) { - return typ.literal; - } else { - return typeof typ; - } -} - -function jsonToJSProps(typ: any): any { - if (typ.jsonToJS === undefined) { - const map: any = {}; - typ.props.forEach((p: any) => map[p.json] = { key: p.js, typ: p.typ }); - typ.jsonToJS = map; - } - return typ.jsonToJS; -} - -function jsToJSONProps(typ: any): any { - if (typ.jsToJSON === undefined) { - const map: any = {}; - typ.props.forEach((p: any) => map[p.js] = { key: p.json, typ: p.typ }); - typ.jsToJSON = map; - } - return typ.jsToJSON; -} - -function transform(val: any, typ: any, getProps: any, key: any = '', parent: any = ''): any { - function transformPrimitive(typ: string, val: any): any { - if (typeof typ === typeof val) return val; - return invalidValue(typ, val, key, parent); - } - - function transformUnion(typs: any[], val: any): any { - // val must validate against one typ in typs - const l = typs.length; - for (let i = 0; i < l; i++) { - const typ = typs[i]; - try { - return transform(val, typ, getProps); - } catch (_) { } - } - return invalidValue(typs, val, key, parent); - } - - function transformEnum(cases: string[], val: any): any { - if (cases.indexOf(val) !== -1) return val; - return invalidValue(cases.map(a => { return l(a); }), val, key, parent); - } - - function transformArray(typ: any, val: any): any { - // val must be an array with no invalid elements - if (!Array.isArray(val)) return invalidValue(l("array"), val, key, parent); - return val.map(el => transform(el, typ, getProps)); - } - - function transformDate(val: any): any { - if (val === null) { - return null; - } - const d = new Date(val); - if (isNaN(d.valueOf())) { - return invalidValue(l("Date"), val, key, parent); - } - return d; - } - - function transformObject(props: { [k: string]: any }, additional: any, val: any): any { - if (val === null || typeof val !== "object" || Array.isArray(val)) { - return invalidValue(l(ref || "object"), val, key, parent); - } - const result: any = {}; - Object.getOwnPropertyNames(props).forEach(key => { - const prop = props[key]; - const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined; - result[prop.key] = transform(v, prop.typ, getProps, key, ref); - }); - Object.getOwnPropertyNames(val).forEach(key => { - if (!Object.prototype.hasOwnProperty.call(props, key)) { - result[key] = transform(val[key], additional, getProps, key, ref); - } - }); - return result; - } - - if (typ === "any") return val; - if (typ === null) { - if (val === null) return val; - return invalidValue(typ, val, key, parent); - } - if (typ === false) return invalidValue(typ, val, key, parent); - let ref: any = undefined; - while (typeof typ === "object" && typ.ref !== undefined) { - ref = typ.ref; - typ = typeMap[typ.ref]; - } - if (Array.isArray(typ)) return transformEnum(typ, val); - if (typeof typ === "object") { - return typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val) - : typ.hasOwnProperty("arrayItems") ? transformArray(typ.arrayItems, val) - : typ.hasOwnProperty("props") ? transformObject(getProps(typ), typ.additional, val) - : invalidValue(typ, val, key, parent); - } - // Numbers can be parsed by Date but shouldn't be. - if (typ === Date && typeof val !== "number") return transformDate(val); - return transformPrimitive(typ, val); -} - -function cast(val: any, typ: any): T { - return transform(val, typ, jsonToJSProps); -} - -function uncast(val: T, typ: any): any { - return transform(val, typ, jsToJSONProps); -} - -function l(typ: any) { - return { literal: typ }; -} - -function a(typ: any) { - return { arrayItems: typ }; -} - -function u(...typs: any[]) { - return { unionMembers: typs }; -} - -function o(props: any[], additional: any) { - return { props, additional }; -} - -function m(additional: any) { - return { props: [], additional }; -} - -function r(name: string) { - return { ref: name }; -} - -const typeMap: any = { - "SecretLintOutput": o([ - { json: "$schema", js: "$schema", typ: u(undefined, "") }, - { json: "inlineExternalProperties", js: "inlineExternalProperties", typ: u(undefined, a(r("ExternalProperties"))) }, - { json: "properties", js: "properties", typ: u(undefined, r("PropertyBag")) }, - { json: "runs", js: "runs", typ: a(r("Run")) }, - { json: "version", js: "version", typ: r("Version") }, - ], false), - "ExternalProperties": o([ - { json: "addresses", js: "addresses", typ: u(undefined, a(r("Address"))) }, - { json: "artifacts", js: "artifacts", typ: u(undefined, a(r("Artifact"))) }, - { json: "conversion", js: "conversion", typ: u(undefined, r("Conversion")) }, - { json: "driver", js: "driver", typ: u(undefined, r("ToolComponent")) }, - { json: "extensions", js: "extensions", typ: u(undefined, a(r("ToolComponent"))) }, - { json: "externalizedProperties", js: "externalizedProperties", typ: u(undefined, r("PropertyBag")) }, - { json: "graphs", js: "graphs", typ: u(undefined, a(r("Graph"))) }, - { json: "guid", js: "guid", typ: u(undefined, "") }, - { json: "invocations", js: "invocations", typ: u(undefined, a(r("Invocation"))) }, - { json: "logicalLocations", js: "logicalLocations", typ: u(undefined, a(r("LogicalLocation"))) }, - { json: "policies", js: "policies", typ: u(undefined, a(r("ToolComponent"))) }, - { json: "properties", js: "properties", typ: u(undefined, r("PropertyBag")) }, - { json: "results", js: "results", typ: u(undefined, a(r("Result"))) }, - { json: "runGuid", js: "runGuid", typ: u(undefined, "") }, - { json: "schema", js: "schema", typ: u(undefined, "") }, - { json: "taxonomies", js: "taxonomies", typ: u(undefined, a(r("ToolComponent"))) }, - { json: "threadFlowLocations", js: "threadFlowLocations", typ: u(undefined, a(r("ThreadFlowLocation"))) }, - { json: "translations", js: "translations", typ: u(undefined, a(r("ToolComponent"))) }, - { json: "version", js: "version", typ: u(undefined, r("Version")) }, - { json: "webRequests", js: "webRequests", typ: u(undefined, a(r("WebRequest"))) }, - { json: "webResponses", js: "webResponses", typ: u(undefined, a(r("WebResponse"))) }, - ], false), - "Address": o([ - { json: "absoluteAddress", js: "absoluteAddress", typ: u(undefined, 0) }, - { json: "fullyQualifiedName", js: "fullyQualifiedName", typ: u(undefined, "") }, - { json: "index", js: "index", typ: u(undefined, 0) }, - { json: "kind", js: "kind", typ: u(undefined, "") }, - { json: "length", js: "length", typ: u(undefined, 0) }, - { json: "name", js: "name", typ: u(undefined, "") }, - { json: "offsetFromParent", js: "offsetFromParent", typ: u(undefined, 0) }, - { json: "parentIndex", js: "parentIndex", typ: u(undefined, 0) }, - { json: "properties", js: "properties", typ: u(undefined, r("PropertyBag")) }, - { json: "relativeAddress", js: "relativeAddress", typ: u(undefined, 0) }, - ], false), - "PropertyBag": o([ - { json: "tags", js: "tags", typ: u(undefined, a("")) }, - ], "any"), - "Artifact": o([ - { json: "contents", js: "contents", typ: u(undefined, r("ArtifactContent")) }, - { json: "description", js: "description", typ: u(undefined, r("Message")) }, - { json: "encoding", js: "encoding", typ: u(undefined, "") }, - { json: "hashes", js: "hashes", typ: u(undefined, m("")) }, - { json: "lastModifiedTimeUtc", js: "lastModifiedTimeUtc", typ: u(undefined, Date) }, - { json: "length", js: "length", typ: u(undefined, 0) }, - { json: "location", js: "location", typ: u(undefined, r("ArtifactLocation")) }, - { json: "mimeType", js: "mimeType", typ: u(undefined, "") }, - { json: "offset", js: "offset", typ: u(undefined, 0) }, - { json: "parentIndex", js: "parentIndex", typ: u(undefined, 0) }, - { json: "properties", js: "properties", typ: u(undefined, r("PropertyBag")) }, - { json: "roles", js: "roles", typ: u(undefined, a(r("Role"))) }, - { json: "sourceLanguage", js: "sourceLanguage", typ: u(undefined, "") }, - ], false), - "ArtifactContent": o([ - { json: "binary", js: "binary", typ: u(undefined, "") }, - { json: "properties", js: "properties", typ: u(undefined, r("PropertyBag")) }, - { json: "rendered", js: "rendered", typ: u(undefined, r("MultiformatMessageString")) }, - { json: "text", js: "text", typ: u(undefined, "") }, - ], false), - "MultiformatMessageString": o([ - { json: "markdown", js: "markdown", typ: u(undefined, "") }, - { json: "properties", js: "properties", typ: u(undefined, r("PropertyBag")) }, - { json: "text", js: "text", typ: "" }, - ], false), - "Message": o([ - { json: "arguments", js: "arguments", typ: u(undefined, a("")) }, - { json: "id", js: "id", typ: u(undefined, "") }, - { json: "markdown", js: "markdown", typ: u(undefined, "") }, - { json: "properties", js: "properties", typ: u(undefined, r("PropertyBag")) }, - { json: "text", js: "text", typ: u(undefined, "") }, - ], false), - "ArtifactLocation": o([ - { json: "description", js: "description", typ: u(undefined, r("Message")) }, - { json: "index", js: "index", typ: u(undefined, 0) }, - { json: "properties", js: "properties", typ: u(undefined, r("PropertyBag")) }, - { json: "uri", js: "uri", typ: u(undefined, "") }, - { json: "uriBaseId", js: "uriBaseId", typ: u(undefined, "") }, - ], false), - "Conversion": o([ - { json: "analysisToolLogFiles", js: "analysisToolLogFiles", typ: u(undefined, a(r("ArtifactLocation"))) }, - { json: "invocation", js: "invocation", typ: u(undefined, r("Invocation")) }, - { json: "properties", js: "properties", typ: u(undefined, r("PropertyBag")) }, - { json: "tool", js: "tool", typ: r("Tool") }, - ], false), - "Invocation": o([ - { json: "account", js: "account", typ: u(undefined, "") }, - { json: "arguments", js: "arguments", typ: u(undefined, a("")) }, - { json: "commandLine", js: "commandLine", typ: u(undefined, "") }, - { json: "endTimeUtc", js: "endTimeUtc", typ: u(undefined, Date) }, - { json: "environmentVariables", js: "environmentVariables", typ: u(undefined, m("")) }, - { json: "executableLocation", js: "executableLocation", typ: u(undefined, r("ArtifactLocation")) }, - { json: "executionSuccessful", js: "executionSuccessful", typ: true }, - { json: "exitCode", js: "exitCode", typ: u(undefined, 0) }, - { json: "exitCodeDescription", js: "exitCodeDescription", typ: u(undefined, "") }, - { json: "exitSignalName", js: "exitSignalName", typ: u(undefined, "") }, - { json: "exitSignalNumber", js: "exitSignalNumber", typ: u(undefined, 0) }, - { json: "machine", js: "machine", typ: u(undefined, "") }, - { json: "notificationConfigurationOverrides", js: "notificationConfigurationOverrides", typ: u(undefined, a(r("ConfigurationOverride"))) }, - { json: "processId", js: "processId", typ: u(undefined, 0) }, - { json: "processStartFailureMessage", js: "processStartFailureMessage", typ: u(undefined, "") }, - { json: "properties", js: "properties", typ: u(undefined, r("PropertyBag")) }, - { json: "responseFiles", js: "responseFiles", typ: u(undefined, a(r("ArtifactLocation"))) }, - { json: "ruleConfigurationOverrides", js: "ruleConfigurationOverrides", typ: u(undefined, a(r("ConfigurationOverride"))) }, - { json: "startTimeUtc", js: "startTimeUtc", typ: u(undefined, Date) }, - { json: "stderr", js: "stderr", typ: u(undefined, r("ArtifactLocation")) }, - { json: "stdin", js: "stdin", typ: u(undefined, r("ArtifactLocation")) }, - { json: "stdout", js: "stdout", typ: u(undefined, r("ArtifactLocation")) }, - { json: "stdoutStderr", js: "stdoutStderr", typ: u(undefined, r("ArtifactLocation")) }, - { json: "toolConfigurationNotifications", js: "toolConfigurationNotifications", typ: u(undefined, a(r("Notification"))) }, - { json: "toolExecutionNotifications", js: "toolExecutionNotifications", typ: u(undefined, a(r("Notification"))) }, - { json: "workingDirectory", js: "workingDirectory", typ: u(undefined, r("ArtifactLocation")) }, - ], false), - "ConfigurationOverride": o([ - { json: "configuration", js: "configuration", typ: r("ReportingConfiguration") }, - { json: "descriptor", js: "descriptor", typ: r("ReportingDescriptorReference") }, - { json: "properties", js: "properties", typ: u(undefined, r("PropertyBag")) }, - ], false), - "ReportingConfiguration": o([ - { json: "enabled", js: "enabled", typ: u(undefined, true) }, - { json: "level", js: "level", typ: u(undefined, r("Level")) }, - { json: "parameters", js: "parameters", typ: u(undefined, r("PropertyBag")) }, - { json: "properties", js: "properties", typ: u(undefined, r("PropertyBag")) }, - { json: "rank", js: "rank", typ: u(undefined, 3.14) }, - ], false), - "ReportingDescriptorReference": o([ - { json: "guid", js: "guid", typ: u(undefined, "") }, - { json: "id", js: "id", typ: u(undefined, "") }, - { json: "index", js: "index", typ: u(undefined, 0) }, - { json: "properties", js: "properties", typ: u(undefined, r("PropertyBag")) }, - { json: "toolComponent", js: "toolComponent", typ: u(undefined, r("ToolComponentReference")) }, - ], false), - "ToolComponentReference": o([ - { json: "guid", js: "guid", typ: u(undefined, "") }, - { json: "index", js: "index", typ: u(undefined, 0) }, - { json: "name", js: "name", typ: u(undefined, "") }, - { json: "properties", js: "properties", typ: u(undefined, r("PropertyBag")) }, - ], false), - "Notification": o([ - { json: "associatedRule", js: "associatedRule", typ: u(undefined, r("ReportingDescriptorReference")) }, - { json: "descriptor", js: "descriptor", typ: u(undefined, r("ReportingDescriptorReference")) }, - { json: "exception", js: "exception", typ: u(undefined, r("Exception")) }, - { json: "level", js: "level", typ: u(undefined, r("Level")) }, - { json: "locations", js: "locations", typ: u(undefined, a(r("Location"))) }, - { json: "message", js: "message", typ: r("Message") }, - { json: "properties", js: "properties", typ: u(undefined, r("PropertyBag")) }, - { json: "threadId", js: "threadId", typ: u(undefined, 0) }, - { json: "timeUtc", js: "timeUtc", typ: u(undefined, Date) }, - ], false), - "Exception": o([ - { json: "innerExceptions", js: "innerExceptions", typ: u(undefined, a(r("Exception"))) }, - { json: "kind", js: "kind", typ: u(undefined, "") }, - { json: "message", js: "message", typ: u(undefined, "") }, - { json: "properties", js: "properties", typ: u(undefined, r("PropertyBag")) }, - { json: "stack", js: "stack", typ: u(undefined, r("Stack")) }, - ], false), - "Stack": o([ - { json: "frames", js: "frames", typ: a(r("StackFrame")) }, - { json: "message", js: "message", typ: u(undefined, r("Message")) }, - { json: "properties", js: "properties", typ: u(undefined, r("PropertyBag")) }, - ], false), - "StackFrame": o([ - { json: "location", js: "location", typ: u(undefined, r("Location")) }, - { json: "module", js: "module", typ: u(undefined, "") }, - { json: "parameters", js: "parameters", typ: u(undefined, a("")) }, - { json: "properties", js: "properties", typ: u(undefined, r("PropertyBag")) }, - { json: "threadId", js: "threadId", typ: u(undefined, 0) }, - ], false), - "Location": o([ - { json: "annotations", js: "annotations", typ: u(undefined, a(r("Region"))) }, - { json: "id", js: "id", typ: u(undefined, 0) }, - { json: "logicalLocations", js: "logicalLocations", typ: u(undefined, a(r("LogicalLocation"))) }, - { json: "message", js: "message", typ: u(undefined, r("Message")) }, - { json: "physicalLocation", js: "physicalLocation", typ: u(undefined, r("PhysicalLocation")) }, - { json: "properties", js: "properties", typ: u(undefined, r("PropertyBag")) }, - { json: "relationships", js: "relationships", typ: u(undefined, a(r("LocationRelationship"))) }, - ], false), - "Region": o([ - { json: "byteLength", js: "byteLength", typ: u(undefined, 0) }, - { json: "byteOffset", js: "byteOffset", typ: u(undefined, 0) }, - { json: "charLength", js: "charLength", typ: u(undefined, 0) }, - { json: "charOffset", js: "charOffset", typ: u(undefined, 0) }, - { json: "endColumn", js: "endColumn", typ: u(undefined, 0) }, - { json: "endLine", js: "endLine", typ: u(undefined, 0) }, - { json: "message", js: "message", typ: u(undefined, r("Message")) }, - { json: "properties", js: "properties", typ: u(undefined, r("PropertyBag")) }, - { json: "snippet", js: "snippet", typ: u(undefined, r("ArtifactContent")) }, - { json: "sourceLanguage", js: "sourceLanguage", typ: u(undefined, "") }, - { json: "startColumn", js: "startColumn", typ: u(undefined, 0) }, - { json: "startLine", js: "startLine", typ: u(undefined, 0) }, - ], false), - "LogicalLocation": o([ - { json: "decoratedName", js: "decoratedName", typ: u(undefined, "") }, - { json: "fullyQualifiedName", js: "fullyQualifiedName", typ: u(undefined, "") }, - { json: "index", js: "index", typ: u(undefined, 0) }, - { json: "kind", js: "kind", typ: u(undefined, "") }, - { json: "name", js: "name", typ: u(undefined, "") }, - { json: "parentIndex", js: "parentIndex", typ: u(undefined, 0) }, - { json: "properties", js: "properties", typ: u(undefined, r("PropertyBag")) }, - ], false), - "PhysicalLocation": o([ - { json: "address", js: "address", typ: u(undefined, r("Address")) }, - { json: "artifactLocation", js: "artifactLocation", typ: u(undefined, r("ArtifactLocation")) }, - { json: "contextRegion", js: "contextRegion", typ: u(undefined, r("Region")) }, - { json: "properties", js: "properties", typ: u(undefined, r("PropertyBag")) }, - { json: "region", js: "region", typ: u(undefined, r("Region")) }, - ], false), - "LocationRelationship": o([ - { json: "description", js: "description", typ: u(undefined, r("Message")) }, - { json: "kinds", js: "kinds", typ: u(undefined, a("")) }, - { json: "properties", js: "properties", typ: u(undefined, r("PropertyBag")) }, - { json: "target", js: "target", typ: 0 }, - ], false), - "Tool": o([ - { json: "driver", js: "driver", typ: r("ToolComponent") }, - { json: "extensions", js: "extensions", typ: u(undefined, a(r("ToolComponent"))) }, - { json: "properties", js: "properties", typ: u(undefined, r("PropertyBag")) }, - ], false), - "ToolComponent": o([ - { json: "associatedComponent", js: "associatedComponent", typ: u(undefined, r("ToolComponentReference")) }, - { json: "contents", js: "contents", typ: u(undefined, a(r("Content"))) }, - { json: "dottedQuadFileVersion", js: "dottedQuadFileVersion", typ: u(undefined, "") }, - { json: "downloadUri", js: "downloadUri", typ: u(undefined, "") }, - { json: "fullDescription", js: "fullDescription", typ: u(undefined, r("MultiformatMessageString")) }, - { json: "fullName", js: "fullName", typ: u(undefined, "") }, - { json: "globalMessageStrings", js: "globalMessageStrings", typ: u(undefined, m(r("MultiformatMessageString"))) }, - { json: "guid", js: "guid", typ: u(undefined, "") }, - { json: "informationUri", js: "informationUri", typ: u(undefined, "") }, - { json: "isComprehensive", js: "isComprehensive", typ: u(undefined, true) }, - { json: "language", js: "language", typ: u(undefined, "") }, - { json: "localizedDataSemanticVersion", js: "localizedDataSemanticVersion", typ: u(undefined, "") }, - { json: "locations", js: "locations", typ: u(undefined, a(r("ArtifactLocation"))) }, - { json: "minimumRequiredLocalizedDataSemanticVersion", js: "minimumRequiredLocalizedDataSemanticVersion", typ: u(undefined, "") }, - { json: "name", js: "name", typ: "" }, - { json: "notifications", js: "notifications", typ: u(undefined, a(r("ReportingDescriptor"))) }, - { json: "organization", js: "organization", typ: u(undefined, "") }, - { json: "product", js: "product", typ: u(undefined, "") }, - { json: "productSuite", js: "productSuite", typ: u(undefined, "") }, - { json: "properties", js: "properties", typ: u(undefined, r("PropertyBag")) }, - { json: "releaseDateUtc", js: "releaseDateUtc", typ: u(undefined, "") }, - { json: "rules", js: "rules", typ: u(undefined, a(r("ReportingDescriptor"))) }, - { json: "semanticVersion", js: "semanticVersion", typ: u(undefined, "") }, - { json: "shortDescription", js: "shortDescription", typ: u(undefined, r("MultiformatMessageString")) }, - { json: "supportedTaxonomies", js: "supportedTaxonomies", typ: u(undefined, a(r("ToolComponentReference"))) }, - { json: "taxa", js: "taxa", typ: u(undefined, a(r("ReportingDescriptor"))) }, - { json: "translationMetadata", js: "translationMetadata", typ: u(undefined, r("TranslationMetadata")) }, - { json: "version", js: "version", typ: u(undefined, "") }, - ], false), - "ReportingDescriptor": o([ - { json: "defaultConfiguration", js: "defaultConfiguration", typ: u(undefined, r("ReportingConfiguration")) }, - { json: "deprecatedGuids", js: "deprecatedGuids", typ: u(undefined, a("")) }, - { json: "deprecatedIds", js: "deprecatedIds", typ: u(undefined, a("")) }, - { json: "deprecatedNames", js: "deprecatedNames", typ: u(undefined, a("")) }, - { json: "fullDescription", js: "fullDescription", typ: u(undefined, r("MultiformatMessageString")) }, - { json: "guid", js: "guid", typ: u(undefined, "") }, - { json: "help", js: "help", typ: u(undefined, r("MultiformatMessageString")) }, - { json: "helpUri", js: "helpUri", typ: u(undefined, "") }, - { json: "id", js: "id", typ: "" }, - { json: "messageStrings", js: "messageStrings", typ: u(undefined, m(r("MultiformatMessageString"))) }, - { json: "name", js: "name", typ: u(undefined, "") }, - { json: "properties", js: "properties", typ: u(undefined, r("PropertyBag")) }, - { json: "relationships", js: "relationships", typ: u(undefined, a(r("ReportingDescriptorRelationship"))) }, - { json: "shortDescription", js: "shortDescription", typ: u(undefined, r("MultiformatMessageString")) }, - ], false), - "ReportingDescriptorRelationship": o([ - { json: "description", js: "description", typ: u(undefined, r("Message")) }, - { json: "kinds", js: "kinds", typ: u(undefined, a("")) }, - { json: "properties", js: "properties", typ: u(undefined, r("PropertyBag")) }, - { json: "target", js: "target", typ: r("ReportingDescriptorReference") }, - ], false), - "TranslationMetadata": o([ - { json: "downloadUri", js: "downloadUri", typ: u(undefined, "") }, - { json: "fullDescription", js: "fullDescription", typ: u(undefined, r("MultiformatMessageString")) }, - { json: "fullName", js: "fullName", typ: u(undefined, "") }, - { json: "informationUri", js: "informationUri", typ: u(undefined, "") }, - { json: "name", js: "name", typ: "" }, - { json: "properties", js: "properties", typ: u(undefined, r("PropertyBag")) }, - { json: "shortDescription", js: "shortDescription", typ: u(undefined, r("MultiformatMessageString")) }, - ], false), - "Graph": o([ - { json: "description", js: "description", typ: u(undefined, r("Message")) }, - { json: "edges", js: "edges", typ: u(undefined, a(r("Edge"))) }, - { json: "nodes", js: "nodes", typ: u(undefined, a(r("Node"))) }, - { json: "properties", js: "properties", typ: u(undefined, r("PropertyBag")) }, - ], false), - "Edge": o([ - { json: "id", js: "id", typ: "" }, - { json: "label", js: "label", typ: u(undefined, r("Message")) }, - { json: "properties", js: "properties", typ: u(undefined, r("PropertyBag")) }, - { json: "sourceNodeId", js: "sourceNodeId", typ: "" }, - { json: "targetNodeId", js: "targetNodeId", typ: "" }, - ], false), - "Node": o([ - { json: "children", js: "children", typ: u(undefined, a(r("Node"))) }, - { json: "id", js: "id", typ: "" }, - { json: "label", js: "label", typ: u(undefined, r("Message")) }, - { json: "location", js: "location", typ: u(undefined, r("Location")) }, - { json: "properties", js: "properties", typ: u(undefined, r("PropertyBag")) }, - ], false), - "Result": o([ - { json: "analysisTarget", js: "analysisTarget", typ: u(undefined, r("ArtifactLocation")) }, - { json: "attachments", js: "attachments", typ: u(undefined, a(r("Attachment"))) }, - { json: "baselineState", js: "baselineState", typ: u(undefined, r("BaselineState")) }, - { json: "codeFlows", js: "codeFlows", typ: u(undefined, a(r("CodeFlow"))) }, - { json: "correlationGuid", js: "correlationGuid", typ: u(undefined, "") }, - { json: "fingerprints", js: "fingerprints", typ: u(undefined, m("")) }, - { json: "fixes", js: "fixes", typ: u(undefined, a(r("Fix"))) }, - { json: "graphs", js: "graphs", typ: u(undefined, a(r("Graph"))) }, - { json: "graphTraversals", js: "graphTraversals", typ: u(undefined, a(r("GraphTraversal"))) }, - { json: "guid", js: "guid", typ: u(undefined, "") }, - { json: "hostedViewerUri", js: "hostedViewerUri", typ: u(undefined, "") }, - { json: "kind", js: "kind", typ: u(undefined, r("ResultKind")) }, - { json: "level", js: "level", typ: u(undefined, r("Level")) }, - { json: "locations", js: "locations", typ: u(undefined, a(r("Location"))) }, - { json: "message", js: "message", typ: r("Message") }, - { json: "occurrenceCount", js: "occurrenceCount", typ: u(undefined, 0) }, - { json: "partialFingerprints", js: "partialFingerprints", typ: u(undefined, m("")) }, - { json: "properties", js: "properties", typ: u(undefined, r("PropertyBag")) }, - { json: "provenance", js: "provenance", typ: u(undefined, r("ResultProvenance")) }, - { json: "rank", js: "rank", typ: u(undefined, 3.14) }, - { json: "relatedLocations", js: "relatedLocations", typ: u(undefined, a(r("Location"))) }, - { json: "rule", js: "rule", typ: u(undefined, r("ReportingDescriptorReference")) }, - { json: "ruleId", js: "ruleId", typ: u(undefined, "") }, - { json: "ruleIndex", js: "ruleIndex", typ: u(undefined, 0) }, - { json: "stacks", js: "stacks", typ: u(undefined, a(r("Stack"))) }, - { json: "suppressions", js: "suppressions", typ: u(undefined, a(r("Suppression"))) }, - { json: "taxa", js: "taxa", typ: u(undefined, a(r("ReportingDescriptorReference"))) }, - { json: "webRequest", js: "webRequest", typ: u(undefined, r("WebRequest")) }, - { json: "webResponse", js: "webResponse", typ: u(undefined, r("WebResponse")) }, - { json: "workItemUris", js: "workItemUris", typ: u(undefined, a("")) }, - ], false), - "Attachment": o([ - { json: "artifactLocation", js: "artifactLocation", typ: r("ArtifactLocation") }, - { json: "description", js: "description", typ: u(undefined, r("Message")) }, - { json: "properties", js: "properties", typ: u(undefined, r("PropertyBag")) }, - { json: "rectangles", js: "rectangles", typ: u(undefined, a(r("Rectangle"))) }, - { json: "regions", js: "regions", typ: u(undefined, a(r("Region"))) }, - ], false), - "Rectangle": o([ - { json: "bottom", js: "bottom", typ: u(undefined, 3.14) }, - { json: "left", js: "left", typ: u(undefined, 3.14) }, - { json: "message", js: "message", typ: u(undefined, r("Message")) }, - { json: "properties", js: "properties", typ: u(undefined, r("PropertyBag")) }, - { json: "right", js: "right", typ: u(undefined, 3.14) }, - { json: "top", js: "top", typ: u(undefined, 3.14) }, - ], false), - "CodeFlow": o([ - { json: "message", js: "message", typ: u(undefined, r("Message")) }, - { json: "properties", js: "properties", typ: u(undefined, r("PropertyBag")) }, - { json: "threadFlows", js: "threadFlows", typ: a(r("ThreadFlow")) }, - ], false), - "ThreadFlow": o([ - { json: "id", js: "id", typ: u(undefined, "") }, - { json: "immutableState", js: "immutableState", typ: u(undefined, m(r("MultiformatMessageString"))) }, - { json: "initialState", js: "initialState", typ: u(undefined, m(r("MultiformatMessageString"))) }, - { json: "locations", js: "locations", typ: a(r("ThreadFlowLocation")) }, - { json: "message", js: "message", typ: u(undefined, r("Message")) }, - { json: "properties", js: "properties", typ: u(undefined, r("PropertyBag")) }, - ], false), - "ThreadFlowLocation": o([ - { json: "executionOrder", js: "executionOrder", typ: u(undefined, 0) }, - { json: "executionTimeUtc", js: "executionTimeUtc", typ: u(undefined, Date) }, - { json: "importance", js: "importance", typ: u(undefined, r("Importance")) }, - { json: "index", js: "index", typ: u(undefined, 0) }, - { json: "kinds", js: "kinds", typ: u(undefined, a("")) }, - { json: "location", js: "location", typ: u(undefined, r("Location")) }, - { json: "module", js: "module", typ: u(undefined, "") }, - { json: "nestingLevel", js: "nestingLevel", typ: u(undefined, 0) }, - { json: "properties", js: "properties", typ: u(undefined, r("PropertyBag")) }, - { json: "stack", js: "stack", typ: u(undefined, r("Stack")) }, - { json: "state", js: "state", typ: u(undefined, m(r("MultiformatMessageString"))) }, - { json: "taxa", js: "taxa", typ: u(undefined, a(r("ReportingDescriptorReference"))) }, - { json: "webRequest", js: "webRequest", typ: u(undefined, r("WebRequest")) }, - { json: "webResponse", js: "webResponse", typ: u(undefined, r("WebResponse")) }, - ], false), - "WebRequest": o([ - { json: "body", js: "body", typ: u(undefined, r("ArtifactContent")) }, - { json: "headers", js: "headers", typ: u(undefined, m("")) }, - { json: "index", js: "index", typ: u(undefined, 0) }, - { json: "method", js: "method", typ: u(undefined, "") }, - { json: "parameters", js: "parameters", typ: u(undefined, m("")) }, - { json: "properties", js: "properties", typ: u(undefined, r("PropertyBag")) }, - { json: "protocol", js: "protocol", typ: u(undefined, "") }, - { json: "target", js: "target", typ: u(undefined, "") }, - { json: "version", js: "version", typ: u(undefined, "") }, - ], false), - "WebResponse": o([ - { json: "body", js: "body", typ: u(undefined, r("ArtifactContent")) }, - { json: "headers", js: "headers", typ: u(undefined, m("")) }, - { json: "index", js: "index", typ: u(undefined, 0) }, - { json: "noResponseReceived", js: "noResponseReceived", typ: u(undefined, true) }, - { json: "properties", js: "properties", typ: u(undefined, r("PropertyBag")) }, - { json: "protocol", js: "protocol", typ: u(undefined, "") }, - { json: "reasonPhrase", js: "reasonPhrase", typ: u(undefined, "") }, - { json: "statusCode", js: "statusCode", typ: u(undefined, 0) }, - { json: "version", js: "version", typ: u(undefined, "") }, - ], false), - "Fix": o([ - { json: "artifactChanges", js: "artifactChanges", typ: a(r("ArtifactChange")) }, - { json: "description", js: "description", typ: u(undefined, r("Message")) }, - { json: "properties", js: "properties", typ: u(undefined, r("PropertyBag")) }, - ], false), - "ArtifactChange": o([ - { json: "artifactLocation", js: "artifactLocation", typ: r("ArtifactLocation") }, - { json: "properties", js: "properties", typ: u(undefined, r("PropertyBag")) }, - { json: "replacements", js: "replacements", typ: a(r("Replacement")) }, - ], false), - "Replacement": o([ - { json: "deletedRegion", js: "deletedRegion", typ: r("Region") }, - { json: "insertedContent", js: "insertedContent", typ: u(undefined, r("ArtifactContent")) }, - { json: "properties", js: "properties", typ: u(undefined, r("PropertyBag")) }, - ], false), - "GraphTraversal": o([ - { json: "description", js: "description", typ: u(undefined, r("Message")) }, - { json: "edgeTraversals", js: "edgeTraversals", typ: u(undefined, a(r("EdgeTraversal"))) }, - { json: "immutableState", js: "immutableState", typ: u(undefined, m(r("MultiformatMessageString"))) }, - { json: "initialState", js: "initialState", typ: u(undefined, m(r("MultiformatMessageString"))) }, - { json: "properties", js: "properties", typ: u(undefined, r("PropertyBag")) }, - { json: "resultGraphIndex", js: "resultGraphIndex", typ: u(undefined, 0) }, - { json: "runGraphIndex", js: "runGraphIndex", typ: u(undefined, 0) }, - ], false), - "EdgeTraversal": o([ - { json: "edgeId", js: "edgeId", typ: "" }, - { json: "finalState", js: "finalState", typ: u(undefined, m(r("MultiformatMessageString"))) }, - { json: "message", js: "message", typ: u(undefined, r("Message")) }, - { json: "properties", js: "properties", typ: u(undefined, r("PropertyBag")) }, - { json: "stepOverEdgeCount", js: "stepOverEdgeCount", typ: u(undefined, 0) }, - ], false), - "ResultProvenance": o([ - { json: "conversionSources", js: "conversionSources", typ: u(undefined, a(r("PhysicalLocation"))) }, - { json: "firstDetectionRunGuid", js: "firstDetectionRunGuid", typ: u(undefined, "") }, - { json: "firstDetectionTimeUtc", js: "firstDetectionTimeUtc", typ: u(undefined, Date) }, - { json: "invocationIndex", js: "invocationIndex", typ: u(undefined, 0) }, - { json: "lastDetectionRunGuid", js: "lastDetectionRunGuid", typ: u(undefined, "") }, - { json: "lastDetectionTimeUtc", js: "lastDetectionTimeUtc", typ: u(undefined, Date) }, - { json: "properties", js: "properties", typ: u(undefined, r("PropertyBag")) }, - ], false), - "Suppression": o([ - { json: "guid", js: "guid", typ: u(undefined, "") }, - { json: "justification", js: "justification", typ: u(undefined, "") }, - { json: "kind", js: "kind", typ: r("SuppressionKind") }, - { json: "location", js: "location", typ: u(undefined, r("Location")) }, - { json: "properties", js: "properties", typ: u(undefined, r("PropertyBag")) }, - { json: "status", js: "status", typ: u(undefined, r("Status")) }, - ], false), - "Run": o([ - { json: "addresses", js: "addresses", typ: u(undefined, a(r("Address"))) }, - { json: "artifacts", js: "artifacts", typ: u(undefined, a(r("Artifact"))) }, - { json: "automationDetails", js: "automationDetails", typ: u(undefined, r("RunAutomationDetails")) }, - { json: "baselineGuid", js: "baselineGuid", typ: u(undefined, "") }, - { json: "columnKind", js: "columnKind", typ: u(undefined, r("ColumnKind")) }, - { json: "conversion", js: "conversion", typ: u(undefined, r("Conversion")) }, - { json: "defaultEncoding", js: "defaultEncoding", typ: u(undefined, "") }, - { json: "defaultSourceLanguage", js: "defaultSourceLanguage", typ: u(undefined, "") }, - { json: "externalPropertyFileReferences", js: "externalPropertyFileReferences", typ: u(undefined, r("ExternalPropertyFileReferences")) }, - { json: "graphs", js: "graphs", typ: u(undefined, a(r("Graph"))) }, - { json: "invocations", js: "invocations", typ: u(undefined, a(r("Invocation"))) }, - { json: "language", js: "language", typ: u(undefined, "") }, - { json: "logicalLocations", js: "logicalLocations", typ: u(undefined, a(r("LogicalLocation"))) }, - { json: "newlineSequences", js: "newlineSequences", typ: u(undefined, a("")) }, - { json: "originalUriBaseIds", js: "originalUriBaseIds", typ: u(undefined, m(r("ArtifactLocation"))) }, - { json: "policies", js: "policies", typ: u(undefined, a(r("ToolComponent"))) }, - { json: "properties", js: "properties", typ: u(undefined, r("PropertyBag")) }, - { json: "redactionTokens", js: "redactionTokens", typ: u(undefined, a("")) }, - { json: "results", js: "results", typ: u(undefined, a(r("Result"))) }, - { json: "runAggregates", js: "runAggregates", typ: u(undefined, a(r("RunAutomationDetails"))) }, - { json: "specialLocations", js: "specialLocations", typ: u(undefined, r("SpecialLocations")) }, - { json: "taxonomies", js: "taxonomies", typ: u(undefined, a(r("ToolComponent"))) }, - { json: "threadFlowLocations", js: "threadFlowLocations", typ: u(undefined, a(r("ThreadFlowLocation"))) }, - { json: "tool", js: "tool", typ: r("Tool") }, - { json: "translations", js: "translations", typ: u(undefined, a(r("ToolComponent"))) }, - { json: "versionControlProvenance", js: "versionControlProvenance", typ: u(undefined, a(r("VersionControlDetails"))) }, - { json: "webRequests", js: "webRequests", typ: u(undefined, a(r("WebRequest"))) }, - { json: "webResponses", js: "webResponses", typ: u(undefined, a(r("WebResponse"))) }, - ], false), - "RunAutomationDetails": o([ - { json: "correlationGuid", js: "correlationGuid", typ: u(undefined, "") }, - { json: "description", js: "description", typ: u(undefined, r("Message")) }, - { json: "guid", js: "guid", typ: u(undefined, "") }, - { json: "id", js: "id", typ: u(undefined, "") }, - { json: "properties", js: "properties", typ: u(undefined, r("PropertyBag")) }, - ], false), - "ExternalPropertyFileReferences": o([ - { json: "addresses", js: "addresses", typ: u(undefined, a(r("ExternalPropertyFileReference"))) }, - { json: "artifacts", js: "artifacts", typ: u(undefined, a(r("ExternalPropertyFileReference"))) }, - { json: "conversion", js: "conversion", typ: u(undefined, r("ExternalPropertyFileReference")) }, - { json: "driver", js: "driver", typ: u(undefined, r("ExternalPropertyFileReference")) }, - { json: "extensions", js: "extensions", typ: u(undefined, a(r("ExternalPropertyFileReference"))) }, - { json: "externalizedProperties", js: "externalizedProperties", typ: u(undefined, r("ExternalPropertyFileReference")) }, - { json: "graphs", js: "graphs", typ: u(undefined, a(r("ExternalPropertyFileReference"))) }, - { json: "invocations", js: "invocations", typ: u(undefined, a(r("ExternalPropertyFileReference"))) }, - { json: "logicalLocations", js: "logicalLocations", typ: u(undefined, a(r("ExternalPropertyFileReference"))) }, - { json: "policies", js: "policies", typ: u(undefined, a(r("ExternalPropertyFileReference"))) }, - { json: "properties", js: "properties", typ: u(undefined, r("PropertyBag")) }, - { json: "results", js: "results", typ: u(undefined, a(r("ExternalPropertyFileReference"))) }, - { json: "taxonomies", js: "taxonomies", typ: u(undefined, a(r("ExternalPropertyFileReference"))) }, - { json: "threadFlowLocations", js: "threadFlowLocations", typ: u(undefined, a(r("ExternalPropertyFileReference"))) }, - { json: "translations", js: "translations", typ: u(undefined, a(r("ExternalPropertyFileReference"))) }, - { json: "webRequests", js: "webRequests", typ: u(undefined, a(r("ExternalPropertyFileReference"))) }, - { json: "webResponses", js: "webResponses", typ: u(undefined, a(r("ExternalPropertyFileReference"))) }, - ], false), - "ExternalPropertyFileReference": o([ - { json: "guid", js: "guid", typ: u(undefined, "") }, - { json: "itemCount", js: "itemCount", typ: u(undefined, 0) }, - { json: "location", js: "location", typ: u(undefined, r("ArtifactLocation")) }, - { json: "properties", js: "properties", typ: u(undefined, r("PropertyBag")) }, - ], false), - "SpecialLocations": o([ - { json: "displayBase", js: "displayBase", typ: u(undefined, r("ArtifactLocation")) }, - { json: "properties", js: "properties", typ: u(undefined, r("PropertyBag")) }, - ], false), - "VersionControlDetails": o([ - { json: "asOfTimeUtc", js: "asOfTimeUtc", typ: u(undefined, Date) }, - { json: "branch", js: "branch", typ: u(undefined, "") }, - { json: "mappedTo", js: "mappedTo", typ: u(undefined, r("ArtifactLocation")) }, - { json: "properties", js: "properties", typ: u(undefined, r("PropertyBag")) }, - { json: "repositoryUri", js: "repositoryUri", typ: "" }, - { json: "revisionId", js: "revisionId", typ: u(undefined, "") }, - { json: "revisionTag", js: "revisionTag", typ: u(undefined, "") }, - ], false), - "Role": [ - "added", - "analysisTarget", - "attachment", - "debugOutputFile", - "deleted", - "directory", - "driver", - "extension", - "memoryContents", - "modified", - "policy", - "referencedOnCommandLine", - "renamed", - "responseFile", - "resultFile", - "standardStream", - "taxonomy", - "toolSpecifiedConfiguration", - "tracedFile", - "translation", - "uncontrolled", - "unmodified", - "userSpecifiedConfiguration", - ], - "Level": [ - "error", - "none", - "note", - "warning", - ], - "Content": [ - "localizedData", - "nonLocalizedData", - ], - "BaselineState": [ - "absent", - "new", - "unchanged", - "updated", - ], - "Importance": [ - "essential", - "important", - "unimportant", - ], - "ResultKind": [ - "fail", - "informational", - "notApplicable", - "open", - "pass", - "review", - ], - "SuppressionKind": [ - "external", - "inSource", - ], - "Status": [ - "accepted", - "rejected", - "underReview", - ], - "Version": [ - "2.1.0", - ], - "ColumnKind": [ - "unicodeCodePoints", - "utf16CodeUnits", - ], -}; From 143bb63278016487b5059bf96dcfaafc3097191e Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Fri, 21 Aug 2026 14:59:09 -0700 Subject: [PATCH 7/8] Replace keytar with @napi-rs/keyring --- README.md | 9 +- package-lock.json | 1424 +++++++++++---------------------------------- package.json | 2 +- src/store.ts | 2 +- 4 files changed, 335 insertions(+), 1102 deletions(-) diff --git a/README.md b/README.md index aa60ac84..a4fadc5e 100644 --- a/README.md +++ b/README.md @@ -15,14 +15,7 @@ Read the [**Documentation**](https://code.visualstudio.com/api/working-with-exte ### Linux -In order to save credentials safely, this project uses [`keytar`](https://www.npmjs.com/package/keytar) which uses `libsecret`, which you may need to install before publishing extensions. Setting the `VSCE_STORE=file` environment variable will revert back to the file credential store. Using the `VSCE_PAT` environment variable will also avoid using `keytar`. - -Depending on your distribution, you will need to run the following command: - -- Debian/Ubuntu: `sudo apt-get install libsecret-1-dev` -- Alpine: `apk add libsecret` -- Red Hat-based: `sudo yum install libsecret-devel` -- Arch Linux: `sudo pacman -S libsecret` +In order to save credentials safely, this project uses [`@napi-rs/keyring`](https://www.npmjs.com/package/@napi-rs/keyring), which uses the system Secret Service and falls back to the Linux kernel keyring. Setting the `VSCE_STORE=file` environment variable will revert back to the file credential store. Using the `VSCE_PAT` environment variable will also avoid using the system credential store. ## Usage diff --git a/package-lock.json b/package-lock.json index 9562410a..e37cdb7b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -59,7 +59,7 @@ "node": ">= 20.19" }, "optionalDependencies": { - "keytar": "^7.7.0" + "@napi-rs/keyring": "^1.3.0" } }, "node_modules/@azu/format-text": { @@ -440,6 +440,241 @@ "resolve": "~1.22.2" } }, + "node_modules/@napi-rs/keyring": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@napi-rs/keyring/-/keyring-1.3.0.tgz", + "integrity": "sha512-WrOw/bcXm0f9qHkumlT1QlArXSTWqaY9sunsDpOk+yCCorCKMxvWT/a3xko4EYHVdeZoh00yI2TydXn6eyICDA==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + }, + "optionalDependencies": { + "@napi-rs/keyring-darwin-arm64": "1.3.0", + "@napi-rs/keyring-darwin-x64": "1.3.0", + "@napi-rs/keyring-freebsd-x64": "1.3.0", + "@napi-rs/keyring-linux-arm-gnueabihf": "1.3.0", + "@napi-rs/keyring-linux-arm64-gnu": "1.3.0", + "@napi-rs/keyring-linux-arm64-musl": "1.3.0", + "@napi-rs/keyring-linux-riscv64-gnu": "1.3.0", + "@napi-rs/keyring-linux-x64-gnu": "1.3.0", + "@napi-rs/keyring-linux-x64-musl": "1.3.0", + "@napi-rs/keyring-win32-arm64-msvc": "1.3.0", + "@napi-rs/keyring-win32-ia32-msvc": "1.3.0", + "@napi-rs/keyring-win32-x64-msvc": "1.3.0" + } + }, + "node_modules/@napi-rs/keyring-darwin-arm64": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@napi-rs/keyring-darwin-arm64/-/keyring-darwin-arm64-1.3.0.tgz", + "integrity": "sha512-pl76hJvdYUBn6I24bXiOBMA9nbDapo3I5B+f3OorjDU4dUMSypXeKbOVehJe8fhgTiH24flMyTS3aAIy43xegQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/keyring-darwin-x64": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@napi-rs/keyring-darwin-x64/-/keyring-darwin-x64-1.3.0.tgz", + "integrity": "sha512-YcJtEV5LA3cvA4z3BurgxH5IhTsW1JfIvcAAcqcecwk06Si9F9NqkxbZVIfDwQ8oRHgaBmT3zZJnLAotCrVahw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/keyring-freebsd-x64": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@napi-rs/keyring-freebsd-x64/-/keyring-freebsd-x64-1.3.0.tgz", + "integrity": "sha512-vlLf31TGhfRAaxLDBhg8b89ss0HHD/lyNmL5F3UjSaz5CUXElsJmKYq9fqA/B+cZKUEUcLHHGhF0I/CqcFdaVw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/keyring-linux-arm-gnueabihf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@napi-rs/keyring-linux-arm-gnueabihf/-/keyring-linux-arm-gnueabihf-1.3.0.tgz", + "integrity": "sha512-KiWdMMu/Inz/bHHIAGrnF7r54FZDYXuHO6UFF/rhIrshUsxbMG1Rl9lEymNtqqsVo927G0VYcb02FzWQ3iBQRQ==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/keyring-linux-arm64-gnu": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@napi-rs/keyring-linux-arm64-gnu/-/keyring-linux-arm64-gnu-1.3.0.tgz", + "integrity": "sha512-eyKGpY40lm9Jvs1aD294XRH4y7+TlJM0YVAryZeXA6TX0mb4gMkxVXwSQv7MCwgah7raeUd0dKUb4BPAYIgcMg==", + "cpu": [ + "arm64" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/keyring-linux-arm64-musl": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@napi-rs/keyring-linux-arm64-musl/-/keyring-linux-arm64-musl-1.3.0.tgz", + "integrity": "sha512-iIK6JWHXAJqDrEyLY3TmswwloVyt2vj+04TZnew+uSJ9gnDO8EwRbp3/iw3LpWaXiDO7VomGO6y8I0Id8uBZSw==", + "cpu": [ + "arm64" + ], + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/keyring-linux-riscv64-gnu": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@napi-rs/keyring-linux-riscv64-gnu/-/keyring-linux-riscv64-gnu-1.3.0.tgz", + "integrity": "sha512-/PGqrwn6EwgtK6vccASSXJRfOSP4vN1F4ASsIQ+7MdrK6hNvAJ1FZPrIuD5gGGdxezo3F++To2Wq7DbuGIeuNQ==", + "cpu": [ + "riscv64" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/keyring-linux-x64-gnu": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@napi-rs/keyring-linux-x64-gnu/-/keyring-linux-x64-gnu-1.3.0.tgz", + "integrity": "sha512-2PDK1WKWTu9lBGq9VvNEkSlQD3O7YwVpmnyN2M3cy4v7NJ/8gDMd9GXv3G+FVXN13uhp4gnnPBS+ScefmEeD2A==", + "cpu": [ + "x64" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/keyring-linux-x64-musl": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@napi-rs/keyring-linux-x64-musl/-/keyring-linux-x64-musl-1.3.0.tgz", + "integrity": "sha512-oJ2HkX8YUo46QBkn0pG+HuIKQNqr523q6vBobCn+P95s4C4K6/kLBqHY/1bg5J4ap31DzsznhnFKcfBNBsjCnw==", + "cpu": [ + "x64" + ], + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/keyring-win32-arm64-msvc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@napi-rs/keyring-win32-arm64-msvc/-/keyring-win32-arm64-msvc-1.3.0.tgz", + "integrity": "sha512-tOd3c/uAaeoE4ycVlmAdSvygz0Zt3zdca6Y7gokBeIbaRDWpjDIUOpU3MvML59XAaqyuKGsVVu0F/DZb1lHPmw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/keyring-win32-ia32-msvc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@napi-rs/keyring-win32-ia32-msvc/-/keyring-win32-ia32-msvc-1.3.0.tgz", + "integrity": "sha512-sPSqeAFZMGqP1R++M2JTza7GQJJ/TpCo6JU6Vcd4jnebvOaEDs9b7eipakU1PJdSvhpC2yXMCNRk9gXfrhuwHQ==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/keyring-win32-x64-msvc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@napi-rs/keyring-win32-x64-msvc/-/keyring-win32-x64-msvc-1.3.0.tgz", + "integrity": "sha512-4DnCWXwDc0HRKwyRlG5y0VhKZW2tNRQfKKfyj6IX/KWfDNyq9hn4n+GL1auyDcOO/v8PwnhmYo2+rOOqCkvvOg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, "node_modules/@pkgjs/parseargs": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", @@ -1160,52 +1395,6 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", - "optional": true - }, - "node_modules/are-we-there-yet": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz", - "integrity": "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==", - "optional": true, - "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "node_modules/are-we-there-yet/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "optional": true, - "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/are-we-there-yet/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==", - "optional": true - }, - "node_modules/are-we-there-yet/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==", - "optional": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, "node_modules/arg": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", @@ -1246,26 +1435,6 @@ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", "dev": true }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "optional": true - }, "node_modules/binaryextensions": { "version": "6.11.0", "resolved": "https://registry.npmjs.org/binaryextensions/-/binaryextensions-6.11.0.tgz", @@ -1281,17 +1450,6 @@ "url": "https://bevry.me/fund" } }, - "node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "optional": true, - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, "node_modules/boundary": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/boundary/-/boundary-2.0.0.tgz", @@ -1324,30 +1482,6 @@ "integrity": "sha1-uqVZ7hTO1zRSIputcyZGfGH6vWA= sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", "dev": true }, - "node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "optional": true, - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, "node_modules/buffer-crc32": { "version": "0.2.13", "resolved": "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz", @@ -1436,12 +1570,6 @@ "url": "https://paulmillr.com/funding/" } }, - "node_modules/chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "optional": true - }, "node_modules/cliui": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", @@ -1465,15 +1593,6 @@ "node": ">=16" } }, - "node_modules/code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -1512,18 +1631,6 @@ "node": ">=18" } }, - "node_modules/console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", - "optional": true - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "optional": true - }, "node_modules/create-require": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", @@ -1561,30 +1668,6 @@ } } }, - "node_modules/decompress-response": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", - "optional": true, - "dependencies": { - "mimic-response": "^3.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "optional": true, - "engines": { - "node": ">=4.0.0" - } - }, "node_modules/default-browser": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.5.0.tgz", @@ -1633,21 +1716,6 @@ "node": ">=0.4.0" } }, - "node_modules/delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", - "optional": true - }, - "node_modules/detect-libc": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.0.tgz", - "integrity": "sha512-S55LzUl8HUav8l9E2PBTlC5PAJrHK7tkM+XXFGD+fbsbkTzhCpG6K05LxJcUOEWzMa4v6ptcMZ9s3fOdJDu0Zw==", - "optional": true, - "engines": { - "node": ">=8" - } - }, "node_modules/diff": { "version": "9.0.0", "resolved": "https://registry.npmjs.org/diff/-/diff-9.0.0.tgz", @@ -1706,15 +1774,6 @@ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha1-WuZKX0UFe682JuwU2gyl5LJDHrA= sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "optional": true, - "dependencies": { - "once": "^1.4.0" - } - }, "node_modules/entities": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/entities/-/entities-8.0.0.tgz", @@ -1790,15 +1849,6 @@ "node": ">=6" } }, - "node_modules/expand-template": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", - "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", - "optional": true, - "engines": { - "node": ">=6" - } - }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -1896,12 +1946,6 @@ "node": ">= 6" } }, - "node_modules/fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", - "optional": true - }, "node_modules/fs-extra": { "version": "11.3.4", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.4.tgz", @@ -1925,57 +1969,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/gauge": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", - "optional": true, - "dependencies": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - } - }, - "node_modules/gauge/node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/gauge/node_modules/string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "optional": true, - "dependencies": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/gauge/node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "optional": true, - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", @@ -2021,12 +2014,6 @@ "node": ">= 0.4" } }, - "node_modules/github-from-package": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", - "integrity": "sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4=", - "optional": true - }, "node_modules/glob": { "version": "13.0.6", "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.6.tgz", @@ -2095,12 +2082,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", - "optional": true - }, "node_modules/hasown": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.4.tgz", @@ -2158,26 +2139,6 @@ "node": ">= 14" } }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "optional": true - }, "node_modules/import-lazy": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz", @@ -2188,18 +2149,6 @@ "node": ">=8" } }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "optional": true - }, - "node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "optional": true - }, "node_modules/is-core-module": { "version": "2.16.1", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", @@ -2231,18 +2180,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "optional": true, - "dependencies": { - "number-is-nan": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/is-inside-container": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", @@ -2298,12 +2235,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "optional": true - }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz", @@ -2434,17 +2365,6 @@ "safe-buffer": "^5.0.1" } }, - "node_modules/keytar": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/keytar/-/keytar-7.8.0.tgz", - "integrity": "sha512-mR+BqtAOIW8j+T5FtLVyckCbvROWQD+4FzPeFMuk5njEZkXLpVPCGF26Y3mTyxMAAL1XCfswR7S6kIf+THSRFA==", - "hasInstallScript": true, - "optional": true, - "dependencies": { - "node-addon-api": "^4.3.0", - "prebuild-install": "^7.0.1" - } - }, "node_modules/leven": { "version": "3.1.0", "resolved": "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz", @@ -2605,18 +2525,6 @@ "node": ">= 0.6" } }, - "node_modules/mimic-response": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", - "optional": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/minimatch": { "version": "10.2.3", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.3.tgz", @@ -2631,12 +2539,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", - "optional": true - }, "node_modules/minipass": { "version": "7.1.3", "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", @@ -2646,12 +2548,6 @@ "node": ">=16 || 14 >=14.17" } }, - "node_modules/mkdirp-classic": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", - "optional": true - }, "node_modules/mocha": { "version": "11.7.5", "resolved": "https://registry.npmjs.org/mocha/-/mocha-11.7.5.tgz", @@ -2823,60 +2719,6 @@ "resolved": "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz", "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=" }, - "node_modules/napi-build-utils": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", - "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==", - "optional": true - }, - "node_modules/node-abi": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.8.0.tgz", - "integrity": "sha512-tzua9qWWi7iW4I42vUPKM+SfaF0vQSLAm4yO5J83mSwB7GeoWrDKC/K+8YCnYNwqP5duwazbw2X9l4m8SC2cUw==", - "optional": true, - "dependencies": { - "semver": "^7.3.5" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/node-addon-api": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz", - "integrity": "sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==", - "optional": true - }, - "node_modules/npmlog": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", - "optional": true, - "dependencies": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "node_modules/number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/object-inspect": { "version": "1.13.4", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", @@ -2888,15 +2730,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "optional": true, - "dependencies": { - "wrappy": "1" - } - }, "node_modules/open": { "version": "10.2.0", "resolved": "https://registry.npmjs.org/open/-/open-10.2.0.tgz", @@ -3053,49 +2886,6 @@ "node": ">=4" } }, - "node_modules/prebuild-install": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.0.1.tgz", - "integrity": "sha512-QBSab31WqkyxpnMWQxubYAHR5S9B2+r81ucocew34Fkl98FhvKIF50jIJnNOBmAZfyNV7vE5T6gd3hTVWgY6tg==", - "optional": true, - "dependencies": { - "detect-libc": "^2.0.0", - "expand-template": "^2.0.3", - "github-from-package": "0.0.0", - "minimist": "^1.2.3", - "mkdirp-classic": "^0.5.3", - "napi-build-utils": "^1.0.1", - "node-abi": "^3.3.0", - "npmlog": "^4.0.1", - "pump": "^3.0.0", - "rc": "^1.2.7", - "simple-get": "^4.0.0", - "tar-fs": "^2.0.0", - "tunnel-agent": "^0.6.0" - }, - "bin": { - "prebuild-install": "bin.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "optional": true - }, - "node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz", - "integrity": "sha1-tKIRaBW94vTh6mAjVOjHVWUQemQ= sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "optional": true, - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, "node_modules/qs": { "version": "6.15.2", "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.2.tgz", @@ -3110,21 +2900,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "optional": true, - "dependencies": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "bin": { - "rc": "cli.js" - } - }, "node_modules/rc-config-loader": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/rc-config-loader/-/rc-config-loader-4.1.3.tgz", @@ -3148,20 +2923,6 @@ "node": ">=0.8" } }, - "node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "optional": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/readdirp": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", @@ -3276,12 +3037,6 @@ "node": ">=20.0.0" } }, - "node_modules/set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "optional": true - }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -3371,57 +3126,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/signal-exit": { - "version": "3.0.3", - "resolved": "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha1-oUEMLt2PB3sItOJTyOrPyvBXRhw= sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", - "optional": true - }, - "node_modules/simple-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", - "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "optional": true - }, - "node_modules/simple-get": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", - "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "optional": true, - "dependencies": { - "decompress-response": "^6.0.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } - }, "node_modules/slice-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", @@ -3454,15 +3158,6 @@ "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", "dev": true }, - "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==", - "optional": true, - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, "node_modules/string-argv": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz", @@ -3542,15 +3237,6 @@ "node": ">=8" } }, - "node_modules/strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/structured-source": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/structured-source/-/structured-source-4.0.0.tgz", @@ -3616,34 +3302,6 @@ "node": ">=10.0.0" } }, - "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==", - "optional": true, - "dependencies": { - "chownr": "^1.1.1", - "mkdirp-classic": "^0.5.2", - "pump": "^3.0.0", - "tar-stream": "^2.1.4" - } - }, - "node_modules/tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", - "optional": true, - "dependencies": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.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", @@ -3730,23 +3388,11 @@ "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, "node_modules/tunnel": { - "version": "0.0.6", - "resolved": "https://registry.yarnpkg.com/tunnel/-/tunnel-0.0.6.tgz", - "integrity": "sha1-cvExSzSlsZLbASMk3yzFh8pH+Sw= sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", - "engines": { - "node": ">=0.6.11 <=0.7.0 || >=0.7.3" - } - }, - "node_modules/tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "optional": true, - "dependencies": { - "safe-buffer": "^5.0.1" - }, + "version": "0.0.6", + "resolved": "https://registry.yarnpkg.com/tunnel/-/tunnel-0.0.6.tgz", + "integrity": "sha1-cvExSzSlsZLbASMk3yzFh8pH+Sw= sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", "engines": { - "node": "*" + "node": ">=0.6.11 <=0.7.0 || >=0.7.3" } }, "node_modules/typed-rest-client": { @@ -3800,12 +3446,6 @@ "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz", "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==" }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "optional": true - }, "node_modules/v8-compile-cache-lib": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", @@ -3839,15 +3479,6 @@ "node": ">= 8" } }, - "node_modules/wide-align": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", - "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", - "optional": true, - "dependencies": { - "string-width": "^1.0.2 || 2 || 3 || 4" - } - }, "node_modules/workerpool": { "version": "9.3.4", "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-9.3.4.tgz", @@ -3891,12 +3522,6 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "optional": true - }, "node_modules/wsl-utils": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/wsl-utils/-/wsl-utils-0.1.0.tgz", @@ -4355,6 +3980,98 @@ "resolve": "~1.22.2" } }, + "@napi-rs/keyring": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@napi-rs/keyring/-/keyring-1.3.0.tgz", + "integrity": "sha512-WrOw/bcXm0f9qHkumlT1QlArXSTWqaY9sunsDpOk+yCCorCKMxvWT/a3xko4EYHVdeZoh00yI2TydXn6eyICDA==", + "optional": true, + "requires": { + "@napi-rs/keyring-darwin-arm64": "1.3.0", + "@napi-rs/keyring-darwin-x64": "1.3.0", + "@napi-rs/keyring-freebsd-x64": "1.3.0", + "@napi-rs/keyring-linux-arm-gnueabihf": "1.3.0", + "@napi-rs/keyring-linux-arm64-gnu": "1.3.0", + "@napi-rs/keyring-linux-arm64-musl": "1.3.0", + "@napi-rs/keyring-linux-riscv64-gnu": "1.3.0", + "@napi-rs/keyring-linux-x64-gnu": "1.3.0", + "@napi-rs/keyring-linux-x64-musl": "1.3.0", + "@napi-rs/keyring-win32-arm64-msvc": "1.3.0", + "@napi-rs/keyring-win32-ia32-msvc": "1.3.0", + "@napi-rs/keyring-win32-x64-msvc": "1.3.0" + } + }, + "@napi-rs/keyring-darwin-arm64": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@napi-rs/keyring-darwin-arm64/-/keyring-darwin-arm64-1.3.0.tgz", + "integrity": "sha512-pl76hJvdYUBn6I24bXiOBMA9nbDapo3I5B+f3OorjDU4dUMSypXeKbOVehJe8fhgTiH24flMyTS3aAIy43xegQ==", + "optional": true + }, + "@napi-rs/keyring-darwin-x64": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@napi-rs/keyring-darwin-x64/-/keyring-darwin-x64-1.3.0.tgz", + "integrity": "sha512-YcJtEV5LA3cvA4z3BurgxH5IhTsW1JfIvcAAcqcecwk06Si9F9NqkxbZVIfDwQ8oRHgaBmT3zZJnLAotCrVahw==", + "optional": true + }, + "@napi-rs/keyring-freebsd-x64": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@napi-rs/keyring-freebsd-x64/-/keyring-freebsd-x64-1.3.0.tgz", + "integrity": "sha512-vlLf31TGhfRAaxLDBhg8b89ss0HHD/lyNmL5F3UjSaz5CUXElsJmKYq9fqA/B+cZKUEUcLHHGhF0I/CqcFdaVw==", + "optional": true + }, + "@napi-rs/keyring-linux-arm-gnueabihf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@napi-rs/keyring-linux-arm-gnueabihf/-/keyring-linux-arm-gnueabihf-1.3.0.tgz", + "integrity": "sha512-KiWdMMu/Inz/bHHIAGrnF7r54FZDYXuHO6UFF/rhIrshUsxbMG1Rl9lEymNtqqsVo927G0VYcb02FzWQ3iBQRQ==", + "optional": true + }, + "@napi-rs/keyring-linux-arm64-gnu": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@napi-rs/keyring-linux-arm64-gnu/-/keyring-linux-arm64-gnu-1.3.0.tgz", + "integrity": "sha512-eyKGpY40lm9Jvs1aD294XRH4y7+TlJM0YVAryZeXA6TX0mb4gMkxVXwSQv7MCwgah7raeUd0dKUb4BPAYIgcMg==", + "optional": true + }, + "@napi-rs/keyring-linux-arm64-musl": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@napi-rs/keyring-linux-arm64-musl/-/keyring-linux-arm64-musl-1.3.0.tgz", + "integrity": "sha512-iIK6JWHXAJqDrEyLY3TmswwloVyt2vj+04TZnew+uSJ9gnDO8EwRbp3/iw3LpWaXiDO7VomGO6y8I0Id8uBZSw==", + "optional": true + }, + "@napi-rs/keyring-linux-riscv64-gnu": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@napi-rs/keyring-linux-riscv64-gnu/-/keyring-linux-riscv64-gnu-1.3.0.tgz", + "integrity": "sha512-/PGqrwn6EwgtK6vccASSXJRfOSP4vN1F4ASsIQ+7MdrK6hNvAJ1FZPrIuD5gGGdxezo3F++To2Wq7DbuGIeuNQ==", + "optional": true + }, + "@napi-rs/keyring-linux-x64-gnu": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@napi-rs/keyring-linux-x64-gnu/-/keyring-linux-x64-gnu-1.3.0.tgz", + "integrity": "sha512-2PDK1WKWTu9lBGq9VvNEkSlQD3O7YwVpmnyN2M3cy4v7NJ/8gDMd9GXv3G+FVXN13uhp4gnnPBS+ScefmEeD2A==", + "optional": true + }, + "@napi-rs/keyring-linux-x64-musl": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@napi-rs/keyring-linux-x64-musl/-/keyring-linux-x64-musl-1.3.0.tgz", + "integrity": "sha512-oJ2HkX8YUo46QBkn0pG+HuIKQNqr523q6vBobCn+P95s4C4K6/kLBqHY/1bg5J4ap31DzsznhnFKcfBNBsjCnw==", + "optional": true + }, + "@napi-rs/keyring-win32-arm64-msvc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@napi-rs/keyring-win32-arm64-msvc/-/keyring-win32-arm64-msvc-1.3.0.tgz", + "integrity": "sha512-tOd3c/uAaeoE4ycVlmAdSvygz0Zt3zdca6Y7gokBeIbaRDWpjDIUOpU3MvML59XAaqyuKGsVVu0F/DZb1lHPmw==", + "optional": true + }, + "@napi-rs/keyring-win32-ia32-msvc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@napi-rs/keyring-win32-ia32-msvc/-/keyring-win32-ia32-msvc-1.3.0.tgz", + "integrity": "sha512-sPSqeAFZMGqP1R++M2JTza7GQJJ/TpCo6JU6Vcd4jnebvOaEDs9b7eipakU1PJdSvhpC2yXMCNRk9gXfrhuwHQ==", + "optional": true + }, + "@napi-rs/keyring-win32-x64-msvc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@napi-rs/keyring-win32-x64-msvc/-/keyring-win32-x64-msvc-1.3.0.tgz", + "integrity": "sha512-4DnCWXwDc0HRKwyRlG5y0VhKZW2tNRQfKKfyj6IX/KWfDNyq9hn4n+GL1auyDcOO/v8PwnhmYo2+rOOqCkvvOg==", + "optional": true + }, "@pkgjs/parseargs": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", @@ -4860,54 +4577,6 @@ "color-convert": "^2.0.1" } }, - "aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", - "optional": true - }, - "are-we-there-yet": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz", - "integrity": "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==", - "optional": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "optional": true, - "requires": { - "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" - } - }, - "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==", - "optional": true - }, - "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==", - "optional": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, "arg": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", @@ -4944,12 +4613,6 @@ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", "dev": true }, - "base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "optional": true - }, "binaryextensions": { "version": "6.11.0", "resolved": "https://registry.npmjs.org/binaryextensions/-/binaryextensions-6.11.0.tgz", @@ -4958,17 +4621,6 @@ "editions": "^6.21.0" } }, - "bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "optional": true, - "requires": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, "boundary": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/boundary/-/boundary-2.0.0.tgz", @@ -4995,16 +4647,6 @@ "integrity": "sha1-uqVZ7hTO1zRSIputcyZGfGH6vWA= sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", "dev": true }, - "buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "optional": true, - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, "buffer-crc32": { "version": "0.2.13", "resolved": "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz", @@ -5059,12 +4701,6 @@ "readdirp": "^4.0.1" } }, - "chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "optional": true - }, "cliui": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", @@ -5081,12 +4717,6 @@ "resolved": "https://registry.npmjs.org/cockatiel/-/cockatiel-3.1.2.tgz", "integrity": "sha512-5yARKww0dWyWg2/3xZeXgoxjHLwpVqFptj9Zy7qioJ6+/L0ARM184sgMUrQDjxw7ePJWlGhV998mKhzrxT0/Kg==" }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "optional": true - }, "color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -5113,18 +4743,6 @@ "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==" }, - "console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", - "optional": true - }, - "core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "optional": true - }, "create-require": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", @@ -5150,21 +4768,6 @@ "ms": "^2.1.3" } }, - "decompress-response": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", - "optional": true, - "requires": { - "mimic-response": "^3.1.0" - } - }, - "deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "optional": true - }, "default-browser": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.5.0.tgz", @@ -5189,18 +4792,6 @@ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" }, - "delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", - "optional": true - }, - "detect-libc": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.0.tgz", - "integrity": "sha512-S55LzUl8HUav8l9E2PBTlC5PAJrHK7tkM+XXFGD+fbsbkTzhCpG6K05LxJcUOEWzMa4v6ptcMZ9s3fOdJDu0Zw==", - "optional": true - }, "diff": { "version": "9.0.0", "resolved": "https://registry.npmjs.org/diff/-/diff-9.0.0.tgz", @@ -5244,15 +4835,6 @@ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha1-WuZKX0UFe682JuwU2gyl5LJDHrA= sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "optional": true, - "requires": { - "once": "^1.4.0" - } - }, "entities": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/entities/-/entities-8.0.0.tgz", @@ -5298,12 +4880,6 @@ "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", "dev": true }, - "expand-template": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", - "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", - "optional": true - }, "fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -5368,12 +4944,6 @@ "mime-types": "^2.1.35" } }, - "fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", - "optional": true - }, "fs-extra": { "version": "11.3.4", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.4.tgz", @@ -5390,50 +4960,6 @@ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==" }, - "gauge": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", - "optional": true, - "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "optional": true - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "optional": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "optional": true, - "requires": { - "ansi-regex": "^2.0.0" - } - } - } - }, "get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", @@ -5466,12 +4992,6 @@ "es-object-atoms": "^1.0.0" } }, - "github-from-package": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", - "integrity": "sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4=", - "optional": true - }, "glob": { "version": "13.0.6", "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.6.tgz", @@ -5511,12 +5031,6 @@ "has-symbols": "^1.0.3" } }, - "has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", - "optional": true - }, "hasown": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.4.tgz", @@ -5557,30 +5071,12 @@ "debug": "4" } }, - "ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "optional": true - }, "import-lazy": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz", "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==", "dev": true }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "optional": true - }, - "ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "optional": true - }, "is-core-module": { "version": "2.16.1", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", @@ -5595,15 +5091,6 @@ "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==" }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "optional": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, "is-inside-container": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", @@ -5632,12 +5119,6 @@ "is-inside-container": "^1.0.0" } }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "optional": true - }, "isexe": { "version": "2.0.0", "resolved": "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz", @@ -5729,16 +5210,6 @@ "safe-buffer": "^5.0.1" } }, - "keytar": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/keytar/-/keytar-7.8.0.tgz", - "integrity": "sha512-mR+BqtAOIW8j+T5FtLVyckCbvROWQD+4FzPeFMuk5njEZkXLpVPCGF26Y3mTyxMAAL1XCfswR7S6kIf+THSRFA==", - "optional": true, - "requires": { - "node-addon-api": "^4.3.0", - "prebuild-install": "^7.0.1" - } - }, "leven": { "version": "3.1.0", "resolved": "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz", @@ -5850,12 +5321,6 @@ "mime-db": "1.52.0" } }, - "mimic-response": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", - "optional": true - }, "minimatch": { "version": "10.2.3", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.3.tgz", @@ -5864,23 +5329,11 @@ "brace-expansion": "^5.0.2" } }, - "minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", - "optional": true - }, "minipass": { "version": "7.1.3", "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==" }, - "mkdirp-classic": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", - "optional": true - }, "mocha": { "version": "11.7.5", "resolved": "https://registry.npmjs.org/mocha/-/mocha-11.7.5.tgz", @@ -6001,65 +5454,11 @@ "resolved": "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz", "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=" }, - "napi-build-utils": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", - "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==", - "optional": true - }, - "node-abi": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.8.0.tgz", - "integrity": "sha512-tzua9qWWi7iW4I42vUPKM+SfaF0vQSLAm4yO5J83mSwB7GeoWrDKC/K+8YCnYNwqP5duwazbw2X9l4m8SC2cUw==", - "optional": true, - "requires": { - "semver": "^7.3.5" - } - }, - "node-addon-api": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz", - "integrity": "sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==", - "optional": true - }, - "npmlog": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", - "optional": true, - "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "optional": true - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "optional": true - }, "object-inspect": { "version": "1.13.4", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==" }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "optional": true, - "requires": { - "wrappy": "1" - } - }, "open": { "version": "10.2.0", "resolved": "https://registry.npmjs.org/open/-/open-10.2.0.tgz", @@ -6169,43 +5568,6 @@ "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==" }, - "prebuild-install": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.0.1.tgz", - "integrity": "sha512-QBSab31WqkyxpnMWQxubYAHR5S9B2+r81ucocew34Fkl98FhvKIF50jIJnNOBmAZfyNV7vE5T6gd3hTVWgY6tg==", - "optional": true, - "requires": { - "detect-libc": "^2.0.0", - "expand-template": "^2.0.3", - "github-from-package": "0.0.0", - "minimist": "^1.2.3", - "mkdirp-classic": "^0.5.3", - "napi-build-utils": "^1.0.1", - "node-abi": "^3.3.0", - "npmlog": "^4.0.1", - "pump": "^3.0.0", - "rc": "^1.2.7", - "simple-get": "^4.0.0", - "tar-fs": "^2.0.0", - "tunnel-agent": "^0.6.0" - } - }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "optional": true - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz", - "integrity": "sha1-tKIRaBW94vTh6mAjVOjHVWUQemQ= sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "optional": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, "qs": { "version": "6.15.2", "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.2.tgz", @@ -6214,18 +5576,6 @@ "side-channel": "^1.1.0" } }, - "rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "optional": true, - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - } - }, "rc-config-loader": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/rc-config-loader/-/rc-config-loader-4.1.3.tgz", @@ -6245,17 +5595,6 @@ "mute-stream": "~0.0.4" } }, - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "optional": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, "readdirp": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", @@ -6313,12 +5652,6 @@ "integrity": "sha512-F4LcB0UqUl1zErq+1nYEEzSHJnIwb3AF2XWB94b+afhrekOUijwooAYqFyRbjYkm2PAKBabx6oYv/xDxNi8IBw==", "dev": true }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "optional": true - }, "shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -6378,29 +5711,6 @@ "side-channel-map": "^1.0.1" } }, - "signal-exit": { - "version": "3.0.3", - "resolved": "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha1-oUEMLt2PB3sItOJTyOrPyvBXRhw= sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", - "optional": true - }, - "simple-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", - "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", - "optional": true - }, - "simple-get": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", - "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", - "optional": true, - "requires": { - "decompress-response": "^6.0.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } - }, "slice-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", @@ -6424,15 +5734,6 @@ "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", "dev": true }, - "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==", - "optional": true, - "requires": { - "safe-buffer": "~5.2.0" - } - }, "string-argv": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz", @@ -6492,12 +5793,6 @@ "ansi-regex": "^5.0.1" } }, - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "optional": true - }, "structured-source": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/structured-source/-/structured-source-4.0.0.tgz", @@ -6541,31 +5836,6 @@ "strip-ansi": "^6.0.1" } }, - "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==", - "optional": true, - "requires": { - "chownr": "^1.1.1", - "mkdirp-classic": "^0.5.2", - "pump": "^3.0.0", - "tar-stream": "^2.1.4" - } - }, - "tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", - "optional": true, - "requires": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - } - }, "terminal-link": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-4.0.0.tgz", @@ -6619,15 +5889,6 @@ "resolved": "https://registry.yarnpkg.com/tunnel/-/tunnel-0.0.6.tgz", "integrity": "sha1-cvExSzSlsZLbASMk3yzFh8pH+Sw= sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==" }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "optional": true, - "requires": { - "safe-buffer": "^5.0.1" - } - }, "typed-rest-client": { "version": "1.8.4", "resolved": "https://registry.yarnpkg.com/typed-rest-client/-/typed-rest-client-1.8.4.tgz", @@ -6666,12 +5927,6 @@ "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz", "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==" }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "optional": true - }, "v8-compile-cache-lib": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", @@ -6692,15 +5947,6 @@ "isexe": "^2.0.0" } }, - "wide-align": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", - "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", - "optional": true, - "requires": { - "string-width": "^1.0.2 || 2 || 3 || 4" - } - }, "workerpool": { "version": "9.3.4", "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-9.3.4.tgz", @@ -6729,12 +5975,6 @@ "strip-ansi": "^6.0.0" } }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "optional": true - }, "wsl-utils": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/wsl-utils/-/wsl-utils-0.1.0.tgz", diff --git a/package.json b/package.json index f5fd76f8..2374f9fa 100644 --- a/package.json +++ b/package.json @@ -83,7 +83,7 @@ "typescript": "~5.9.0" }, "optionalDependencies": { - "keytar": "^7.7.0" + "@napi-rs/keyring": "^1.3.0" }, "mocha": { "require": [ diff --git a/src/store.ts b/src/store.ts index 3b12007b..e0d4ff76 100644 --- a/src/store.ts +++ b/src/store.ts @@ -81,7 +81,7 @@ export class FileStore implements IStore { export class KeytarStore implements IStore { static async open(serviceName = 'vscode-vsce'): Promise { - const keytar = await import('keytar').then(module => module.default); + const keytar = require('@napi-rs/keyring/keytar.js') as IKeytar; const creds = await keytar.findCredentials(serviceName); return new KeytarStore( From 1b6ea2e3e2021eb83fc1965c23bccfcbeb82d110 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Fri, 21 Aug 2026 14:59:45 -0700 Subject: [PATCH 8/8] Make @napi-rs/keyring a required dependency --- package-lock.json | 4 +--- package.json | 4 +--- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/package-lock.json b/package-lock.json index e37cdb7b..5b5b264a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,6 +10,7 @@ "license": "MIT", "dependencies": { "@azure/identity": "^4.1.0", + "@napi-rs/keyring": "^1.3.0", "@secretlint/node": "^10.1.2", "@secretlint/secretlint-rule-no-dotenv": "^10.1.2", "@secretlint/secretlint-rule-preset-recommend": "^10.1.2", @@ -57,9 +58,6 @@ }, "engines": { "node": ">= 20.19" - }, - "optionalDependencies": { - "@napi-rs/keyring": "^1.3.0" } }, "node_modules/@azu/format-text": { diff --git a/package.json b/package.json index 2374f9fa..cc6e773f 100644 --- a/package.json +++ b/package.json @@ -40,6 +40,7 @@ }, "dependencies": { "@azure/identity": "^4.1.0", + "@napi-rs/keyring": "^1.3.0", "@secretlint/node": "^10.1.2", "@secretlint/secretlint-rule-no-dotenv": "^10.1.2", "@secretlint/secretlint-rule-preset-recommend": "^10.1.2", @@ -82,9 +83,6 @@ "ts-node": "^10.9.1", "typescript": "~5.9.0" }, - "optionalDependencies": { - "@napi-rs/keyring": "^1.3.0" - }, "mocha": { "require": [ "ts-node/register"