diff --git a/.config/guardian/.gdnbaselines b/.config/guardian/.gdnbaselines index ad1c9aa80..4db404c41 100644 --- a/.config/guardian/.gdnbaselines +++ b/.config/guardian/.gdnbaselines @@ -1,8 +1,8 @@ { - "hydrated": true, + "hydrated": false, "properties": { "helpUri": "https://eng.ms/docs/microsoft-security/security/azure-security/cloudai-security-fundamentals-engineering/security-integration/guardian-wiki/microsoft-guardian/general/baselines", - "hydrationStatus": "This file contains identifying data. It is **NOT** safe to check into your repo. To dehydrate this file, run `guardian dehydrate --help` and follow the guidance." + "hydrationStatus": "This file does not contain identifying data. It is safe to check into your repo. To hydrate this file with identifying data, run `guardian hydrate --help` and follow the guidance." }, "version": "1.0.0", "baselines": { @@ -16,13 +16,9 @@ "26445e3e484940d2d58c2ffc32ab3895fca4b1589d66e2f2dee2fa01f2c479fb": { "signature": "26445e3e484940d2d58c2ffc32ab3895fca4b1589d66e2f2dee2fa01f2c479fb", "alternativeSignatures": [], - "target": "test/omnisharp/omnisharpUnitTests/testAssets/private.pem", - "line": 1, "memberOf": [ "default" ], - "tool": "credscan", - "ruleId": "CSCAN-GENERAL0020", "createdDate": "2024-09-09 19:35:36Z" } } diff --git a/.eslintrc.js b/.eslintrc.js index 050209c7f..01e9bb373 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -4,7 +4,7 @@ module.exports = { }, extends: [ "eslint:recommended", - "plugin:@typescript-eslint/recommended" + "plugin:@typescript-eslint/recommended", ], parser: "@typescript-eslint/parser", parserOptions: { @@ -33,6 +33,7 @@ module.exports = { ], "@typescript-eslint/no-namespace": "off", "@typescript-eslint/promise-function-async": "error", + "@typescript-eslint/no-floating-promises": "error", "prefer-promise-reject-errors": "error", "curly": "error", "prettier/prettier": [ "error", { "endOfLine": "auto" } ], diff --git a/CHANGELOG.md b/CHANGELOG.md index 94c7edc5b..88db18f42 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,14 @@ - Debug from .csproj and .sln [#5876](https://github.com/dotnet/vscode-csharp/issues/5876) # 2.50.x +* Update Roslyn to 4.13.0-1.24477.2 (PR: [#<>](https://github.com/dotnet/vscode-csharp/pull/<>)) + * Use MSBuild globs to determine which file changes are relevant (PR: [#75139](https://github.com/dotnet/roslyn/pull/75139)) + * Allow in DocComments to render as a block in Hover response (PR: [#75215](https://github.com/dotnet/roslyn/pull/75215)) + * Ignore irrelevant exceptions when reporting LSP server NFW (PR: [#75150](https://github.com/dotnet/roslyn/pull/75150)) +* Bumped xamltools to 17.12.35326.17 (PR: [#7610](https://github.com/dotnet/vscode-csharp/pull/7610)) +* Do not remove documents if they are not files (PR: [#7607](https://github.com/dotnet/vscode-csharp/pull/7607)) +* Support copilot registerRelatedFilesProvider API (PR: [#7605](https://github.com/dotnet/vscode-csharp/pull/7605)) +* Update Debugger packages to v2.50.0 (PR: [#7597](https://github.com/dotnet/vscode-csharp/pull/7597)) # 2.49.x * Update Razor to 9.0.0-preview.24467.1 diff --git a/azure-pipelines-official.yml b/azure-pipelines-official.yml index 6049657c2..05e500614 100644 --- a/azure-pipelines-official.yml +++ b/azure-pipelines-official.yml @@ -50,6 +50,10 @@ extends: tsa: enabled: true configFile: '$(Build.SourcesDirectory)/.config/guardian/TSAConfig.gdntsa' + codeSignValidation: + # VCTools dlls are signed with the Phone cert, which isn't accepted by the CodeSign policy. + # Can be removed once https://dev.azure.com/devdiv/DevDiv/_workitems/edit/2093995 is fixed. + additionalTargetsGlobPattern: '-|**\msdia140.dll;-|**\msvc*.dll;-|**\vcruntime*.dll' customBuildTags: - ES365AIMigrationTooling stages: diff --git a/l10n/bundle.l10n.json b/l10n/bundle.l10n.json index d665bdbbd..5cd775f7c 100644 --- a/l10n/bundle.l10n.json +++ b/l10n/bundle.l10n.json @@ -29,13 +29,13 @@ "Can't parse envFile {0} because of {1}": "Can't parse envFile {0} because of {1}", "Open envFile": "Open envFile", "Yes": "Yes", - "Not Now": "Not Now", - "More Information": "More Information", - "The selected launch configuration is configured to launch a web browser but no trusted development certificate was found. Create a trusted self-signed certificate?": "The selected launch configuration is configured to launch a web browser but no trusted development certificate was found. Create a trusted self-signed certificate?", "Self-signed certificate sucessfully {0}": "Self-signed certificate sucessfully {0}", "Couldn't create self-signed certificate. {0}\ncode: {1}\nstdout: {2}": "Couldn't create self-signed certificate. {0}\ncode: {1}\nstdout: {2}", "Show Output": "Show Output", "Couldn't create self-signed certificate. See output for more information.": "Couldn't create self-signed certificate. See output for more information.", + "Not Now": "Not Now", + "More Information": "More Information", + "The selected launch configuration is configured to launch a web browser but no trusted development certificate was found. Create a trusted self-signed certificate?": "The selected launch configuration is configured to launch a web browser but no trusted development certificate was found. Create a trusted self-signed certificate?", "No executable projects": "No executable projects", "Select the project to launch": "Select the project to launch", "Invalid project index": "Invalid project index", @@ -140,8 +140,8 @@ "OmniSharp requires a complete install of Mono (including MSBuild) to provide language services when `omnisharp.useModernNet` is disabled in Settings. Please install the latest Mono and restart.": "OmniSharp requires a complete install of Mono (including MSBuild) to provide language services when `omnisharp.useModernNet` is disabled in Settings. Please install the latest Mono and restart.", "Download Mono": "Download Mono", "Open settings": "Open settings", - "dotnet.server.useOmnisharp option has changed. Please reload the window to apply the change": "dotnet.server.useOmnisharp option has changed. Please reload the window to apply the change", "Reload Window": "Reload Window", + "dotnet.server.useOmnisharp option has changed. Please reload the window to apply the change": "dotnet.server.useOmnisharp option has changed. Please reload the window to apply the change", "C# configuration has changed. Would you like to relaunch the Language Server with your changes?": "C# configuration has changed. Would you like to relaunch the Language Server with your changes?", "Restart Language Server": "Restart Language Server", "project.json is no longer a supported project format for .NET Core applications.": "project.json is no longer a supported project format for .NET Core applications.", diff --git a/package-lock.json b/package-lock.json index c290c8ef6..c77e54d1f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2279,62 +2279,113 @@ } }, "node_modules/@octokit/app": { - "version": "14.0.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/app/-/app-14.0.0.tgz", - "integrity": "sha512-g/zDXttroZ9Se08shK0d0d/j0cgSA+h4WV7qGUevNEM0piNBkIlfb4Fm6bSwCNAZhNf72mBgERmYOoxicPkqdw==", + "version": "14.1.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/app/-/app-14.1.0.tgz", + "integrity": "sha1-LUkdxwdGdzuD9h7fXFaBfdfThUs=", "dev": true, + "license": "MIT", "dependencies": { "@octokit/auth-app": "^6.0.0", "@octokit/auth-unauthenticated": "^5.0.0", "@octokit/core": "^5.0.0", "@octokit/oauth-app": "^6.0.0", - "@octokit/plugin-paginate-rest": "^8.0.0", - "@octokit/types": "^11.1.0", - "@octokit/webhooks": "^12.0.1" + "@octokit/plugin-paginate-rest": "^9.0.0", + "@octokit/types": "^12.0.0", + "@octokit/webhooks": "^12.0.4" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@octokit/app/node_modules/@octokit/openapi-types": { + "version": "20.0.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/openapi-types/-/openapi-types-20.0.0.tgz", + "integrity": "sha1-nsLaoAkO64Ze4UdjbgwA9zeQxuU=", + "dev": true, + "license": "MIT" + }, + "node_modules/@octokit/app/node_modules/@octokit/plugin-paginate-rest": { + "version": "9.2.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-9.2.1.tgz", + "integrity": "sha1-LiovD1LJpLHaGjqhfavjxFm55AE=", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/types": "^12.6.0" }, "engines": { "node": ">= 18" + }, + "peerDependencies": { + "@octokit/core": "5" + } + }, + "node_modules/@octokit/app/node_modules/@octokit/types": { + "version": "12.6.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/types/-/types-12.6.0.tgz", + "integrity": "sha1-gQD7nu7f4IOq5mRzvZexW2Ku3LI=", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/openapi-types": "^20.0.0" } }, "node_modules/@octokit/auth-app": { - "version": "6.0.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/auth-app/-/auth-app-6.0.0.tgz", - "integrity": "sha512-OKct7Rukf3g9DjpzcpdacQsdmd6oPrJ7fZND22JkjzhDvfhttUOnmh+qPS4kHhaNNyTxqSThnfrUWvkqNLd1nw==", + "version": "6.1.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/auth-app/-/auth-app-6.1.2.tgz", + "integrity": "sha1-Gf8dfy/6XtYw1Gj6RTMOpZs5tHw=", "dev": true, + "license": "MIT", "dependencies": { - "@octokit/auth-oauth-app": "^7.0.0", - "@octokit/auth-oauth-user": "^4.0.0", - "@octokit/request": "^8.0.2", - "@octokit/request-error": "^5.0.0", - "@octokit/types": "^11.0.0", + "@octokit/auth-oauth-app": "^7.1.0", + "@octokit/auth-oauth-user": "^4.1.0", + "@octokit/request": "^8.3.1", + "@octokit/request-error": "^5.1.0", + "@octokit/types": "^13.1.0", "deprecation": "^2.3.1", "lru-cache": "^10.0.0", - "universal-github-app-jwt": "^1.1.1", + "universal-github-app-jwt": "^1.1.2", "universal-user-agent": "^6.0.0" }, "engines": { "node": ">= 18" } }, - "node_modules/@octokit/auth-app/node_modules/lru-cache": { - "version": "10.0.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/lru-cache/-/lru-cache-10.0.0.tgz", - "integrity": "sha512-svTf/fzsKHffP42sujkO/Rjs37BCIsQVRCeNYIm9WN8rgT7ffoUnRtZCqU+6BqcSBdv8gwJeTz8knJpgACeQMw==", + "node_modules/@octokit/auth-app/node_modules/@octokit/openapi-types": { + "version": "22.2.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/openapi-types/-/openapi-types-22.2.0.tgz", + "integrity": "sha1-dap9zUQIIdmd72pgtfAUIHrklo4=", "dev": true, - "engines": { - "node": "14 || >=16.14" + "license": "MIT" + }, + "node_modules/@octokit/auth-app/node_modules/@octokit/types": { + "version": "13.5.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/types/-/types-13.5.1.tgz", + "integrity": "sha1-VoWpHylRld3/85cjsJOw35YJzm4=", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/openapi-types": "^22.2.0" } }, + "node_modules/@octokit/auth-app/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha1-QQ/IoXtw5ZgBPfJXwkRrfzOD8Rk=", + "dev": true, + "license": "ISC" + }, "node_modules/@octokit/auth-oauth-app": { - "version": "7.0.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/auth-oauth-app/-/auth-oauth-app-7.0.0.tgz", - "integrity": "sha512-8JvJEXGoEqrbzLwt3SwIUvkDd+1wrM8up0KawvDIElB8rbxPbvWppGO0SLKAWSJ0q8ILcVq+mWck6pDcZ3a9KA==", + "version": "7.1.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/auth-oauth-app/-/auth-oauth-app-7.1.0.tgz", + "integrity": "sha1-0PdOGevVpIKct4DBB87dbIlPIPw=", "dev": true, + "license": "MIT", "dependencies": { - "@octokit/auth-oauth-device": "^6.0.0", - "@octokit/auth-oauth-user": "^4.0.0", - "@octokit/request": "^8.0.2", - "@octokit/types": "^11.0.0", + "@octokit/auth-oauth-device": "^6.1.0", + "@octokit/auth-oauth-user": "^4.1.0", + "@octokit/request": "^8.3.1", + "@octokit/types": "^13.0.0", "@types/btoa-lite": "^1.0.0", "btoa-lite": "^1.0.0", "universal-user-agent": "^6.0.0" @@ -2343,31 +2394,67 @@ "node": ">= 18" } }, + "node_modules/@octokit/auth-oauth-app/node_modules/@octokit/openapi-types": { + "version": "22.2.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/openapi-types/-/openapi-types-22.2.0.tgz", + "integrity": "sha1-dap9zUQIIdmd72pgtfAUIHrklo4=", + "dev": true, + "license": "MIT" + }, + "node_modules/@octokit/auth-oauth-app/node_modules/@octokit/types": { + "version": "13.5.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/types/-/types-13.5.1.tgz", + "integrity": "sha1-VoWpHylRld3/85cjsJOw35YJzm4=", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/openapi-types": "^22.2.0" + } + }, "node_modules/@octokit/auth-oauth-device": { - "version": "6.0.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/auth-oauth-device/-/auth-oauth-device-6.0.0.tgz", - "integrity": "sha512-Zgf/LKhwWk54rJaTGYVYtbKgUty+ouil6VQeRd+pCw7Gd0ECoSWaZuHK6uDGC/HtnWHjpSWFhzxPauDoHcNRtg==", + "version": "6.1.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/auth-oauth-device/-/auth-oauth-device-6.1.0.tgz", + "integrity": "sha1-+GghOj2wX+J+aNH8YHUCoyI3ndk=", "dev": true, + "license": "MIT", "dependencies": { - "@octokit/oauth-methods": "^4.0.0", - "@octokit/request": "^8.0.0", - "@octokit/types": "^11.0.0", + "@octokit/oauth-methods": "^4.1.0", + "@octokit/request": "^8.3.1", + "@octokit/types": "^13.0.0", "universal-user-agent": "^6.0.0" }, "engines": { "node": ">= 18" } }, + "node_modules/@octokit/auth-oauth-device/node_modules/@octokit/openapi-types": { + "version": "22.2.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/openapi-types/-/openapi-types-22.2.0.tgz", + "integrity": "sha1-dap9zUQIIdmd72pgtfAUIHrklo4=", + "dev": true, + "license": "MIT" + }, + "node_modules/@octokit/auth-oauth-device/node_modules/@octokit/types": { + "version": "13.5.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/types/-/types-13.5.1.tgz", + "integrity": "sha1-VoWpHylRld3/85cjsJOw35YJzm4=", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/openapi-types": "^22.2.0" + } + }, "node_modules/@octokit/auth-oauth-user": { - "version": "4.0.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/auth-oauth-user/-/auth-oauth-user-4.0.0.tgz", - "integrity": "sha512-VOm5aIkVGHaOhIvsF/4YmSjoYDzzrKbbYkdSEO0KqHK7I8SlO3ZndSikQ1fBlNPUEH0ve2BOTxLrVvI1qBf9/Q==", + "version": "4.1.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/auth-oauth-user/-/auth-oauth-user-4.1.0.tgz", + "integrity": "sha1-MuVSn4vZYa+YOaH4xqsMitIYTu4=", "dev": true, + "license": "MIT", "dependencies": { - "@octokit/auth-oauth-device": "^6.0.0", - "@octokit/oauth-methods": "^4.0.0", - "@octokit/request": "^8.0.2", - "@octokit/types": "^11.0.0", + "@octokit/auth-oauth-device": "^6.1.0", + "@octokit/oauth-methods": "^4.1.0", + "@octokit/request": "^8.3.1", + "@octokit/types": "^13.0.0", "btoa-lite": "^1.0.0", "universal-user-agent": "^6.0.0" }, @@ -2375,6 +2462,23 @@ "node": ">= 18" } }, + "node_modules/@octokit/auth-oauth-user/node_modules/@octokit/openapi-types": { + "version": "22.2.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/openapi-types/-/openapi-types-22.2.0.tgz", + "integrity": "sha1-dap9zUQIIdmd72pgtfAUIHrklo4=", + "dev": true, + "license": "MIT" + }, + "node_modules/@octokit/auth-oauth-user/node_modules/@octokit/types": { + "version": "13.5.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/types/-/types-13.5.1.tgz", + "integrity": "sha1-VoWpHylRld3/85cjsJOw35YJzm4=", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/openapi-types": "^22.2.0" + } + }, "node_modules/@octokit/auth-token": { "version": "4.0.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/auth-token/-/auth-token-4.0.0.tgz", @@ -2384,18 +2488,36 @@ } }, "node_modules/@octokit/auth-unauthenticated": { - "version": "5.0.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/auth-unauthenticated/-/auth-unauthenticated-5.0.0.tgz", - "integrity": "sha512-AjOI6FNB2dweJ85p6rf7D4EhE4y6VBcwYfX/7KJkR5Q9fD9ET6NABAjajUTSNFfCxmNIaQgISggZ3pkgwtTqsA==", + "version": "5.0.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/auth-unauthenticated/-/auth-unauthenticated-5.0.1.tgz", + "integrity": "sha1-2AMiEXKDMwaLLge1OZfCnlmgNQc=", "dev": true, + "license": "MIT", "dependencies": { "@octokit/request-error": "^5.0.0", - "@octokit/types": "^11.0.0" + "@octokit/types": "^12.0.0" }, "engines": { "node": ">= 18" } }, + "node_modules/@octokit/auth-unauthenticated/node_modules/@octokit/openapi-types": { + "version": "20.0.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/openapi-types/-/openapi-types-20.0.0.tgz", + "integrity": "sha1-nsLaoAkO64Ze4UdjbgwA9zeQxuU=", + "dev": true, + "license": "MIT" + }, + "node_modules/@octokit/auth-unauthenticated/node_modules/@octokit/types": { + "version": "12.6.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/types/-/types-12.6.0.tgz", + "integrity": "sha1-gQD7nu7f4IOq5mRzvZexW2Ku3LI=", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/openapi-types": "^20.0.0" + } + }, "node_modules/@octokit/core": { "version": "5.0.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/core/-/core-5.0.0.tgz", @@ -2414,24 +2536,31 @@ } }, "node_modules/@octokit/endpoint": { - "version": "9.0.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/endpoint/-/endpoint-9.0.0.tgz", - "integrity": "sha512-szrQhiqJ88gghWY2Htt8MqUDO6++E/EIXqJ2ZEp5ma3uGS46o7LZAzSLt49myB7rT+Hfw5Y6gO3LmOxGzHijAQ==", + "version": "9.0.5", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/endpoint/-/endpoint-9.0.5.tgz", + "integrity": "sha1-5sDuaE4wdhTAL8asEidMUNpGXEQ=", + "license": "MIT", "dependencies": { - "@octokit/types": "^11.0.0", - "is-plain-object": "^5.0.0", + "@octokit/types": "^13.1.0", "universal-user-agent": "^6.0.0" }, "engines": { "node": ">= 18" } }, - "node_modules/@octokit/endpoint/node_modules/is-plain-object": { - "version": "5.0.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", - "engines": { - "node": ">=0.10.0" + "node_modules/@octokit/endpoint/node_modules/@octokit/openapi-types": { + "version": "22.2.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/openapi-types/-/openapi-types-22.2.0.tgz", + "integrity": "sha1-dap9zUQIIdmd72pgtfAUIHrklo4=", + "license": "MIT" + }, + "node_modules/@octokit/endpoint/node_modules/@octokit/types": { + "version": "13.5.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/types/-/types-13.5.1.tgz", + "integrity": "sha1-VoWpHylRld3/85cjsJOw35YJzm4=", + "license": "MIT", + "dependencies": { + "@octokit/openapi-types": "^22.2.0" } }, "node_modules/@octokit/graphql": { @@ -2448,10 +2577,11 @@ } }, "node_modules/@octokit/oauth-app": { - "version": "6.0.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/oauth-app/-/oauth-app-6.0.0.tgz", - "integrity": "sha512-bNMkS+vJ6oz2hCyraT9ZfTpAQ8dZNqJJQVNaKjPLx4ue5RZiFdU1YWXguOPR8AaSHS+lKe+lR3abn2siGd+zow==", + "version": "6.1.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/oauth-app/-/oauth-app-6.1.0.tgz", + "integrity": "sha1-IsJ29q0jZMaZmDe/3V2cEJKDhyY=", "dev": true, + "license": "MIT", "dependencies": { "@octokit/auth-oauth-app": "^7.0.0", "@octokit/auth-oauth-user": "^4.0.0", @@ -2469,28 +2599,47 @@ "node_modules/@octokit/oauth-authorization-url": { "version": "6.0.2", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/oauth-authorization-url/-/oauth-authorization-url-6.0.2.tgz", - "integrity": "sha512-CdoJukjXXxqLNK4y/VOiVzQVjibqoj/xHgInekviUJV73y/BSIcwvJ/4aNHPBPKcPWFnd4/lO9uqRV65jXhcLA==", + "integrity": "sha1-zILKKcxeM5yZIWcvOfKz9cjrbvI=", "dev": true, + "license": "MIT", "engines": { "node": ">= 18" } }, "node_modules/@octokit/oauth-methods": { - "version": "4.0.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/oauth-methods/-/oauth-methods-4.0.0.tgz", - "integrity": "sha512-dqy7BZLfLbi3/8X8xPKUKZclMEK9vN3fK5WF3ortRvtplQTszFvdAGbTo71gGLO+4ZxspNiLjnqdd64Chklf7w==", + "version": "4.1.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/oauth-methods/-/oauth-methods-4.1.0.tgz", + "integrity": "sha1-FAOsnE1OJ3ki/dxMifqKeC+PeRs=", "dev": true, + "license": "MIT", "dependencies": { "@octokit/oauth-authorization-url": "^6.0.2", - "@octokit/request": "^8.0.2", - "@octokit/request-error": "^5.0.0", - "@octokit/types": "^11.0.0", + "@octokit/request": "^8.3.1", + "@octokit/request-error": "^5.1.0", + "@octokit/types": "^13.0.0", "btoa-lite": "^1.0.0" }, "engines": { "node": ">= 18" } }, + "node_modules/@octokit/oauth-methods/node_modules/@octokit/openapi-types": { + "version": "22.2.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/openapi-types/-/openapi-types-22.2.0.tgz", + "integrity": "sha1-dap9zUQIIdmd72pgtfAUIHrklo4=", + "dev": true, + "license": "MIT" + }, + "node_modules/@octokit/oauth-methods/node_modules/@octokit/types": { + "version": "13.5.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/types/-/types-13.5.1.tgz", + "integrity": "sha1-VoWpHylRld3/85cjsJOw35YJzm4=", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/openapi-types": "^22.2.0" + } + }, "node_modules/@octokit/openapi-types": { "version": "18.0.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/openapi-types/-/openapi-types-18.0.0.tgz", @@ -2565,12 +2714,13 @@ } }, "node_modules/@octokit/plugin-throttling": { - "version": "7.0.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/plugin-throttling/-/plugin-throttling-7.0.0.tgz", - "integrity": "sha512-KL2k/d0uANc8XqP5S64YcNFCudR3F5AaKO39XWdUtlJIjT9Ni79ekWJ6Kj5xvAw87udkOMEPcVf9xEge2+ahew==", + "version": "8.2.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/plugin-throttling/-/plugin-throttling-8.2.0.tgz", + "integrity": "sha1-nsPqLje5L6xj8GkR0MgUG0bcSUE=", "dev": true, + "license": "MIT", "dependencies": { - "@octokit/types": "^11.0.0", + "@octokit/types": "^12.2.0", "bottleneck": "^2.15.3" }, "engines": { @@ -2580,15 +2730,32 @@ "@octokit/core": "^5.0.0" } }, + "node_modules/@octokit/plugin-throttling/node_modules/@octokit/openapi-types": { + "version": "20.0.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/openapi-types/-/openapi-types-20.0.0.tgz", + "integrity": "sha1-nsLaoAkO64Ze4UdjbgwA9zeQxuU=", + "dev": true, + "license": "MIT" + }, + "node_modules/@octokit/plugin-throttling/node_modules/@octokit/types": { + "version": "12.6.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/types/-/types-12.6.0.tgz", + "integrity": "sha1-gQD7nu7f4IOq5mRzvZexW2Ku3LI=", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/openapi-types": "^20.0.0" + } + }, "node_modules/@octokit/request": { - "version": "8.1.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/request/-/request-8.1.1.tgz", - "integrity": "sha512-8N+tdUz4aCqQmXl8FpHYfKG9GelDFd7XGVzyN8rc6WxVlYcfpHECnuRkgquzz+WzvHTK62co5di8gSXnzASZPQ==", + "version": "8.4.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/request/-/request-8.4.0.tgz", + "integrity": "sha1-f0t7Hao9H0jAl3rY//osGK3viXQ=", + "license": "MIT", "dependencies": { - "@octokit/endpoint": "^9.0.0", - "@octokit/request-error": "^5.0.0", - "@octokit/types": "^11.1.0", - "is-plain-object": "^5.0.0", + "@octokit/endpoint": "^9.0.1", + "@octokit/request-error": "^5.1.0", + "@octokit/types": "^13.1.0", "universal-user-agent": "^6.0.0" }, "engines": { @@ -2596,11 +2763,12 @@ } }, "node_modules/@octokit/request-error": { - "version": "5.0.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/request-error/-/request-error-5.0.0.tgz", - "integrity": "sha512-1ue0DH0Lif5iEqT52+Rf/hf0RmGO9NWFjrzmrkArpG9trFfDM/efx00BJHdLGuro4BR/gECxCU2Twf5OKrRFsQ==", + "version": "5.1.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/request-error/-/request-error-5.1.0.tgz", + "integrity": "sha1-7kE4U40IyBpgvj8yDNcQYwZKOzA=", + "license": "MIT", "dependencies": { - "@octokit/types": "^11.0.0", + "@octokit/types": "^13.1.0", "deprecation": "^2.0.0", "once": "^1.4.0" }, @@ -2608,12 +2776,34 @@ "node": ">= 18" } }, - "node_modules/@octokit/request/node_modules/is-plain-object": { - "version": "5.0.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", - "engines": { - "node": ">=0.10.0" + "node_modules/@octokit/request-error/node_modules/@octokit/openapi-types": { + "version": "22.2.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/openapi-types/-/openapi-types-22.2.0.tgz", + "integrity": "sha1-dap9zUQIIdmd72pgtfAUIHrklo4=", + "license": "MIT" + }, + "node_modules/@octokit/request-error/node_modules/@octokit/types": { + "version": "13.5.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/types/-/types-13.5.1.tgz", + "integrity": "sha1-VoWpHylRld3/85cjsJOw35YJzm4=", + "license": "MIT", + "dependencies": { + "@octokit/openapi-types": "^22.2.0" + } + }, + "node_modules/@octokit/request/node_modules/@octokit/openapi-types": { + "version": "22.2.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/openapi-types/-/openapi-types-22.2.0.tgz", + "integrity": "sha1-dap9zUQIIdmd72pgtfAUIHrklo4=", + "license": "MIT" + }, + "node_modules/@octokit/request/node_modules/@octokit/types": { + "version": "13.5.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/types/-/types-13.5.1.tgz", + "integrity": "sha1-VoWpHylRld3/85cjsJOw35YJzm4=", + "license": "MIT", + "dependencies": { + "@octokit/openapi-types": "^22.2.0" } }, "node_modules/@octokit/rest": { @@ -2639,14 +2829,15 @@ } }, "node_modules/@octokit/webhooks": { - "version": "12.0.3", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/webhooks/-/webhooks-12.0.3.tgz", - "integrity": "sha512-8iG+/yza7hwz1RrQ7i7uGpK2/tuItZxZq1aTmeg2TNp2xTUB8F8lZF/FcZvyyAxT8tpDMF74TjFGCDACkf1kAQ==", + "version": "12.2.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/webhooks/-/webhooks-12.2.0.tgz", + "integrity": "sha1-6h7i2dnFpLe1P/i8ZKn+sNrJQWE=", "dev": true, + "license": "MIT", "dependencies": { "@octokit/request-error": "^5.0.0", - "@octokit/webhooks-methods": "^4.0.0", - "@octokit/webhooks-types": "7.1.0", + "@octokit/webhooks-methods": "^4.1.0", + "@octokit/webhooks-types": "7.4.0", "aggregate-error": "^3.1.0" }, "engines": { @@ -2654,19 +2845,21 @@ } }, "node_modules/@octokit/webhooks-methods": { - "version": "4.0.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/webhooks-methods/-/webhooks-methods-4.0.0.tgz", - "integrity": "sha512-M8mwmTXp+VeolOS/kfRvsDdW+IO0qJ8kYodM/sAysk093q6ApgmBXwK1ZlUvAwXVrp/YVHp6aArj4auAxUAOFw==", + "version": "4.1.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/webhooks-methods/-/webhooks-methods-4.1.0.tgz", + "integrity": "sha1-aBpshsmyHU7J4pEI+wU651Er4DM=", "dev": true, + "license": "MIT", "engines": { "node": ">= 18" } }, "node_modules/@octokit/webhooks-types": { - "version": "7.1.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/webhooks-types/-/webhooks-types-7.1.0.tgz", - "integrity": "sha512-y92CpG4kFFtBBjni8LHoV12IegJ+KFxLgKRengrVjKmGE5XMeCuGvlfRe75lTRrgXaG6XIWJlFpIDTlkoJsU8w==", - "dev": true + "version": "7.4.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/webhooks-types/-/webhooks-types-7.4.0.tgz", + "integrity": "sha1-ftFcdZCGg6NOAHnIDyYf5Wi4c5U=", + "dev": true, + "license": "MIT" }, "node_modules/@pkgjs/parseargs": { "version": "0.11.0", @@ -2712,10 +2905,11 @@ } }, "node_modules/@types/aws-lambda": { - "version": "8.10.119", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@types/aws-lambda/-/aws-lambda-8.10.119.tgz", - "integrity": "sha512-Vqm22aZrCvCd6I5g1SvpW151jfqwTzEZ7XJ3yZ6xaZG31nUEOEyzzVImjRcsN8Wi/QyPxId/x8GTtgIbsy8kEw==", - "dev": true + "version": "8.10.145", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@types/aws-lambda/-/aws-lambda-8.10.145.tgz", + "integrity": "sha1-stMamH9IiOVVP/GBn1fK+kdVlNk=", + "dev": true, + "license": "MIT" }, "node_modules/@types/babel__core": { "version": "7.20.1", @@ -2759,10 +2953,11 @@ } }, "node_modules/@types/btoa-lite": { - "version": "1.0.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@types/btoa-lite/-/btoa-lite-1.0.0.tgz", - "integrity": "sha512-wJsiX1tosQ+J5+bY5LrSahHxr2wT+uME5UDwdN1kg4frt40euqA+wzECkmq4t5QbveHiJepfdThgQrPw6KiSlg==", - "dev": true + "version": "1.0.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@types/btoa-lite/-/btoa-lite-1.0.2.tgz", + "integrity": "sha1-grtqqwCr98/zyiglq+AQwM1TauU=", + "dev": true, + "license": "MIT" }, "node_modules/@types/chokidar": { "version": "2.1.3", @@ -2889,10 +3084,11 @@ "dev": true }, "node_modules/@types/jsonwebtoken": { - "version": "9.0.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@types/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", - "integrity": "sha512-drE6uz7QBKq1fYqqoFKTDRdFCPHd5TCub75BM+D+cMx7NU9hUz7SESLfC2fSCXVFMO5Yj8sOWHuGqPgjc+fz0Q==", + "version": "9.0.7", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@types/jsonwebtoken/-/jsonwebtoken-9.0.7.tgz", + "integrity": "sha1-5JuWwrKTVu1GLpcI/HO4MwFHJ9I=", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } @@ -4173,8 +4369,9 @@ "node_modules/aggregate-error": { "version": "3.1.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "integrity": "sha1-kmcP9Q9TWb23o+DUDQ7DDFc3aHo=", "dev": true, + "license": "MIT", "dependencies": { "clean-stack": "^2.0.0", "indent-string": "^4.0.0" @@ -4815,10 +5012,11 @@ "dev": true }, "node_modules/body-parser": { - "version": "1.20.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/body-parser/-/body-parser-1.20.2.tgz", - "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", + "version": "1.20.3", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/body-parser/-/body-parser-1.20.3.tgz", + "integrity": "sha1-GVNDEiHG+1zWPEs21T+rCSjlSMY=", "dev": true, + "license": "MIT", "dependencies": { "bytes": "3.1.2", "content-type": "~1.0.5", @@ -4828,7 +5026,7 @@ "http-errors": "2.0.0", "iconv-lite": "0.4.24", "on-finished": "2.4.1", - "qs": "6.11.0", + "qs": "6.13.0", "raw-body": "2.5.2", "type-is": "~1.6.18", "unpipe": "1.0.0" @@ -5004,8 +5202,9 @@ "node_modules/btoa-lite": { "version": "1.0.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/btoa-lite/-/btoa-lite-1.0.0.tgz", - "integrity": "sha512-gvW7InbIyF8AicrqWoptdW08pUxuhq8BEgowNajy9RhiE86fmGAGl+bLKo6oB8QP0CkqHLowfN0oJdKC/J6LbA==", - "dev": true + "integrity": "sha1-M3dm2hWAEhD92VbCLpxokaudAzc=", + "dev": true, + "license": "MIT" }, "node_modules/buffer": { "version": "5.7.1", @@ -5088,13 +5287,20 @@ } }, "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "version": "1.0.7", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha1-BgFlmcQMVkmMGHadJzC+JCtvo7k=", "dev": true, + "license": "MIT", "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -5310,8 +5516,9 @@ "node_modules/clean-stack": { "version": "2.2.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "integrity": "sha1-7oRy27Ep5yezHooQpCfe6d/kAIs=", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -5720,6 +5927,24 @@ "node": ">=4.0.0" } }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha1-iU3BQbt9MGCuQ2b2oBB+aPvkjF4=", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/define-lazy-prop": { "version": "2.0.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", @@ -6125,6 +6350,29 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha1-x/rvvf+LJpbPX0aSHt+3fMS6OEU=", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha1-BfdaJdq5jk+x3NXhRywFRtUFfI8=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/es-module-lexer": { "version": "1.5.4", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/es-module-lexer/-/es-module-lexer-1.5.4.tgz", @@ -6443,10 +6691,11 @@ "dev": true }, "node_modules/eslint-plugin-import/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/semver/-/semver-6.3.1.tgz", + "integrity": "sha1-VW0u+GiRRuRtzqS/3QlfNDTf/LQ=", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" } @@ -7652,10 +7901,14 @@ } }, "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true + "version": "1.1.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha1-LALYZNl/PqbIgwxGTL0Rq26rehw=", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/function.prototype.name": { "version": "1.1.5", @@ -7704,15 +7957,20 @@ } }, "node_modules/get-intrinsic": { - "version": "1.2.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/get-intrinsic/-/get-intrinsic-1.2.1.tgz", - "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", + "version": "1.2.4", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha1-44X1pLUifUScPqu60FSU7wq76t0=", "dev": true, + "license": "MIT", "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", "has-proto": "^1.0.1", - "has-symbols": "^1.0.3" + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -8176,12 +8434,13 @@ } }, "node_modules/has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "version": "1.0.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha1-lj7X0HHce/XwhMW/vg0bYiJYaFQ=", "dev": true, + "license": "MIT", "dependencies": { - "get-intrinsic": "^1.1.1" + "es-define-property": "^1.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -8226,6 +8485,19 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha1-AD6vkb563DcuhOxZ3DclLO24AAM=", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/he": { "version": "1.2.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/he/-/he-1.2.0.tgz", @@ -10986,15 +11258,22 @@ } }, "node_modules/jsonwebtoken": { - "version": "9.0.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/jsonwebtoken/-/jsonwebtoken-9.0.1.tgz", - "integrity": "sha512-K8wx7eJ5TPvEjuiVSkv167EVboBDv9PZdDoF7BgeQnBLVvZWW9clr2PsQHVJDTKaEIH5JBIwHujGcHp7GgI2eg==", + "version": "9.0.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", + "integrity": "sha1-Zf+R9KvvF4RpfUCVK7GZjFBMqvM=", "dev": true, + "license": "MIT", "dependencies": { "jws": "^3.2.2", - "lodash": "^4.17.21", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", "ms": "^2.1.1", - "semver": "^7.3.8" + "semver": "^7.5.4" }, "engines": { "node": ">=12", @@ -11246,12 +11525,47 @@ "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=", "dev": true }, + "node_modules/lodash.includes": { + "version": "4.3.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8=", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY=", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha1-YZwK89A/iwTDH1iChAt3sRzWg0M=", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w=", + "dev": true, + "license": "MIT" + }, "node_modules/lodash.isplainobject": { "version": "4.0.6", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=", "dev": true }, + "node_modules/lodash.isstring": { + "version": "4.0.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=", + "dev": true, + "license": "MIT" + }, "node_modules/lodash.memoize": { "version": "4.1.2", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/lodash.memoize/-/lodash.memoize-4.1.2.tgz", @@ -11264,6 +11578,13 @@ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, + "node_modules/lodash.once": { + "version": "4.1.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=", + "dev": true, + "license": "MIT" + }, "node_modules/lodash.union": { "version": "4.6.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/lodash.union/-/lodash.union-4.6.0.tgz", @@ -11396,9 +11717,9 @@ } }, "node_modules/micromatch": { - "version": "4.0.7", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/micromatch/-/micromatch-4.0.7.tgz", - "integrity": "sha1-M+gZDZ/kdKmJVSX1YY7uE21GwuU=", + "version": "4.0.8", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha1-1m+hjzpHB2eJMgubGvMr2G2fogI=", "dev": true, "license": "MIT", "dependencies": { @@ -11921,10 +12242,14 @@ } }, "node_modules/object-inspect": { - "version": "1.12.3", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/object-inspect/-/object-inspect-1.12.3.tgz", - "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", + "version": "1.13.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/object-inspect/-/object-inspect-1.13.2.tgz", + "integrity": "sha1-3qAIhGf7mR5nr0BYFHokgkowQ/8=", "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -12003,24 +12328,74 @@ } }, "node_modules/octokit": { - "version": "3.1.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/octokit/-/octokit-3.1.0.tgz", - "integrity": "sha512-dmIH5D+edpb4/ASd6ZGo6BiRR1g4ytu8lG4f+6XN/2AW+CSuTsT0nj1d6rv/HKgoflMQ1+rb3KlVWcvrmgQZhw==", + "version": "3.2.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/octokit/-/octokit-3.2.1.tgz", + "integrity": "sha1-03bKOxKmHFjaAqk8SR0uYnBpsZQ=", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/app": "^14.0.2", + "@octokit/core": "^5.0.0", + "@octokit/oauth-app": "^6.0.0", + "@octokit/plugin-paginate-graphql": "^4.0.0", + "@octokit/plugin-paginate-rest": "11.3.1", + "@octokit/plugin-rest-endpoint-methods": "13.2.2", + "@octokit/plugin-retry": "^6.0.0", + "@octokit/plugin-throttling": "^8.0.0", + "@octokit/request-error": "^5.0.0", + "@octokit/types": "^13.0.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/octokit/node_modules/@octokit/openapi-types": { + "version": "22.2.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/openapi-types/-/openapi-types-22.2.0.tgz", + "integrity": "sha1-dap9zUQIIdmd72pgtfAUIHrklo4=", + "dev": true, + "license": "MIT" + }, + "node_modules/octokit/node_modules/@octokit/plugin-paginate-rest": { + "version": "11.3.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-11.3.1.tgz", + "integrity": "sha1-/pLQS0nxNBZdb7txbnZcLzE602Q=", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/types": "^13.5.0" + }, + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "@octokit/core": "5" + } + }, + "node_modules/octokit/node_modules/@octokit/plugin-rest-endpoint-methods": { + "version": "13.2.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-13.2.2.tgz", + "integrity": "sha1-r45d0s3f6ldvkv+vnLhGWfMCpjg=", "dev": true, + "license": "MIT", "dependencies": { - "@octokit/app": "^14.0.0", - "@octokit/core": "^5.0.0", - "@octokit/oauth-app": "^6.0.0", - "@octokit/plugin-paginate-graphql": "^4.0.0", - "@octokit/plugin-paginate-rest": "^8.0.0", - "@octokit/plugin-rest-endpoint-methods": "^9.0.0", - "@octokit/plugin-retry": "^6.0.0", - "@octokit/plugin-throttling": "^7.0.0", - "@octokit/request-error": "^5.0.0", - "@octokit/types": "^11.1.0" + "@octokit/types": "^13.5.0" }, "engines": { "node": ">= 18" + }, + "peerDependencies": { + "@octokit/core": "^5" + } + }, + "node_modules/octokit/node_modules/@octokit/types": { + "version": "13.5.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/types/-/types-13.5.1.tgz", + "integrity": "sha1-VoWpHylRld3/85cjsJOw35YJzm4=", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/openapi-types": "^22.2.0" } }, "node_modules/on-finished": { @@ -12707,12 +13082,13 @@ ] }, "node_modules/qs": { - "version": "6.11.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "version": "6.13.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/qs/-/qs-6.13.0.tgz", + "integrity": "sha1-bKO9WEOffiRWVXmJl3h7DYilGQY=", "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "side-channel": "^1.0.4" + "side-channel": "^1.0.6" }, "engines": { "node": ">=0.6" @@ -13259,6 +13635,24 @@ "randombytes": "^2.1.0" } }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha1-qscjFBmOrtl1z3eyw7a4gGleVEk=", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/setimmediate": { "version": "1.0.5", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/setimmediate/-/setimmediate-1.0.5.tgz", @@ -13303,14 +13697,19 @@ } }, "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "version": "1.0.6", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha1-q9Jft80kuvRUZkBrEJa3gxySFfI=", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -14396,13 +14795,14 @@ "license": "MIT" }, "node_modules/universal-github-app-jwt": { - "version": "1.1.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/universal-github-app-jwt/-/universal-github-app-jwt-1.1.1.tgz", - "integrity": "sha512-G33RTLrIBMFmlDV4u4CBF7dh71eWwykck4XgaxaIVeZKOYZRAAxvcGMRFTUclVY6xoUPQvO4Ne5wKGxYm/Yy9w==", + "version": "1.1.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/universal-github-app-jwt/-/universal-github-app-jwt-1.1.2.tgz", + "integrity": "sha1-jBhno5TX2dQs2jTxHRvLAjeX2N8=", "dev": true, + "license": "MIT", "dependencies": { "@types/jsonwebtoken": "^9.0.0", - "jsonwebtoken": "^9.0.0" + "jsonwebtoken": "^9.0.2" } }, "node_modules/universal-user-agent": { @@ -17096,84 +17496,176 @@ } }, "@octokit/app": { - "version": "14.0.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/app/-/app-14.0.0.tgz", - "integrity": "sha512-g/zDXttroZ9Se08shK0d0d/j0cgSA+h4WV7qGUevNEM0piNBkIlfb4Fm6bSwCNAZhNf72mBgERmYOoxicPkqdw==", + "version": "14.1.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/app/-/app-14.1.0.tgz", + "integrity": "sha1-LUkdxwdGdzuD9h7fXFaBfdfThUs=", "dev": true, "requires": { "@octokit/auth-app": "^6.0.0", "@octokit/auth-unauthenticated": "^5.0.0", "@octokit/core": "^5.0.0", "@octokit/oauth-app": "^6.0.0", - "@octokit/plugin-paginate-rest": "^8.0.0", - "@octokit/types": "^11.1.0", - "@octokit/webhooks": "^12.0.1" + "@octokit/plugin-paginate-rest": "^9.0.0", + "@octokit/types": "^12.0.0", + "@octokit/webhooks": "^12.0.4" + }, + "dependencies": { + "@octokit/openapi-types": { + "version": "20.0.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/openapi-types/-/openapi-types-20.0.0.tgz", + "integrity": "sha1-nsLaoAkO64Ze4UdjbgwA9zeQxuU=", + "dev": true + }, + "@octokit/plugin-paginate-rest": { + "version": "9.2.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-9.2.1.tgz", + "integrity": "sha1-LiovD1LJpLHaGjqhfavjxFm55AE=", + "dev": true, + "requires": { + "@octokit/types": "^12.6.0" + } + }, + "@octokit/types": { + "version": "12.6.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/types/-/types-12.6.0.tgz", + "integrity": "sha1-gQD7nu7f4IOq5mRzvZexW2Ku3LI=", + "dev": true, + "requires": { + "@octokit/openapi-types": "^20.0.0" + } + } } }, "@octokit/auth-app": { - "version": "6.0.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/auth-app/-/auth-app-6.0.0.tgz", - "integrity": "sha512-OKct7Rukf3g9DjpzcpdacQsdmd6oPrJ7fZND22JkjzhDvfhttUOnmh+qPS4kHhaNNyTxqSThnfrUWvkqNLd1nw==", + "version": "6.1.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/auth-app/-/auth-app-6.1.2.tgz", + "integrity": "sha1-Gf8dfy/6XtYw1Gj6RTMOpZs5tHw=", "dev": true, "requires": { - "@octokit/auth-oauth-app": "^7.0.0", - "@octokit/auth-oauth-user": "^4.0.0", - "@octokit/request": "^8.0.2", - "@octokit/request-error": "^5.0.0", - "@octokit/types": "^11.0.0", + "@octokit/auth-oauth-app": "^7.1.0", + "@octokit/auth-oauth-user": "^4.1.0", + "@octokit/request": "^8.3.1", + "@octokit/request-error": "^5.1.0", + "@octokit/types": "^13.1.0", "deprecation": "^2.3.1", "lru-cache": "^10.0.0", - "universal-github-app-jwt": "^1.1.1", + "universal-github-app-jwt": "^1.1.2", "universal-user-agent": "^6.0.0" }, "dependencies": { + "@octokit/openapi-types": { + "version": "22.2.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/openapi-types/-/openapi-types-22.2.0.tgz", + "integrity": "sha1-dap9zUQIIdmd72pgtfAUIHrklo4=", + "dev": true + }, + "@octokit/types": { + "version": "13.5.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/types/-/types-13.5.1.tgz", + "integrity": "sha1-VoWpHylRld3/85cjsJOw35YJzm4=", + "dev": true, + "requires": { + "@octokit/openapi-types": "^22.2.0" + } + }, "lru-cache": { - "version": "10.0.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/lru-cache/-/lru-cache-10.0.0.tgz", - "integrity": "sha512-svTf/fzsKHffP42sujkO/Rjs37BCIsQVRCeNYIm9WN8rgT7ffoUnRtZCqU+6BqcSBdv8gwJeTz8knJpgACeQMw==", + "version": "10.4.3", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha1-QQ/IoXtw5ZgBPfJXwkRrfzOD8Rk=", "dev": true } } }, "@octokit/auth-oauth-app": { - "version": "7.0.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/auth-oauth-app/-/auth-oauth-app-7.0.0.tgz", - "integrity": "sha512-8JvJEXGoEqrbzLwt3SwIUvkDd+1wrM8up0KawvDIElB8rbxPbvWppGO0SLKAWSJ0q8ILcVq+mWck6pDcZ3a9KA==", + "version": "7.1.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/auth-oauth-app/-/auth-oauth-app-7.1.0.tgz", + "integrity": "sha1-0PdOGevVpIKct4DBB87dbIlPIPw=", "dev": true, "requires": { - "@octokit/auth-oauth-device": "^6.0.0", - "@octokit/auth-oauth-user": "^4.0.0", - "@octokit/request": "^8.0.2", - "@octokit/types": "^11.0.0", + "@octokit/auth-oauth-device": "^6.1.0", + "@octokit/auth-oauth-user": "^4.1.0", + "@octokit/request": "^8.3.1", + "@octokit/types": "^13.0.0", "@types/btoa-lite": "^1.0.0", "btoa-lite": "^1.0.0", "universal-user-agent": "^6.0.0" + }, + "dependencies": { + "@octokit/openapi-types": { + "version": "22.2.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/openapi-types/-/openapi-types-22.2.0.tgz", + "integrity": "sha1-dap9zUQIIdmd72pgtfAUIHrklo4=", + "dev": true + }, + "@octokit/types": { + "version": "13.5.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/types/-/types-13.5.1.tgz", + "integrity": "sha1-VoWpHylRld3/85cjsJOw35YJzm4=", + "dev": true, + "requires": { + "@octokit/openapi-types": "^22.2.0" + } + } } }, "@octokit/auth-oauth-device": { - "version": "6.0.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/auth-oauth-device/-/auth-oauth-device-6.0.0.tgz", - "integrity": "sha512-Zgf/LKhwWk54rJaTGYVYtbKgUty+ouil6VQeRd+pCw7Gd0ECoSWaZuHK6uDGC/HtnWHjpSWFhzxPauDoHcNRtg==", + "version": "6.1.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/auth-oauth-device/-/auth-oauth-device-6.1.0.tgz", + "integrity": "sha1-+GghOj2wX+J+aNH8YHUCoyI3ndk=", "dev": true, "requires": { - "@octokit/oauth-methods": "^4.0.0", - "@octokit/request": "^8.0.0", - "@octokit/types": "^11.0.0", + "@octokit/oauth-methods": "^4.1.0", + "@octokit/request": "^8.3.1", + "@octokit/types": "^13.0.0", "universal-user-agent": "^6.0.0" + }, + "dependencies": { + "@octokit/openapi-types": { + "version": "22.2.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/openapi-types/-/openapi-types-22.2.0.tgz", + "integrity": "sha1-dap9zUQIIdmd72pgtfAUIHrklo4=", + "dev": true + }, + "@octokit/types": { + "version": "13.5.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/types/-/types-13.5.1.tgz", + "integrity": "sha1-VoWpHylRld3/85cjsJOw35YJzm4=", + "dev": true, + "requires": { + "@octokit/openapi-types": "^22.2.0" + } + } } }, "@octokit/auth-oauth-user": { - "version": "4.0.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/auth-oauth-user/-/auth-oauth-user-4.0.0.tgz", - "integrity": "sha512-VOm5aIkVGHaOhIvsF/4YmSjoYDzzrKbbYkdSEO0KqHK7I8SlO3ZndSikQ1fBlNPUEH0ve2BOTxLrVvI1qBf9/Q==", + "version": "4.1.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/auth-oauth-user/-/auth-oauth-user-4.1.0.tgz", + "integrity": "sha1-MuVSn4vZYa+YOaH4xqsMitIYTu4=", "dev": true, "requires": { - "@octokit/auth-oauth-device": "^6.0.0", - "@octokit/oauth-methods": "^4.0.0", - "@octokit/request": "^8.0.2", - "@octokit/types": "^11.0.0", + "@octokit/auth-oauth-device": "^6.1.0", + "@octokit/oauth-methods": "^4.1.0", + "@octokit/request": "^8.3.1", + "@octokit/types": "^13.0.0", "btoa-lite": "^1.0.0", "universal-user-agent": "^6.0.0" + }, + "dependencies": { + "@octokit/openapi-types": { + "version": "22.2.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/openapi-types/-/openapi-types-22.2.0.tgz", + "integrity": "sha1-dap9zUQIIdmd72pgtfAUIHrklo4=", + "dev": true + }, + "@octokit/types": { + "version": "13.5.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/types/-/types-13.5.1.tgz", + "integrity": "sha1-VoWpHylRld3/85cjsJOw35YJzm4=", + "dev": true, + "requires": { + "@octokit/openapi-types": "^22.2.0" + } + } } }, "@octokit/auth-token": { @@ -17182,13 +17674,30 @@ "integrity": "sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA==" }, "@octokit/auth-unauthenticated": { - "version": "5.0.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/auth-unauthenticated/-/auth-unauthenticated-5.0.0.tgz", - "integrity": "sha512-AjOI6FNB2dweJ85p6rf7D4EhE4y6VBcwYfX/7KJkR5Q9fD9ET6NABAjajUTSNFfCxmNIaQgISggZ3pkgwtTqsA==", + "version": "5.0.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/auth-unauthenticated/-/auth-unauthenticated-5.0.1.tgz", + "integrity": "sha1-2AMiEXKDMwaLLge1OZfCnlmgNQc=", "dev": true, "requires": { "@octokit/request-error": "^5.0.0", - "@octokit/types": "^11.0.0" + "@octokit/types": "^12.0.0" + }, + "dependencies": { + "@octokit/openapi-types": { + "version": "20.0.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/openapi-types/-/openapi-types-20.0.0.tgz", + "integrity": "sha1-nsLaoAkO64Ze4UdjbgwA9zeQxuU=", + "dev": true + }, + "@octokit/types": { + "version": "12.6.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/types/-/types-12.6.0.tgz", + "integrity": "sha1-gQD7nu7f4IOq5mRzvZexW2Ku3LI=", + "dev": true, + "requires": { + "@octokit/openapi-types": "^20.0.0" + } + } } }, "@octokit/core": { @@ -17206,19 +17715,26 @@ } }, "@octokit/endpoint": { - "version": "9.0.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/endpoint/-/endpoint-9.0.0.tgz", - "integrity": "sha512-szrQhiqJ88gghWY2Htt8MqUDO6++E/EIXqJ2ZEp5ma3uGS46o7LZAzSLt49myB7rT+Hfw5Y6gO3LmOxGzHijAQ==", + "version": "9.0.5", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/endpoint/-/endpoint-9.0.5.tgz", + "integrity": "sha1-5sDuaE4wdhTAL8asEidMUNpGXEQ=", "requires": { - "@octokit/types": "^11.0.0", - "is-plain-object": "^5.0.0", + "@octokit/types": "^13.1.0", "universal-user-agent": "^6.0.0" }, "dependencies": { - "is-plain-object": { - "version": "5.0.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==" + "@octokit/openapi-types": { + "version": "22.2.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/openapi-types/-/openapi-types-22.2.0.tgz", + "integrity": "sha1-dap9zUQIIdmd72pgtfAUIHrklo4=" + }, + "@octokit/types": { + "version": "13.5.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/types/-/types-13.5.1.tgz", + "integrity": "sha1-VoWpHylRld3/85cjsJOw35YJzm4=", + "requires": { + "@octokit/openapi-types": "^22.2.0" + } } } }, @@ -17233,9 +17749,9 @@ } }, "@octokit/oauth-app": { - "version": "6.0.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/oauth-app/-/oauth-app-6.0.0.tgz", - "integrity": "sha512-bNMkS+vJ6oz2hCyraT9ZfTpAQ8dZNqJJQVNaKjPLx4ue5RZiFdU1YWXguOPR8AaSHS+lKe+lR3abn2siGd+zow==", + "version": "6.1.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/oauth-app/-/oauth-app-6.1.0.tgz", + "integrity": "sha1-IsJ29q0jZMaZmDe/3V2cEJKDhyY=", "dev": true, "requires": { "@octokit/auth-oauth-app": "^7.0.0", @@ -17251,20 +17767,37 @@ "@octokit/oauth-authorization-url": { "version": "6.0.2", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/oauth-authorization-url/-/oauth-authorization-url-6.0.2.tgz", - "integrity": "sha512-CdoJukjXXxqLNK4y/VOiVzQVjibqoj/xHgInekviUJV73y/BSIcwvJ/4aNHPBPKcPWFnd4/lO9uqRV65jXhcLA==", + "integrity": "sha1-zILKKcxeM5yZIWcvOfKz9cjrbvI=", "dev": true }, "@octokit/oauth-methods": { - "version": "4.0.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/oauth-methods/-/oauth-methods-4.0.0.tgz", - "integrity": "sha512-dqy7BZLfLbi3/8X8xPKUKZclMEK9vN3fK5WF3ortRvtplQTszFvdAGbTo71gGLO+4ZxspNiLjnqdd64Chklf7w==", + "version": "4.1.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/oauth-methods/-/oauth-methods-4.1.0.tgz", + "integrity": "sha1-FAOsnE1OJ3ki/dxMifqKeC+PeRs=", "dev": true, "requires": { "@octokit/oauth-authorization-url": "^6.0.2", - "@octokit/request": "^8.0.2", - "@octokit/request-error": "^5.0.0", - "@octokit/types": "^11.0.0", + "@octokit/request": "^8.3.1", + "@octokit/request-error": "^5.1.0", + "@octokit/types": "^13.0.0", "btoa-lite": "^1.0.0" + }, + "dependencies": { + "@octokit/openapi-types": { + "version": "22.2.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/openapi-types/-/openapi-types-22.2.0.tgz", + "integrity": "sha1-dap9zUQIIdmd72pgtfAUIHrklo4=", + "dev": true + }, + "@octokit/types": { + "version": "13.5.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/types/-/types-13.5.1.tgz", + "integrity": "sha1-VoWpHylRld3/85cjsJOw35YJzm4=", + "dev": true, + "requires": { + "@octokit/openapi-types": "^22.2.0" + } + } } }, "@octokit/openapi-types": { @@ -17313,42 +17846,81 @@ } }, "@octokit/plugin-throttling": { - "version": "7.0.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/plugin-throttling/-/plugin-throttling-7.0.0.tgz", - "integrity": "sha512-KL2k/d0uANc8XqP5S64YcNFCudR3F5AaKO39XWdUtlJIjT9Ni79ekWJ6Kj5xvAw87udkOMEPcVf9xEge2+ahew==", + "version": "8.2.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/plugin-throttling/-/plugin-throttling-8.2.0.tgz", + "integrity": "sha1-nsPqLje5L6xj8GkR0MgUG0bcSUE=", "dev": true, "requires": { - "@octokit/types": "^11.0.0", + "@octokit/types": "^12.2.0", "bottleneck": "^2.15.3" + }, + "dependencies": { + "@octokit/openapi-types": { + "version": "20.0.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/openapi-types/-/openapi-types-20.0.0.tgz", + "integrity": "sha1-nsLaoAkO64Ze4UdjbgwA9zeQxuU=", + "dev": true + }, + "@octokit/types": { + "version": "12.6.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/types/-/types-12.6.0.tgz", + "integrity": "sha1-gQD7nu7f4IOq5mRzvZexW2Ku3LI=", + "dev": true, + "requires": { + "@octokit/openapi-types": "^20.0.0" + } + } } }, "@octokit/request": { - "version": "8.1.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/request/-/request-8.1.1.tgz", - "integrity": "sha512-8N+tdUz4aCqQmXl8FpHYfKG9GelDFd7XGVzyN8rc6WxVlYcfpHECnuRkgquzz+WzvHTK62co5di8gSXnzASZPQ==", + "version": "8.4.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/request/-/request-8.4.0.tgz", + "integrity": "sha1-f0t7Hao9H0jAl3rY//osGK3viXQ=", "requires": { - "@octokit/endpoint": "^9.0.0", - "@octokit/request-error": "^5.0.0", - "@octokit/types": "^11.1.0", - "is-plain-object": "^5.0.0", + "@octokit/endpoint": "^9.0.1", + "@octokit/request-error": "^5.1.0", + "@octokit/types": "^13.1.0", "universal-user-agent": "^6.0.0" }, "dependencies": { - "is-plain-object": { - "version": "5.0.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==" + "@octokit/openapi-types": { + "version": "22.2.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/openapi-types/-/openapi-types-22.2.0.tgz", + "integrity": "sha1-dap9zUQIIdmd72pgtfAUIHrklo4=" + }, + "@octokit/types": { + "version": "13.5.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/types/-/types-13.5.1.tgz", + "integrity": "sha1-VoWpHylRld3/85cjsJOw35YJzm4=", + "requires": { + "@octokit/openapi-types": "^22.2.0" + } } } }, "@octokit/request-error": { - "version": "5.0.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/request-error/-/request-error-5.0.0.tgz", - "integrity": "sha512-1ue0DH0Lif5iEqT52+Rf/hf0RmGO9NWFjrzmrkArpG9trFfDM/efx00BJHdLGuro4BR/gECxCU2Twf5OKrRFsQ==", + "version": "5.1.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/request-error/-/request-error-5.1.0.tgz", + "integrity": "sha1-7kE4U40IyBpgvj8yDNcQYwZKOzA=", "requires": { - "@octokit/types": "^11.0.0", + "@octokit/types": "^13.1.0", "deprecation": "^2.0.0", "once": "^1.4.0" + }, + "dependencies": { + "@octokit/openapi-types": { + "version": "22.2.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/openapi-types/-/openapi-types-22.2.0.tgz", + "integrity": "sha1-dap9zUQIIdmd72pgtfAUIHrklo4=" + }, + "@octokit/types": { + "version": "13.5.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/types/-/types-13.5.1.tgz", + "integrity": "sha1-VoWpHylRld3/85cjsJOw35YJzm4=", + "requires": { + "@octokit/openapi-types": "^22.2.0" + } + } } }, "@octokit/rest": { @@ -17371,27 +17943,27 @@ } }, "@octokit/webhooks": { - "version": "12.0.3", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/webhooks/-/webhooks-12.0.3.tgz", - "integrity": "sha512-8iG+/yza7hwz1RrQ7i7uGpK2/tuItZxZq1aTmeg2TNp2xTUB8F8lZF/FcZvyyAxT8tpDMF74TjFGCDACkf1kAQ==", + "version": "12.2.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/webhooks/-/webhooks-12.2.0.tgz", + "integrity": "sha1-6h7i2dnFpLe1P/i8ZKn+sNrJQWE=", "dev": true, "requires": { "@octokit/request-error": "^5.0.0", - "@octokit/webhooks-methods": "^4.0.0", - "@octokit/webhooks-types": "7.1.0", + "@octokit/webhooks-methods": "^4.1.0", + "@octokit/webhooks-types": "7.4.0", "aggregate-error": "^3.1.0" } }, "@octokit/webhooks-methods": { - "version": "4.0.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/webhooks-methods/-/webhooks-methods-4.0.0.tgz", - "integrity": "sha512-M8mwmTXp+VeolOS/kfRvsDdW+IO0qJ8kYodM/sAysk093q6ApgmBXwK1ZlUvAwXVrp/YVHp6aArj4auAxUAOFw==", + "version": "4.1.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/webhooks-methods/-/webhooks-methods-4.1.0.tgz", + "integrity": "sha1-aBpshsmyHU7J4pEI+wU651Er4DM=", "dev": true }, "@octokit/webhooks-types": { - "version": "7.1.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/webhooks-types/-/webhooks-types-7.1.0.tgz", - "integrity": "sha512-y92CpG4kFFtBBjni8LHoV12IegJ+KFxLgKRengrVjKmGE5XMeCuGvlfRe75lTRrgXaG6XIWJlFpIDTlkoJsU8w==", + "version": "7.4.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/webhooks-types/-/webhooks-types-7.4.0.tgz", + "integrity": "sha1-ftFcdZCGg6NOAHnIDyYf5Wi4c5U=", "dev": true }, "@pkgjs/parseargs": { @@ -17435,9 +18007,9 @@ } }, "@types/aws-lambda": { - "version": "8.10.119", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@types/aws-lambda/-/aws-lambda-8.10.119.tgz", - "integrity": "sha512-Vqm22aZrCvCd6I5g1SvpW151jfqwTzEZ7XJ3yZ6xaZG31nUEOEyzzVImjRcsN8Wi/QyPxId/x8GTtgIbsy8kEw==", + "version": "8.10.145", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@types/aws-lambda/-/aws-lambda-8.10.145.tgz", + "integrity": "sha1-stMamH9IiOVVP/GBn1fK+kdVlNk=", "dev": true }, "@types/babel__core": { @@ -17482,9 +18054,9 @@ } }, "@types/btoa-lite": { - "version": "1.0.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@types/btoa-lite/-/btoa-lite-1.0.0.tgz", - "integrity": "sha512-wJsiX1tosQ+J5+bY5LrSahHxr2wT+uME5UDwdN1kg4frt40euqA+wzECkmq4t5QbveHiJepfdThgQrPw6KiSlg==", + "version": "1.0.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@types/btoa-lite/-/btoa-lite-1.0.2.tgz", + "integrity": "sha1-grtqqwCr98/zyiglq+AQwM1TauU=", "dev": true }, "@types/chokidar": { @@ -17611,9 +18183,9 @@ "dev": true }, "@types/jsonwebtoken": { - "version": "9.0.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@types/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", - "integrity": "sha512-drE6uz7QBKq1fYqqoFKTDRdFCPHd5TCub75BM+D+cMx7NU9hUz7SESLfC2fSCXVFMO5Yj8sOWHuGqPgjc+fz0Q==", + "version": "9.0.7", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@types/jsonwebtoken/-/jsonwebtoken-9.0.7.tgz", + "integrity": "sha1-5JuWwrKTVu1GLpcI/HO4MwFHJ9I=", "dev": true, "requires": { "@types/node": "*" @@ -18545,7 +19117,7 @@ "aggregate-error": { "version": "3.1.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "integrity": "sha1-kmcP9Q9TWb23o+DUDQ7DDFc3aHo=", "dev": true, "requires": { "clean-stack": "^2.0.0", @@ -19040,9 +19612,9 @@ "dev": true }, "body-parser": { - "version": "1.20.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/body-parser/-/body-parser-1.20.2.tgz", - "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", + "version": "1.20.3", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/body-parser/-/body-parser-1.20.3.tgz", + "integrity": "sha1-GVNDEiHG+1zWPEs21T+rCSjlSMY=", "dev": true, "requires": { "bytes": "3.1.2", @@ -19053,7 +19625,7 @@ "http-errors": "2.0.0", "iconv-lite": "0.4.24", "on-finished": "2.4.1", - "qs": "6.11.0", + "qs": "6.13.0", "raw-body": "2.5.2", "type-is": "~1.6.18", "unpipe": "1.0.0" @@ -19185,7 +19757,7 @@ "btoa-lite": { "version": "1.0.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/btoa-lite/-/btoa-lite-1.0.0.tgz", - "integrity": "sha512-gvW7InbIyF8AicrqWoptdW08pUxuhq8BEgowNajy9RhiE86fmGAGl+bLKo6oB8QP0CkqHLowfN0oJdKC/J6LbA==", + "integrity": "sha1-M3dm2hWAEhD92VbCLpxokaudAzc=", "dev": true }, "buffer": { @@ -19243,13 +19815,16 @@ "dev": true }, "call-bind": { - "version": "1.0.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "version": "1.0.7", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha1-BgFlmcQMVkmMGHadJzC+JCtvo7k=", "dev": true, "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" } }, "callsites": { @@ -19408,7 +19983,7 @@ "clean-stack": { "version": "2.2.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "integrity": "sha1-7oRy27Ep5yezHooQpCfe6d/kAIs=", "dev": true }, "cliui": { @@ -19725,6 +20300,17 @@ "integrity": "sha512-jZRrDmBKjmGcqMFEUJ14FjMJwm05Qaked+1vxaALRtF0UAl7lPU8OLWXFxvoeg3jbQM249VPFVn8g2znaQkEtA==", "dev": true }, + "define-data-property": { + "version": "1.1.4", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha1-iU3BQbt9MGCuQ2b2oBB+aPvkjF4=", + "dev": true, + "requires": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + } + }, "define-lazy-prop": { "version": "2.0.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", @@ -20030,6 +20616,21 @@ "which-typed-array": "^1.1.9" } }, + "es-define-property": { + "version": "1.0.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha1-x/rvvf+LJpbPX0aSHt+3fMS6OEU=", + "dev": true, + "requires": { + "get-intrinsic": "^1.2.4" + } + }, + "es-errors": { + "version": "1.3.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha1-BfdaJdq5jk+x3NXhRywFRtUFfI8=", + "dev": true + }, "es-module-lexer": { "version": "1.5.4", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/es-module-lexer/-/es-module-lexer-1.5.4.tgz", @@ -20430,9 +21031,9 @@ "dev": true }, "semver": { - "version": "6.3.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/semver/-/semver-6.3.1.tgz", + "integrity": "sha1-VW0u+GiRRuRtzqS/3QlfNDTf/LQ=", "dev": true } } @@ -21162,9 +21763,9 @@ } }, "function-bind": { - "version": "1.1.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "version": "1.1.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha1-LALYZNl/PqbIgwxGTL0Rq26rehw=", "dev": true }, "function.prototype.name": { @@ -21198,15 +21799,16 @@ "dev": true }, "get-intrinsic": { - "version": "1.2.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/get-intrinsic/-/get-intrinsic-1.2.1.tgz", - "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", + "version": "1.2.4", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha1-44X1pLUifUScPqu60FSU7wq76t0=", "dev": true, "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", "has-proto": "^1.0.1", - "has-symbols": "^1.0.3" + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" } }, "get-package-type": { @@ -21532,12 +22134,12 @@ "dev": true }, "has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "version": "1.0.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha1-lj7X0HHce/XwhMW/vg0bYiJYaFQ=", "dev": true, "requires": { - "get-intrinsic": "^1.1.1" + "es-define-property": "^1.0.0" } }, "has-proto": { @@ -21561,6 +22163,15 @@ "has-symbols": "^1.0.2" } }, + "hasown": { + "version": "2.0.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha1-AD6vkb563DcuhOxZ3DclLO24AAM=", + "dev": true, + "requires": { + "function-bind": "^1.1.2" + } + }, "he": { "version": "1.2.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/he/-/he-1.2.0.tgz", @@ -23566,15 +24177,21 @@ } }, "jsonwebtoken": { - "version": "9.0.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/jsonwebtoken/-/jsonwebtoken-9.0.1.tgz", - "integrity": "sha512-K8wx7eJ5TPvEjuiVSkv167EVboBDv9PZdDoF7BgeQnBLVvZWW9clr2PsQHVJDTKaEIH5JBIwHujGcHp7GgI2eg==", + "version": "9.0.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", + "integrity": "sha1-Zf+R9KvvF4RpfUCVK7GZjFBMqvM=", "dev": true, "requires": { "jws": "^3.2.2", - "lodash": "^4.17.21", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", "ms": "^2.1.1", - "semver": "^7.3.8" + "semver": "^7.5.4" }, "dependencies": { "ms": { @@ -23781,12 +24398,42 @@ "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=", "dev": true }, + "lodash.includes": { + "version": "4.3.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8=", + "dev": true + }, + "lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY=", + "dev": true + }, + "lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha1-YZwK89A/iwTDH1iChAt3sRzWg0M=", + "dev": true + }, + "lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w=", + "dev": true + }, "lodash.isplainobject": { "version": "4.0.6", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=", "dev": true }, + "lodash.isstring": { + "version": "4.0.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=", + "dev": true + }, "lodash.memoize": { "version": "4.1.2", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/lodash.memoize/-/lodash.memoize-4.1.2.tgz", @@ -23799,6 +24446,12 @@ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, + "lodash.once": { + "version": "4.1.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=", + "dev": true + }, "lodash.union": { "version": "4.6.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/lodash.union/-/lodash.union-4.6.0.tgz", @@ -23909,9 +24562,9 @@ "dev": true }, "micromatch": { - "version": "4.0.7", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/micromatch/-/micromatch-4.0.7.tgz", - "integrity": "sha1-M+gZDZ/kdKmJVSX1YY7uE21GwuU=", + "version": "4.0.8", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha1-1m+hjzpHB2eJMgubGvMr2G2fogI=", "dev": true, "requires": { "braces": "^3.0.3", @@ -24318,9 +24971,9 @@ "dev": true }, "object-inspect": { - "version": "1.12.3", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/object-inspect/-/object-inspect-1.12.3.tgz", - "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", + "version": "1.13.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/object-inspect/-/object-inspect-1.13.2.tgz", + "integrity": "sha1-3qAIhGf7mR5nr0BYFHokgkowQ/8=", "dev": true }, "object-keys": { @@ -24374,21 +25027,56 @@ } }, "octokit": { - "version": "3.1.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/octokit/-/octokit-3.1.0.tgz", - "integrity": "sha512-dmIH5D+edpb4/ASd6ZGo6BiRR1g4ytu8lG4f+6XN/2AW+CSuTsT0nj1d6rv/HKgoflMQ1+rb3KlVWcvrmgQZhw==", + "version": "3.2.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/octokit/-/octokit-3.2.1.tgz", + "integrity": "sha1-03bKOxKmHFjaAqk8SR0uYnBpsZQ=", "dev": true, "requires": { - "@octokit/app": "^14.0.0", + "@octokit/app": "^14.0.2", "@octokit/core": "^5.0.0", "@octokit/oauth-app": "^6.0.0", "@octokit/plugin-paginate-graphql": "^4.0.0", - "@octokit/plugin-paginate-rest": "^8.0.0", - "@octokit/plugin-rest-endpoint-methods": "^9.0.0", + "@octokit/plugin-paginate-rest": "11.3.1", + "@octokit/plugin-rest-endpoint-methods": "13.2.2", "@octokit/plugin-retry": "^6.0.0", - "@octokit/plugin-throttling": "^7.0.0", + "@octokit/plugin-throttling": "^8.0.0", "@octokit/request-error": "^5.0.0", - "@octokit/types": "^11.1.0" + "@octokit/types": "^13.0.0" + }, + "dependencies": { + "@octokit/openapi-types": { + "version": "22.2.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/openapi-types/-/openapi-types-22.2.0.tgz", + "integrity": "sha1-dap9zUQIIdmd72pgtfAUIHrklo4=", + "dev": true + }, + "@octokit/plugin-paginate-rest": { + "version": "11.3.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-11.3.1.tgz", + "integrity": "sha1-/pLQS0nxNBZdb7txbnZcLzE602Q=", + "dev": true, + "requires": { + "@octokit/types": "^13.5.0" + } + }, + "@octokit/plugin-rest-endpoint-methods": { + "version": "13.2.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-13.2.2.tgz", + "integrity": "sha1-r45d0s3f6ldvkv+vnLhGWfMCpjg=", + "dev": true, + "requires": { + "@octokit/types": "^13.5.0" + } + }, + "@octokit/types": { + "version": "13.5.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/types/-/types-13.5.1.tgz", + "integrity": "sha1-VoWpHylRld3/85cjsJOw35YJzm4=", + "dev": true, + "requires": { + "@octokit/openapi-types": "^22.2.0" + } + } } }, "on-finished": { @@ -24889,12 +25577,12 @@ "dev": true }, "qs": { - "version": "6.11.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "version": "6.13.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/qs/-/qs-6.13.0.tgz", + "integrity": "sha1-bKO9WEOffiRWVXmJl3h7DYilGQY=", "dev": true, "requires": { - "side-channel": "^1.0.4" + "side-channel": "^1.0.6" } }, "queue-microtask": { @@ -25283,6 +25971,20 @@ "randombytes": "^2.1.0" } }, + "set-function-length": { + "version": "1.2.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha1-qscjFBmOrtl1z3eyw7a4gGleVEk=", + "dev": true, + "requires": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + } + }, "setimmediate": { "version": "1.0.5", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/setimmediate/-/setimmediate-1.0.5.tgz", @@ -25318,14 +26020,15 @@ "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" }, "side-channel": { - "version": "1.0.4", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "version": "1.0.6", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha1-q9Jft80kuvRUZkBrEJa3gxySFfI=", "dev": true, "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" } }, "signal-exit": { @@ -26105,13 +26808,13 @@ "integrity": "sha1-vNU5iT0AtW6WT9JlekhmsiGmVhc=" }, "universal-github-app-jwt": { - "version": "1.1.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/universal-github-app-jwt/-/universal-github-app-jwt-1.1.1.tgz", - "integrity": "sha512-G33RTLrIBMFmlDV4u4CBF7dh71eWwykck4XgaxaIVeZKOYZRAAxvcGMRFTUclVY6xoUPQvO4Ne5wKGxYm/Yy9w==", + "version": "1.1.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/universal-github-app-jwt/-/universal-github-app-jwt-1.1.2.tgz", + "integrity": "sha1-jBhno5TX2dQs2jTxHRvLAjeX2N8=", "dev": true, "requires": { "@types/jsonwebtoken": "^9.0.0", - "jsonwebtoken": "^9.0.0" + "jsonwebtoken": "^9.0.2" } }, "universal-user-agent": { diff --git a/package.json b/package.json index efcbbe5c1..090a2cbcc 100644 --- a/package.json +++ b/package.json @@ -37,11 +37,11 @@ } }, "defaults": { - "roslyn": "4.12.0-3.24470.4", + "roslyn": "4.13.0-1.24477.2", "omniSharp": "1.39.11", "razor": "9.0.0-preview.24467.1", "razorOmnisharp": "7.0.0-preview.23363.1", - "xamlTools": "17.12.35319.159" + "xamlTools": "17.12.35326.17" }, "main": "./dist/extension", "l10n": "./l10n", @@ -420,7 +420,7 @@ { "id": "Debugger", "description": ".NET Core Debugger (Windows / x64)", - "url": "https://vsdebugger.azureedge.net/coreclr-debug-2-47-0/coreclr-debug-win7-x64.zip", + "url": "https://vsdebugger.azureedge.net/coreclr-debug-2-50-0/coreclr-debug-win7-x64.zip", "installPath": ".debugger/x86_64", "platforms": [ "win32" @@ -430,12 +430,12 @@ "arm64" ], "installTestPath": "./.debugger/x86_64/vsdbg-ui.exe", - "integrity": "3D8F046E44F7E7A5A4B6C24468D2AEBC4773F28E66F9E732D3D5E76F79C3DB32" + "integrity": "AFA82E9A8C244FA614A3ACDABCF5B7C9703811393D18E2125C2018E32D08FD6F" }, { "id": "Debugger", "description": ".NET Core Debugger (Windows / ARM64)", - "url": "https://vsdebugger.azureedge.net/coreclr-debug-2-47-0/coreclr-debug-win10-arm64.zip", + "url": "https://vsdebugger.azureedge.net/coreclr-debug-2-50-0/coreclr-debug-win10-arm64.zip", "installPath": ".debugger/arm64", "platforms": [ "win32" @@ -444,12 +444,12 @@ "arm64" ], "installTestPath": "./.debugger/arm64/vsdbg-ui.exe", - "integrity": "142B58C35C70D31094AF4AB31A2B11BDB4FA747811D086AB079AD260EF00ACBC" + "integrity": "73D9ACB6697CC483F3FBDA562EA434316ED2DD876BCD8E313624CD20F2DE808B" }, { "id": "Debugger", "description": ".NET Core Debugger (macOS / x64)", - "url": "https://vsdebugger.azureedge.net/coreclr-debug-2-47-0/coreclr-debug-osx-x64.zip", + "url": "https://vsdebugger.azureedge.net/coreclr-debug-2-50-0/coreclr-debug-osx-x64.zip", "installPath": ".debugger/x86_64", "platforms": [ "darwin" @@ -463,12 +463,12 @@ "./vsdbg" ], "installTestPath": "./.debugger/x86_64/vsdbg-ui", - "integrity": "BCABF433604B2206F08638EDE8DF921CF8807E23D48824F320BA1829CB0A8BDD" + "integrity": "49BBC3A34AD5B993BA2A10735785F709E7C3DFE3A434BE88917959211F03E501" }, { "id": "Debugger", "description": ".NET Core Debugger (macOS / arm64)", - "url": "https://vsdebugger.azureedge.net/coreclr-debug-2-47-0/coreclr-debug-osx-arm64.zip", + "url": "https://vsdebugger.azureedge.net/coreclr-debug-2-50-0/coreclr-debug-osx-arm64.zip", "installPath": ".debugger/arm64", "platforms": [ "darwin" @@ -481,12 +481,12 @@ "./vsdbg" ], "installTestPath": "./.debugger/arm64/vsdbg-ui", - "integrity": "641E189D1ECF36506FFEE29E85131AFC5575172435F3D67A5E1B55861270FA45" + "integrity": "5007BB60158E593C1C559CFDCDAF93CCC4BB84D7971656494B301263D822BD04" }, { "id": "Debugger", "description": ".NET Core Debugger (linux / ARM)", - "url": "https://vsdebugger.azureedge.net/coreclr-debug-2-47-0/coreclr-debug-linux-arm.zip", + "url": "https://vsdebugger.azureedge.net/coreclr-debug-2-50-0/coreclr-debug-linux-arm.zip", "installPath": ".debugger", "platforms": [ "linux" @@ -499,12 +499,12 @@ "./vsdbg" ], "installTestPath": "./.debugger/vsdbg-ui", - "integrity": "F4932D5E5C01F4147D3735177496B8DE922A92A9B975CC89D52C2227F008B193" + "integrity": "2D68C4C2D2EDB7BC7B27F542E3021B0F813445C9DE268BA2A316F02107233167" }, { "id": "Debugger", "description": ".NET Core Debugger (linux / ARM64)", - "url": "https://vsdebugger.azureedge.net/coreclr-debug-2-47-0/coreclr-debug-linux-arm64.zip", + "url": "https://vsdebugger.azureedge.net/coreclr-debug-2-50-0/coreclr-debug-linux-arm64.zip", "installPath": ".debugger", "platforms": [ "linux" @@ -517,12 +517,12 @@ "./vsdbg" ], "installTestPath": "./.debugger/vsdbg-ui", - "integrity": "3E3BBCF80931FA704CF33CD1BAE72E0FE0E021968070FC6D4156BBC2BD797D77" + "integrity": "0F8782168C76C939135A0FB14B682A582170B0A1606242D44BD1A37E6ACCE936" }, { "id": "Debugger", "description": ".NET Core Debugger (linux musl / x64)", - "url": "https://vsdebugger.azureedge.net/coreclr-debug-2-47-0/coreclr-debug-linux-musl-x64.zip", + "url": "https://vsdebugger.azureedge.net/coreclr-debug-2-50-0/coreclr-debug-linux-musl-x64.zip", "installPath": ".debugger", "platforms": [ "linux-musl" @@ -535,12 +535,12 @@ "./vsdbg" ], "installTestPath": "./.debugger/vsdbg-ui", - "integrity": "5B83C49084D3A5F314AD18E25DE8042DF6D17335A6535A60307ADF07A777CB49" + "integrity": "CB7ADA2C813F1008282534150967E379767477C1BFD63C21419E0A02F59FD71D" }, { "id": "Debugger", "description": ".NET Core Debugger (linux musl / ARM64)", - "url": "https://vsdebugger.azureedge.net/coreclr-debug-2-47-0/coreclr-debug-linux-musl-arm64.zip", + "url": "https://vsdebugger.azureedge.net/coreclr-debug-2-50-0/coreclr-debug-linux-musl-arm64.zip", "installPath": ".debugger", "platforms": [ "linux-musl" @@ -553,12 +553,12 @@ "./vsdbg" ], "installTestPath": "./.debugger/vsdbg-ui", - "integrity": "633C5F3A419CDED6842088BFAF8F4F52CDEF0149F3DBC1BB5BA2AA87F159A21F" + "integrity": "24C70056FAC4F87396BCE795A2CB8BB10CCB0F652CEFAAF0B63CF05360E90192" }, { "id": "Debugger", "description": ".NET Core Debugger (linux / x64)", - "url": "https://vsdebugger.azureedge.net/coreclr-debug-2-47-0/coreclr-debug-linux-x64.zip", + "url": "https://vsdebugger.azureedge.net/coreclr-debug-2-50-0/coreclr-debug-linux-x64.zip", "installPath": ".debugger", "platforms": [ "linux" @@ -571,7 +571,7 @@ "./vsdbg" ], "installTestPath": "./.debugger/vsdbg-ui", - "integrity": "83D55C4BF672F6369E6C152DA7888398824AE59136F224B098154F5F41FD16FA" + "integrity": "FFBDE7002BA9C1532989BB0145333DBD6527173395D58D389302968B72849214" }, { "id": "RazorOmnisharp", @@ -5592,4 +5592,4 @@ } } } -} +} \ No newline at end of file diff --git a/src/coreclrDebug/activate.ts b/src/coreclrDebug/activate.ts index 31f9c7513..cfc07d74a 100644 --- a/src/coreclrDebug/activate.ts +++ b/src/coreclrDebug/activate.ts @@ -20,6 +20,7 @@ import { RemoteAttachPicker } from '../shared/processPicker'; import CompositeDisposable from '../compositeDisposable'; import { BaseVsDbgConfigurationProvider } from '../shared/configurationProvider'; import { omnisharpOptions } from '../shared/options'; +import { ActionOption, showErrorMessage } from '../shared/observers/utils/showMessage'; export async function activate( thisExtension: vscode.Extension, @@ -46,7 +47,7 @@ export async function activate( showInstallErrorMessage(eventStream); } } else if (!CoreClrDebugUtil.existsSync(debugUtil.installCompleteFilePath())) { - completeDebuggerInstall(debugUtil, platformInformation, eventStream); + await completeDebuggerInstall(debugUtil, platformInformation, eventStream); } // register process picker for attach for legacy configurations. @@ -80,7 +81,7 @@ export async function activate( } } - vscode.debug.startDebugging( + await vscode.debug.startDebugging( undefined, { name: '.NET Core Attach', @@ -183,7 +184,8 @@ async function completeDebuggerInstall( const isValidArchitecture = await checkIsValidArchitecture(platformInformation, eventStream); if (!isValidArchitecture) { eventStream.post(new DebuggerNotInstalledFailure()); - vscode.window.showErrorMessage( + showErrorMessage( + vscode, vscode.l10n.t( 'Failed to complete the installation of the C# extension. Please see the error in the output window below.' ) @@ -192,7 +194,7 @@ async function completeDebuggerInstall( } // Write install.complete - CoreClrDebugUtil.writeEmptyFile(debugUtil.installCompleteFilePath()); + await CoreClrDebugUtil.writeEmptyFile(debugUtil.installCompleteFilePath()); return true; } catch (err) { @@ -208,7 +210,8 @@ async function completeDebuggerInstall( function showInstallErrorMessage(eventStream: EventStream) { eventStream.post(new DebuggerNotInstalledFailure()); - vscode.window.showErrorMessage( + showErrorMessage( + vscode, vscode.l10n.t( 'An error occurred during installation of the .NET Debugger. The C# extension may need to be reinstalled.' ) @@ -218,22 +221,28 @@ function showInstallErrorMessage(eventStream: EventStream) { function showDotnetToolsWarning(message: string): void { const config = vscode.workspace.getConfiguration('csharp'); if (!config.get('suppressDotnetInstallWarning', false)) { - const getDotNetMessage = vscode.l10n.t('Get the SDK'); - const goToSettingsMessage = vscode.l10n.t('Disable message in settings'); - const helpMessage = vscode.l10n.t('Help'); + const getDotNetMessage: ActionOption = { + title: vscode.l10n.t('Get the SDK'), + action: async () => { + await vscode.env.openExternal(vscode.Uri.parse('https://dot.net/core-sdk-vscode')); + }, + }; + const goToSettingsMessage: ActionOption = { + title: vscode.l10n.t('Disable message in settings'), + action: async () => { + await vscode.commands.executeCommand('workbench.action.openGlobalSettings'); + }, + }; + const helpMessage: ActionOption = { + title: vscode.l10n.t('Help'), + action: async () => { + await vscode.env.openExternal(vscode.Uri.parse('https://aka.ms/VSCode-CS-DotnetNotFoundHelp')); + }, + }; + // Buttons are shown in right-to-left order, with a close button to the right of everything; // getDotNetMessage will be the first button, then goToSettingsMessage, then the close button. - vscode.window.showErrorMessage(message, goToSettingsMessage, getDotNetMessage, helpMessage).then((value) => { - if (value === getDotNetMessage) { - const dotnetcoreURL = 'https://dot.net/core-sdk-vscode'; - vscode.env.openExternal(vscode.Uri.parse(dotnetcoreURL)); - } else if (value === goToSettingsMessage) { - vscode.commands.executeCommand('workbench.action.openGlobalSettings'); - } else if (value == helpMessage) { - const helpURL = 'https://aka.ms/VSCode-CS-DotnetNotFoundHelp'; - vscode.env.openExternal(vscode.Uri.parse(helpURL)); - } - }); + showErrorMessage(vscode, message, goToSettingsMessage, getDotNetMessage, helpMessage); } } diff --git a/src/createTmpAsset.ts b/src/createTmpAsset.ts index 1a36de180..b23223866 100644 --- a/src/createTmpAsset.ts +++ b/src/createTmpAsset.ts @@ -43,7 +43,9 @@ export async function CreateTmpDir(unsafeCleanup: boolean): Promise { name: tmpDir.name, dispose: () => { if (unsafeCleanup) { - rimraf(tmpDir.name); //to delete directories that have folders inside them + rimraf(tmpDir.name).catch((rejectReason) => { + throw new Error(`Failed to cleanup ${tmpDir.name} at ${tmpDir.fd}: ${rejectReason}`); + }); //to delete directories that have folders inside them } else { tmpDir.removeCallback(); } diff --git a/src/lsptoolshost/commands.ts b/src/lsptoolshost/commands.ts index b5e42ad23..387e35d22 100644 --- a/src/lsptoolshost/commands.ts +++ b/src/lsptoolshost/commands.ts @@ -187,7 +187,7 @@ async function openSolution(languageServer: RoslynLanguageServer): Promise Promise<{ entries: vscode.Uri[]; traits?: { name: string; value: string }[] }> - ): void; + callback: ( + uri: vscode.Uri, + cancellationToken?: vscode.CancellationToken + ) => Promise<{ entries: vscode.Uri[]; traits?: { name: string; value: string }[] }> + ): vscode.Disposable; } -export async function registerCopilotExtensionAsync( - languageServer: RoslynLanguageServer, - channel: vscode.OutputChannel -) { +export function registerCopilotExtension(languageServer: RoslynLanguageServer, channel: vscode.OutputChannel) { const isTraceLogLevel = languageServerOptions.logLevel && (languageServerOptions.logLevel === 'Trace' || languageServerOptions.logLevel === 'Debug'); @@ -35,58 +35,60 @@ export async function registerCopilotExtensionAsync( } return; } - await ext.activate(); - const relatedAPI = ext.exports as CopilotRelatedFilesProviderRegistration | undefined; - if (!relatedAPI) { - if (isTraceLogLevel) { - channel.appendLine( - 'Incompatible GitHub Copilot extension installed. Skip registeration of C# related files provider.' - ); + ext.activate().then(() => { + const relatedAPI = ext.exports as CopilotRelatedFilesProviderRegistration | undefined; + if (!relatedAPI) { + if (isTraceLogLevel) { + channel.appendLine( + 'Incompatible GitHub Copilot extension installed. Skip registeration of C# related files provider.' + ); + } + return; } - return; - } - if (isTraceLogLevel) { - channel.appendLine('registeration of C# related files provider for GitHub Copilot extension succeeded.'); - } + if (isTraceLogLevel) { + channel.appendLine('registration of C# related files provider for GitHub Copilot extension succeeded.'); + } - const id = { - extensionId: CSharpExtensionId, - languageId: 'csharp', - }; + const id = { + extensionId: CSharpExtensionId, + languageId: 'csharp', + }; - relatedAPI.registerRelatedFilesProvider(id, async (uri) => { - const buildResult = (reports: CopilotRelatedDocumentsReport[], builder?: vscode.Uri[]) => { - if (reports) { - for (const report of reports) { - if (report._vs_file_paths) { - for (const filePath of report._vs_file_paths) { - builder?.push(vscode.Uri.file(filePath)); + relatedAPI.registerRelatedFilesProvider(id, async (uri, token) => { + const buildResult = (reports: CopilotRelatedDocumentsReport[], builder?: vscode.Uri[]) => { + if (reports) { + for (const report of reports) { + if (report._vs_file_paths) { + for (const filePath of report._vs_file_paths) { + builder?.push(vscode.Uri.file(filePath)); + } } } } - } - }; - const relatedFiles: vscode.Uri[] = []; - const uriString = UriConverter.serialize(uri); - const textDocument = TextDocumentIdentifier.create(uriString); - try { - await languageServer.sendRequestWithProgress( - CopilotRelatedDocumentsRequest.type, - { - _vs_textDocument: textDocument, - position: { - line: 0, - character: 0, + }; + const relatedFiles: vscode.Uri[] = []; + const uriString = UriConverter.serialize(uri); + const textDocument = TextDocumentIdentifier.create(uriString); + try { + await languageServer.sendRequestWithProgress( + CopilotRelatedDocumentsRequest.type, + { + _vs_textDocument: textDocument, + position: { + line: 0, + character: 0, + }, }, - }, - async (r) => buildResult(r, relatedFiles) - ); - } catch (e) { - if (e instanceof Error) { - channel.appendLine(e.message); + async (r) => buildResult(r, relatedFiles), + token + ); + } catch (e) { + if (e instanceof Error) { + channel.appendLine(e.message); + } } - } - return { entries: relatedFiles }; + return { entries: relatedFiles }; + }); }); } diff --git a/src/lsptoolshost/languageStatusBar.ts b/src/lsptoolshost/languageStatusBar.ts index 659ec16f5..d0d9024c6 100644 --- a/src/lsptoolshost/languageStatusBar.ts +++ b/src/lsptoolshost/languageStatusBar.ts @@ -74,6 +74,10 @@ class ProjectContextStatus { projectContextService.onActiveFileContextChanged((e) => { item.text = e.context._vs_label; }); - projectContextService.refresh(); + + // Trigger a refresh, but don't block creation on the refresh completing. + projectContextService.refresh().catch((e) => { + throw new Error(`Error refreshing project context status ${e}`); + }); } } diff --git a/src/lsptoolshost/onAutoInsert.ts b/src/lsptoolshost/onAutoInsert.ts index ca1a8ce9f..71ef4198a 100644 --- a/src/lsptoolshost/onAutoInsert.ts +++ b/src/lsptoolshost/onAutoInsert.ts @@ -110,7 +110,7 @@ async function applyAutoInsertEdit( } if (response.command !== undefined) { - vscode.commands.executeCommand(response.command.command, response.command.arguments); + await vscode.commands.executeCommand(response.command.command, response.command.arguments); } } } diff --git a/src/lsptoolshost/optionChanges.ts b/src/lsptoolshost/optionChanges.ts index e71fe24ac..4a66b2228 100644 --- a/src/lsptoolshost/optionChanges.ts +++ b/src/lsptoolshost/optionChanges.ts @@ -7,8 +7,8 @@ import * as vscode from 'vscode'; import { Observable } from 'rxjs'; import { CommonOptionsThatTriggerReload, LanguageServerOptionsThatTriggerReload } from '../shared/options'; import { HandleOptionChanges, OptionChangeObserver, OptionChanges } from '../shared/observers/optionChangeObserver'; -import ShowInformationMessage from '../shared/observers/utils/showInformationMessage'; import Disposable from '../disposable'; +import { CommandOption, showInformationMessage } from '../shared/observers/utils/showMessage'; export function registerLanguageServerOptionChanges(optionObservable: Observable): Disposable { const optionChangeObserver: OptionChangeObserver = { @@ -34,19 +34,18 @@ function handleLanguageServerOptionChanges(changedOptions: OptionChanges): void return; } - const reloadTitle = vscode.l10n.t('Reload Window'); - const reloadCommand = 'workbench.action.reloadWindow'; + const reloadTitle: CommandOption = { + title: vscode.l10n.t('Reload Window'), + command: 'workbench.action.reloadWindow', + }; if (changedOptions.changedCommonOptions.find((key) => key === 'useOmnisharpServer')) { // If the user has changed the useOmnisharpServer flag we need to reload the window. - ShowInformationMessage( + showInformationMessage( vscode, vscode.l10n.t( 'dotnet.server.useOmnisharp option has changed. Please reload the window to apply the change' ), - { - title: reloadTitle, - command: reloadCommand, - } + reloadTitle ); return; } @@ -56,5 +55,5 @@ function handleLanguageServerOptionChanges(changedOptions: OptionChanges): void const message = vscode.l10n.t( 'C# configuration has changed. Would you like to reload the window to apply your changes?' ); - ShowInformationMessage(vscode, message, { title: reloadTitle, command: reloadCommand }); + showInformationMessage(vscode, message, reloadTitle); } diff --git a/src/lsptoolshost/restore.ts b/src/lsptoolshost/restore.ts index ff5290e72..4ea9f8599 100644 --- a/src/lsptoolshost/restore.ts +++ b/src/lsptoolshost/restore.ts @@ -13,6 +13,7 @@ import { ProjectNeedsRestoreRequest, } from './roslynProtocol'; import path = require('path'); +import { showErrorMessage } from '../shared/observers/utils/showMessage'; let _restoreInProgress = false; @@ -79,7 +80,7 @@ export async function restore( showOutput: boolean ): Promise { if (_restoreInProgress) { - vscode.window.showErrorMessage(vscode.l10n.t('Restore already in progress')); + showErrorMessage(vscode, vscode.l10n.t('Restore already in progress')); return; } _restoreInProgress = true; diff --git a/src/lsptoolshost/roslynLanguageServer.ts b/src/lsptoolshost/roslynLanguageServer.ts index e525eec57..023608c54 100644 --- a/src/lsptoolshost/roslynLanguageServer.ts +++ b/src/lsptoolshost/roslynLanguageServer.ts @@ -33,7 +33,6 @@ import { import { PlatformInformation } from '../shared/platform'; import { readConfigurations } from './configurationMiddleware'; import { DynamicFileInfoHandler } from '../razor/src/dynamicFile/dynamicFileInfoHandler'; -import ShowInformationMessage from '../shared/observers/utils/showInformationMessage'; import * as RoslynProtocol from './roslynProtocol'; import { CSharpDevKitExports } from '../csharpDevKitExports'; import { SolutionSnapshotId } from './services/ISolutionSnapshotProvider'; @@ -68,7 +67,13 @@ import { registerLanguageStatusItems } from './languageStatusBar'; import { ProjectContextService } from './services/projectContextService'; import { ProvideDynamicFileResponse } from '../razor/src/dynamicFile/provideDynamicFileResponse'; import { ProvideDynamicFileParams } from '../razor/src/dynamicFile/provideDynamicFileParams'; -import { registerCopilotExtensionAsync } from './copilot'; +import { registerCopilotExtension } from './copilot'; +import { + ActionOption, + CommandOption, + showErrorMessage, + showInformationMessage, +} from '../shared/observers/utils/showMessage'; let _channel: vscode.OutputChannel; let _traceChannel: vscode.OutputChannel; @@ -458,13 +463,13 @@ export class RoslynLanguageServer { const defaultSolution = commonOptions.defaultSolution; if (!_wasActivatedWithCSharpDevkit && defaultSolution !== 'disable' && this._solutionFile === undefined) { if (defaultSolution !== '') { - this.openSolution(vscode.Uri.file(defaultSolution)); + await this.openSolution(vscode.Uri.file(defaultSolution)); } else { // Auto open if there is just one solution target; if there's more the one we'll just let the user pick with the picker. const solutionUris = await vscode.workspace.findFiles('**/*.sln', '**/node_modules/**', 2); if (solutionUris) { if (solutionUris.length === 1) { - this.openSolution(solutionUris[0]); + await this.openSolution(solutionUris[0]); } else if (solutionUris.length > 1) { // We have more than one solution, so we'll prompt the user to use the picker. const chosen = await vscode.window.showInformationMessage( @@ -478,14 +483,16 @@ export class RoslynLanguageServer { if (chosen) { if (chosen.action === 'disable') { - vscode.workspace.getConfiguration().update('dotnet.defaultSolution', 'disable', false); + await vscode.workspace + .getConfiguration() + .update('dotnet.defaultSolution', 'disable', false); } else { const chosenSolution: vscode.Uri | undefined = await vscode.commands.executeCommand( 'dotnet.openSolution' ); if (chosen.action === 'openAndSetDefault' && chosenSolution) { const relativePath = vscode.workspace.asRelativePath(chosenSolution); - vscode.workspace + await vscode.workspace .getConfiguration() .update('dotnet.defaultSolution', relativePath, false); } @@ -499,7 +506,7 @@ export class RoslynLanguageServer { omnisharpOptions.maxProjectResults ); - this.openProjects(projectUris); + await this.openProjects(projectUris); } } } @@ -517,7 +524,7 @@ export class RoslynLanguageServer { // then we have no projects, and so this extension won't have anything to do. if (exports.hasServerProcessLoaded()) { const pipeName = await exports.getBrokeredServiceServerPipeName(); - this._languageClient.sendNotification('serviceBroker/connect', { pipeName: pipeName }); + await this._languageClient.sendNotification('serviceBroker/connect', { pipeName: pipeName }); } else { // We'll subscribe if the process later launches, and call this function again to send the pipe name. this._context.subscriptions.push( @@ -591,7 +598,7 @@ export class RoslynLanguageServer { } // Set command enablement as soon as we know devkit is available. - vscode.commands.executeCommand('setContext', 'dotnet.server.activationContext', 'RoslynDevKit'); + await vscode.commands.executeCommand('setContext', 'dotnet.server.activationContext', 'RoslynDevKit'); const csharpDevKitArgs = this.getCSharpDevKitExportArgs(additionalExtensionPaths); args = args.concat(csharpDevKitArgs); @@ -602,7 +609,7 @@ export class RoslynLanguageServer { _channel.appendLine('Activating C# standalone...'); // Set command enablement to use roslyn standalone commands. - vscode.commands.executeCommand('setContext', 'dotnet.server.activationContext', 'Roslyn'); + await vscode.commands.executeCommand('setContext', 'dotnet.server.activationContext', 'Roslyn'); _wasActivatedWithCSharpDevkit = false; } @@ -824,7 +831,7 @@ export class RoslynLanguageServer { vscode.workspace.onDidOpenTextDocument(async (event) => { try { const buildIds = await this.getBuildOnlyDiagnosticIds(CancellationToken.None); - this._buildDiagnosticService._onFileOpened(event, buildIds); + await this._buildDiagnosticService._onFileOpened(event, buildIds); } catch (e) { if (e instanceof vscode.CancellationError) { // The request was cancelled (not due to us) - this means the server is no longer accepting requests @@ -850,14 +857,16 @@ export class RoslynLanguageServer { return; } - const title = vscode.l10n.t('Restart Language Server'); - const command = 'dotnet.restartServer'; + const title: CommandOption = { + title: vscode.l10n.t('Restart Language Server'), + command: 'dotnet.restartServer', + }; if (csharpDevkitExtension && !_wasActivatedWithCSharpDevkit) { // We previously started without C# Dev Kit and its now installed. // Offer a prompt to restart the server to use C# Dev Kit. _channel.appendLine(`Detected new installation of ${csharpDevkitExtensionId}`); const message = `Detected installation of ${csharpDevkitExtensionId}. Would you like to relaunch the language server for added features?`; - ShowInformationMessage(vscode, message, { title, command }); + showInformationMessage(vscode, message, title); } else { // Any other change to extensions is irrelevant - an uninstall requires a reload of the window // which will automatically restart this extension too. @@ -870,12 +879,14 @@ export class RoslynLanguageServer { // Subscribe to telemetry events so we can enable/disable as needed this._languageClient.addDisposable( vscode.env.onDidChangeTelemetryEnabled((_: boolean) => { - const title = vscode.l10n.t('Restart Language Server'); - const command = 'dotnet.restartServer'; + const restart: CommandOption = { + title: vscode.l10n.t('Restart Language Server'), + command: 'dotnet.restartServer', + }; const message = vscode.l10n.t( 'Detected change in telemetry settings. These will not take effect until the language server is restarted, would you like to restart?' ); - ShowInformationMessage(vscode, message, { title, command }); + showInformationMessage(vscode, message, restart); }) ); } @@ -931,17 +942,21 @@ export class RoslynLanguageServer { 'IntelliCode features will not be available, {0} failed to activate.', csharpDevkitIntelliCodeExtensionId ); - const showOutput = vscode.l10n.t('Go to output'); - const suppressNotification = vscode.l10n.t('Suppress notification'); - // Buttons are shown in right-to-left order, with a close button to the right of everything; - vscode.window.showErrorMessage(message, showOutput, suppressNotification).then((value) => { - if (value === showOutput) { + const showOutput: ActionOption = { + title: vscode.l10n.t('Go to output'), + action: async () => { _channel.show(); - } else if (value == suppressNotification) { - extensionContext.globalState.update(stateKey, true); - } - }); + }, + }; + const suppressNotification: ActionOption = { + title: vscode.l10n.t('Suppress notification'), + action: async () => { + await extensionContext.globalState.update(stateKey, true); + }, + }; + // Buttons are shown in right-to-left order, with a close button to the right of everything; + showErrorMessage(vscode, message, showOutput, suppressNotification); return []; } } @@ -1037,7 +1052,7 @@ export async function activateRoslynLanguageServer( ); registerLanguageStatusItems(context, languageServer, languageServerEvents); - await registerCopilotExtensionAsync(languageServer, _channel); + registerCopilotExtension(languageServer, _channel); // Register any commands that need to be handled by the extension. registerCommands(context, languageServer, hostExecutableResolver, _channel); diff --git a/src/lsptoolshost/services/buildResultReporterService.ts b/src/lsptoolshost/services/buildResultReporterService.ts index 81230f7c7..4b26a8196 100644 --- a/src/lsptoolshost/services/buildResultReporterService.ts +++ b/src/lsptoolshost/services/buildResultReporterService.ts @@ -25,6 +25,6 @@ export class BuildResultDiagnostics implements IBuildResultDiagnostics { public async reportBuildResult(buildDiagnostics: { [uri: string]: vscode.Diagnostic[] }): Promise { const langServer: RoslynLanguageServer = await this._languageServerPromise; const buildOnlyIds: string[] = await langServer.getBuildOnlyDiagnosticIds(CancellationToken.None); - langServer._buildDiagnosticService.setBuildDiagnostics(buildDiagnostics, buildOnlyIds); + await langServer._buildDiagnosticService.setBuildDiagnostics(buildDiagnostics, buildOnlyIds); } } diff --git a/src/lsptoolshost/services/projectContextService.ts b/src/lsptoolshost/services/projectContextService.ts index ddddba91a..577b04f82 100644 --- a/src/lsptoolshost/services/projectContextService.ts +++ b/src/lsptoolshost/services/projectContextService.ts @@ -29,12 +29,12 @@ export class ProjectContextService { }; constructor(private _languageServer: RoslynLanguageServer, _languageServerEvents: LanguageServerEvents) { - _languageServerEvents.onServerStateChange((e) => { + _languageServerEvents.onServerStateChange(async (e) => { // When the project initialization is complete, open files // could move from the miscellaneous workspace context into // an open project. if (e.state === ServerState.Stopped || e.state === ServerState.ProjectInitializationComplete) { - this.refresh(); + await this.refresh(); } }); diff --git a/src/lsptoolshost/showToastNotification.ts b/src/lsptoolshost/showToastNotification.ts index df57ac54f..f2e2c972c 100644 --- a/src/lsptoolshost/showToastNotification.ts +++ b/src/lsptoolshost/showToastNotification.ts @@ -7,50 +7,29 @@ import * as vscode from 'vscode'; import { RoslynLanguageClient } from './roslynLanguageClient'; import { MessageType } from 'vscode-languageserver-protocol'; import { ShowToastNotification } from './roslynProtocol'; +import { showErrorMessage, showInformationMessage, showWarningMessage } from '../shared/observers/utils/showMessage'; export function registerShowToastNotification(client: RoslynLanguageClient) { client.onNotification(ShowToastNotification.type, async (notification) => { - const messageOptions: vscode.MessageOptions = { - modal: false, - }; - const commands = notification.commands.map((command) => command.title); - const executeCommandByName = async (result: string | undefined) => { - if (result) { - const command = notification.commands.find((command) => command.title === result); - if (!command) { - throw new Error(`Unknown command ${result}`); - } - - if (command.arguments) { - await vscode.commands.executeCommand(command.command, ...command.arguments); - } else { - await vscode.commands.executeCommand(command.command); - } - } - }; + const buttonOptions = notification.commands.map((command) => { + return { + title: command.title, + command: command.command, + arguments: command.arguments, + }; + }); switch (notification.messageType) { case MessageType.Error: { - const result = await vscode.window.showErrorMessage(notification.message, messageOptions, ...commands); - executeCommandByName(result); + showErrorMessage(vscode, notification.message, ...buttonOptions); break; } case MessageType.Warning: { - const result = await vscode.window.showWarningMessage( - notification.message, - messageOptions, - ...commands - ); - executeCommandByName(result); + showWarningMessage(vscode, notification.message, ...buttonOptions); break; } default: { - const result = await vscode.window.showInformationMessage( - notification.message, - messageOptions, - ...commands - ); - executeCommandByName(result); + showInformationMessage(vscode, notification.message, ...buttonOptions); break; } } diff --git a/src/lsptoolshost/unitTesting.ts b/src/lsptoolshost/unitTesting.ts index 84cb1d844..27da8f892 100644 --- a/src/lsptoolshost/unitTesting.ts +++ b/src/lsptoolshost/unitTesting.ts @@ -11,6 +11,7 @@ import { RoslynLanguageServer } from './roslynLanguageServer'; import { RunTestsParams, RunTestsPartialResult, RunTestsRequest, TestProgress } from './roslynProtocol'; import { commonOptions } from '../shared/options'; import { UriConverter } from './uriConverter'; +import { showErrorMessage } from '../shared/observers/utils/showMessage'; export function registerUnitTestingCommands( context: vscode.ExtensionContext, @@ -68,7 +69,7 @@ async function runTests( dotnetTestChannel: vscode.OutputChannel ): Promise { if (_testRunInProgress) { - vscode.window.showErrorMessage(vscode.l10n.t('Test run already in progress')); + showErrorMessage(vscode, vscode.l10n.t('Test run already in progress')); return; } diff --git a/src/main.ts b/src/main.ts index 7e84e9f10..3e560dc32 100644 --- a/src/main.ts +++ b/src/main.ts @@ -40,6 +40,7 @@ import { BuildResultDiagnostics } from './lsptoolshost/services/buildResultRepor import { debugSessionTracker } from './coreclrDebug/provisionalDebugSessionTracker'; import { getComponentFolder } from './lsptoolshost/builtInComponents'; import { activateOmniSharpLanguageServer, ActivationResult } from './omnisharp/omnisharpLanguageServer'; +import { ActionOption, showErrorMessage } from './shared/observers/utils/showMessage'; export async function activate( context: vscode.ExtensionContext @@ -175,28 +176,28 @@ export async function activate( if (!isSupportedPlatform(platformInfo)) { // Check to see if VS Code is running remotely if (context.extension.extensionKind === vscode.ExtensionKind.Workspace) { - const setupButton = vscode.l10n.t('How to setup Remote Debugging'); + const setupButton: ActionOption = { + title: vscode.l10n.t('How to setup Remote Debugging'), + action: async () => { + const remoteDebugInfoURL = + 'https://github.com/dotnet/vscode-csharp/wiki/Remote-Debugging-On-Linux-Arm'; + await vscode.env.openExternal(vscode.Uri.parse(remoteDebugInfoURL)); + }, + }; const errorMessage = vscode.l10n.t( `The C# extension for Visual Studio Code is incompatible on {0} {1} with the VS Code Remote Extensions. To see avaliable workarounds, click on '{2}'.`, platformInfo.platform, platformInfo.architecture, - setupButton + setupButton.title ); - - await vscode.window.showErrorMessage(errorMessage, setupButton).then((selectedItem) => { - if (selectedItem === setupButton) { - const remoteDebugInfoURL = - 'https://github.com/dotnet/vscode-csharp/wiki/Remote-Debugging-On-Linux-Arm'; - vscode.env.openExternal(vscode.Uri.parse(remoteDebugInfoURL)); - } - }); + showErrorMessage(vscode, errorMessage, setupButton); } else { const errorMessage = vscode.l10n.t( 'The C# extension for Visual Studio Code is incompatible on {0} {1}.', platformInfo.platform, platformInfo.architecture ); - await vscode.window.showErrorMessage(errorMessage); + showErrorMessage(vscode, errorMessage); } // Unsupported platform @@ -294,10 +295,10 @@ function tryGetCSharpDevKitExtensionExports(csharpLogObserver: CsharpLoggerObser // Notify the vsdbg configuration provider that C# dev kit has been loaded. exports.serverProcessLoaded(async () => { - debugSessionTracker.onCsDevKitInitialized(await exports.getBrokeredServiceServerPipeName()); + await debugSessionTracker.onCsDevKitInitialized(await exports.getBrokeredServiceServerPipeName()); }); - vscode.commands.executeCommand('setContext', 'dotnet.debug.serviceBrokerAvailable', true); + await vscode.commands.executeCommand('setContext', 'dotnet.debug.serviceBrokerAvailable', true); } else { csharpLogObserver.logger.appendLine( `[ERROR] '${csharpDevkitExtensionId}' activated but did not return expected Exports.` diff --git a/src/omnisharp/engines/lspEngine.ts b/src/omnisharp/engines/lspEngine.ts index 1c2ec0e22..612487d17 100644 --- a/src/omnisharp/engines/lspEngine.ts +++ b/src/omnisharp/engines/lspEngine.ts @@ -247,7 +247,7 @@ export class LspEngine implements IEngine { }; const client = new LanguageClient('Omnisharp Server', serverOptions, clientOptions); - client.setTrace(Trace.Verbose); + await client.setTrace(Trace.Verbose); // The goal here is to disable all the features and light them up over time. const features: (StaticFeature | DynamicFeature)[] = (client as any)._features; diff --git a/src/omnisharp/features/commands.ts b/src/omnisharp/features/commands.ts index bbffef58a..98113385a 100644 --- a/src/omnisharp/features/commands.ts +++ b/src/omnisharp/features/commands.ts @@ -82,9 +82,9 @@ export default function registerCommands( async function restartOmniSharp(context: vscode.ExtensionContext, server: OmniSharpServer) { if (server.isRunning()) { - server.restart(); + await server.restart(); } else { - server.autoStart(''); + await server.autoStart(''); } } diff --git a/src/omnisharp/features/diagnosticsProvider.ts b/src/omnisharp/features/diagnosticsProvider.ts index 9bf31235a..2d31cbb0d 100644 --- a/src/omnisharp/features/diagnosticsProvider.ts +++ b/src/omnisharp/features/diagnosticsProvider.ts @@ -159,11 +159,11 @@ class OmniSharpDiagnosticsProvider extends AbstractSupport { } this._subscriptions.push( - this._validateAllPipe.pipe(debounceTime(3000)).subscribe(() => { + this._validateAllPipe.pipe(debounceTime(3000)).subscribe(async () => { if (this._validationAdvisor.shouldValidateAll()) { - this._validateEntireWorkspace(); + await this._validateEntireWorkspace(); } else if (this._validationAdvisor.shouldValidateFiles()) { - this._validateOpenDocuments(); + await this._validateOpenDocuments(); } }) ); diff --git a/src/omnisharp/features/dotnetTest.ts b/src/omnisharp/features/dotnetTest.ts index a7bf07204..e333f9fdd 100644 --- a/src/omnisharp/features/dotnetTest.ts +++ b/src/omnisharp/features/dotnetTest.ts @@ -704,7 +704,7 @@ class DebugEventListener { DebugEventListener.s_activeInstance = this; const serverSocket = net.createServer((socket) => { - socket.on('data', (buffer) => { + socket.on('data', async (buffer) => { let event: DebuggerEventsProtocol.DebuggerEvent; try { event = DebuggerEventsProtocol.decodePacket(buffer); @@ -717,19 +717,19 @@ class DebugEventListener { case DebuggerEventsProtocol.ProcessLaunched: { const processLaunchedEvent = event; this._eventStream.post(new DotNetTestDebugProcessStart(processLaunchedEvent.targetProcessId)); - this.onProcessLaunched(processLaunchedEvent.targetProcessId); + await this.onProcessLaunched(processLaunchedEvent.targetProcessId); break; } case DebuggerEventsProtocol.DebuggingStopped: this._eventStream.post(new DotNetTestDebugComplete()); - this.onDebuggingStopped(); + await this.onDebuggingStopped(); break; } }); - socket.on('end', () => { - this.onDebuggingStopped(); + socket.on('end', async () => { + await this.onDebuggingStopped(); }); }); @@ -792,7 +792,7 @@ class DebugEventListener { } } - private onDebuggingStopped(): void { + private async onDebuggingStopped(): Promise { if (this._isClosed) { return; } @@ -801,7 +801,7 @@ class DebugEventListener { FileName: this._fileName, }; try { - serverUtils.debugTestStop(this._server, request); + await serverUtils.debugTestStop(this._server, request); this.close(); } catch (_) { return; diff --git a/src/omnisharp/features/fixAllProvider.ts b/src/omnisharp/features/fixAllProvider.ts index e067b22a3..82296c676 100644 --- a/src/omnisharp/features/fixAllProvider.ts +++ b/src/omnisharp/features/fixAllProvider.ts @@ -13,6 +13,7 @@ import AbstractProvider from './abstractProvider'; import { LanguageMiddlewareFeature } from '../languageMiddlewareFeature'; import { buildEditForResponse } from '../fileOperationsResponseEditBuilder'; import { CancellationToken } from 'vscode-languageserver-protocol'; +import { showWarningMessage } from '../../shared/observers/utils/showMessage'; export class OmniSharpFixAllProvider extends AbstractProvider implements vscode.CodeActionProvider { public static fixAllCodeActionKind = vscode.CodeActionKind.SourceFixAll.append('csharp'); @@ -63,7 +64,7 @@ export class OmniSharpFixAllProvider extends AbstractProvider implements vscode. private async fixAllMenu(server: OmniSharpServer, scope: protocol.FixAllScope): Promise { const fileName = vscode.window.activeTextEditor?.document.fileName; if (fileName === undefined) { - vscode.window.showWarningMessage(vscode.l10n.t('Text editor must be focused to fix all issues')); + showWarningMessage(vscode, vscode.l10n.t('Text editor must be focused to fix all issues')); return; } diff --git a/src/omnisharp/features/virtualDocumentTracker.ts b/src/omnisharp/features/virtualDocumentTracker.ts index b46cf9d16..1fd67f63a 100644 --- a/src/omnisharp/features/virtualDocumentTracker.ts +++ b/src/omnisharp/features/virtualDocumentTracker.ts @@ -136,7 +136,9 @@ function logSynchronizationFailure(uri: Uri, error: any, server: OmniSharpServer } export default function trackVirtualDocuments(server: OmniSharpServer, eventStream: EventStream): IDisposable { - trackCurrentVirtualDocuments(server, eventStream); + trackCurrentVirtualDocuments(server, eventStream).catch((any) => { + throw new Error(`Failed to track current virtual documents: ${any}`); + }); const disposable = trackFutureVirtualDocuments(server, eventStream); return disposable; diff --git a/src/omnisharp/observers/errorMessageObserver.ts b/src/omnisharp/observers/errorMessageObserver.ts index 410098aa0..2ac535689 100644 --- a/src/omnisharp/observers/errorMessageObserver.ts +++ b/src/omnisharp/observers/errorMessageObserver.ts @@ -6,9 +6,9 @@ import { BaseEvent, IntegrityCheckFailure, ZipError } from '../../shared/loggingEvents'; import { DotNetTestRunFailure, DotNetTestDebugStartFailure } from '../omnisharpLoggingEvents'; import { vscode } from '../../vscodeAdapter'; -import showErrorMessage from '../../shared/observers/utils/showErrorMessage'; import { EventType } from '../../shared/eventType'; import { l10n } from 'vscode'; +import { showErrorMessage } from '../../shared/observers/utils/showMessage'; export class ErrorMessageObserver { constructor(private vscode: vscode) {} diff --git a/src/omnisharp/observers/informationMessageObserver.ts b/src/omnisharp/observers/informationMessageObserver.ts index 24ef9ca34..8579793fa 100644 --- a/src/omnisharp/observers/informationMessageObserver.ts +++ b/src/omnisharp/observers/informationMessageObserver.ts @@ -4,11 +4,11 @@ *--------------------------------------------------------------------------------------------*/ import { vscode } from '../../vscodeAdapter'; -import showInformationMessage from '../../shared/observers/utils/showInformationMessage'; import { EventType } from '../../shared/eventType'; import { omnisharpOptions } from '../../shared/options'; import { l10n } from 'vscode'; import { BaseEvent } from '../../shared/loggingEvents'; +import { CommandOption, showInformationMessage } from '../../shared/observers/utils/showMessage'; export class InformationMessageObserver { constructor(private vscode: vscode) {} @@ -21,16 +21,17 @@ export class InformationMessageObserver { } }; - private async handleOmnisharpServerUnresolvedDependencies() { + private handleOmnisharpServerUnresolvedDependencies() { //to do: determine if we need the unresolved dependencies message if (!omnisharpOptions.suppressDotnetRestoreNotification) { const message = l10n.t( `There are unresolved dependencies. Please execute the restore command to continue.` ); - return showInformationMessage(this.vscode, message, { + const buttonTitle: CommandOption = { title: l10n.t('Restore'), command: 'dotnet.restore.all', - }); + }; + showInformationMessage(this.vscode, message, buttonTitle); } } } diff --git a/src/omnisharp/observers/omnisharpChannelObserver.ts b/src/omnisharp/observers/omnisharpChannelObserver.ts index e5f5b9c1b..a47fd3d5c 100644 --- a/src/omnisharp/observers/omnisharpChannelObserver.ts +++ b/src/omnisharp/observers/omnisharpChannelObserver.ts @@ -29,7 +29,7 @@ export class OmnisharpChannelObserver extends BaseChannelObserver { } }; - private async handleOmnisharpServerOnStdErr() { + private handleOmnisharpServerOnStdErr() { if (omnisharpOptions.showOmnisharpLogOnError) { this.showChannel(true); } diff --git a/src/omnisharp/observers/telemetryObserver.ts b/src/omnisharp/observers/telemetryObserver.ts index a5477913a..35a29f3c1 100644 --- a/src/omnisharp/observers/telemetryObserver.ts +++ b/src/omnisharp/observers/telemetryObserver.ts @@ -33,11 +33,11 @@ export class TelemetryObserver { this.useModernNet = useModernNet; } - public post = (event: BaseEvent) => { + public post = async (event: BaseEvent) => { const telemetryProps = getTelemetryProps(this.platformInfo); switch (event.type) { case EventType.OmnisharpInitialisation: - this.handleOmnisharpInitialisation(event); + await this.handleOmnisharpInitialisation(event); break; case EventType.PackageInstallation: this.reporter.sendTelemetryEvent('AcquisitionStart'); diff --git a/src/omnisharp/observers/warningMessageObserver.ts b/src/omnisharp/observers/warningMessageObserver.ts index 415554967..2b4073ffe 100644 --- a/src/omnisharp/observers/warningMessageObserver.ts +++ b/src/omnisharp/observers/warningMessageObserver.ts @@ -9,18 +9,22 @@ import { BaseEvent } from '../../shared/loggingEvents'; import { OmnisharpServerMsBuildProjectDiagnostics } from '../omnisharpLoggingEvents'; import { Scheduler, Subject } from 'rxjs'; -import showWarningMessage from '../../shared/observers/utils/showWarningMessage'; import { EventType } from '../../shared/eventType'; import { l10n } from 'vscode'; +import { CommandOption, showWarningMessage } from '../../shared/observers/utils/showMessage'; export class WarningMessageObserver { private warningMessageDebouncer: Subject; constructor(private vscode: vscode, private disableMsBuildDiagnosticWarning: () => boolean, scheduler?: Scheduler) { this.warningMessageDebouncer = new Subject(); - this.warningMessageDebouncer.pipe(debounceTime(1500, scheduler)).subscribe(async (_) => { + this.warningMessageDebouncer.pipe(debounceTime(1500, scheduler)).subscribe((_) => { const message = l10n.t('Some projects have trouble loading. Please review the output for more details.'); - await showWarningMessage(this.vscode, message, { title: l10n.t('Show Output'), command: 'o.showOutput' }); + const buttonTitle: CommandOption = { + title: l10n.t('Show Output'), + command: 'o.showOutput', + }; + showWarningMessage(this.vscode, message, buttonTitle); }); } diff --git a/src/omnisharp/omnisharpLanguageServer.ts b/src/omnisharp/omnisharpLanguageServer.ts index 19aed0d44..9fa3399b3 100644 --- a/src/omnisharp/omnisharpLanguageServer.ts +++ b/src/omnisharp/omnisharpLanguageServer.ts @@ -50,6 +50,7 @@ import { ITelemetryReporter } from '../shared/telemetryReporter'; import { Observable } from 'rxjs'; import { registerOmnisharpOptionChanges } from './omnisharpOptionChanges'; import { CSharpLoggerObserver } from './observers/csharpLoggerObserver'; +import { showWarningMessage } from '../shared/observers/utils/showMessage'; export interface ActivationResult { readonly server: OmniSharpServer; @@ -249,16 +250,15 @@ async function activate( const csharpConfig = vscode.workspace.getConfiguration('csharp'); if (!csharpConfig.get('suppressProjectJsonWarning')) { disposables.add( - server.onServerStart(() => { - utils.requestWorkspaceInformation(server).then((workspaceInfo) => { + server.onServerStart(async () => { + await utils.requestWorkspaceInformation(server).then((workspaceInfo) => { if (workspaceInfo.DotNet && workspaceInfo.DotNet.Projects.length > 0) { const shortMessage = vscode.l10n.t( 'project.json is no longer a supported project format for .NET Core applications.' ); - const moreDetailItem: vscode.MessageItem = { title: vscode.l10n.t('More Detail') }; - vscode.window.showWarningMessage(shortMessage, moreDetailItem).then((_) => { - eventStream.post(new ProjectJsonDeprecatedWarning()); - }); + const moreDetailItem = vscode.l10n.t('More Detail'); + eventStream.post(new ProjectJsonDeprecatedWarning()); + showWarningMessage(vscode, shortMessage, moreDetailItem); } }); }) @@ -267,10 +267,10 @@ async function activate( // Send telemetry about the sorts of projects the server was started on. disposables.add( - server.onServerStart(() => { + server.onServerStart(async () => { const measures: { [key: string]: number } = {}; - utils.requestWorkspaceInformation(server).then((workspaceInfo) => { + await utils.requestWorkspaceInformation(server).then((workspaceInfo) => { if (workspaceInfo.DotNet && workspaceInfo.DotNet.Projects.length > 0) { measures['projectjson.projectcount'] = workspaceInfo.DotNet.Projects.length; measures['projectjson.filecount'] = sum(workspaceInfo.DotNet.Projects, (p) => @@ -299,18 +299,21 @@ async function activate( ); disposables.add( - server.onBeforeServerStart((path) => { + server.onBeforeServerStart(async (path) => { if (razorOptions.razorDevMode) { eventStream.post(new RazorDevModeActive()); } // read and store last solution or folder path - context.workspaceState.update('lastSolutionPathOrFolder', path); + await context.workspaceState.update('lastSolutionPathOrFolder', path); }) ); if (omnisharpOptions.autoStart) { - server.autoStart(context.workspaceState.get('lastSolutionPathOrFolder', '')); + // We intentionally do not await this as we don't want to block activation on the server starting. + server.autoStart(context.workspaceState.get('lastSolutionPathOrFolder', '')).catch((err) => { + throw err; + }); } // stop server on deactivate @@ -318,7 +321,7 @@ async function activate( new Disposable(() => { testManager.dispose(); advisor.dispose(); - server.stop(); + server.stop().catch((err) => console.error(err)); }) ); diff --git a/src/omnisharp/omnisharpOptionChanges.ts b/src/omnisharp/omnisharpOptionChanges.ts index 7b56b8eb7..880f9e742 100644 --- a/src/omnisharp/omnisharpOptionChanges.ts +++ b/src/omnisharp/omnisharpOptionChanges.ts @@ -6,9 +6,9 @@ import * as vscode from 'vscode'; import { HandleOptionChanges, OptionChangeObserver } from '../shared/observers/optionChangeObserver'; import { CommonOptionsThatTriggerReload, OmnisharpOptionsThatTriggerReload } from '../shared/options'; -import ShowInformationMessage from '../shared/observers/utils/showInformationMessage'; import { Observable } from 'rxjs'; import Disposable from '../disposable'; +import { CommandOption, showInformationMessage } from '../shared/observers/utils/showMessage'; export function registerOmnisharpOptionChanges(optionObservable: Observable): Disposable { const optionChangeObserver: OptionChangeObserver = { @@ -21,16 +21,17 @@ export function registerOmnisharpOptionChanges(optionObservable: Observable key === 'useOmnisharpServer')) { + const reload: CommandOption = { + title: vscode.l10n.t('Reload Window'), + command: 'workbench.action.reloadWindow', + }; // If the user has changed the useOmnisharpServer flag we need to reload the window. - ShowInformationMessage( + showInformationMessage( vscode, vscode.l10n.t( 'dotnet.server.useOmnisharp option has changed. Please reload the window to apply the change' ), - { - title: vscode.l10n.t('Reload Window'), - command: 'workbench.action.reloadWindow', - } + reload ); return; } @@ -38,9 +39,11 @@ export function registerOmnisharpOptionChanges(optionObservable: Observable { if (downloadSdk === PromptResult.Yes) { const dotnetcoreURL = 'https://dot.net/core-sdk-vscode'; - vscode.env.openExternal(vscode.Uri.parse(dotnetcoreURL)); + await vscode.env.openExternal(vscode.Uri.parse(dotnetcoreURL)); } else if (downloadSdk === PromptResult.No) { - vscode.commands.executeCommand('workbench.action.openGlobalSettings'); + await vscode.commands.executeCommand('workbench.action.openGlobalSettings'); } return false; @@ -40,9 +40,9 @@ export async function validateRequirements(): Promise { if (downloadMono === PromptResult.Yes) { const monoURL = 'https://www.mono-project.com/download/stable/'; - vscode.env.openExternal(vscode.Uri.parse(monoURL)); + await vscode.env.openExternal(vscode.Uri.parse(monoURL)); } else if (downloadMono === PromptResult.No) { - vscode.commands.executeCommand('workbench.action.openGlobalSettings'); + await vscode.commands.executeCommand('workbench.action.openGlobalSettings'); } return false; @@ -108,7 +108,7 @@ async function promptToDownloadDotNetSDK() { const yesItem: PromptItem = { title: 'Get the SDK', result: PromptResult.Yes }; const noItem: PromptItem = { title: 'Open settings', result: PromptResult.No, isCloseAffordance: true }; - vscode.window + void vscode.window .showErrorMessage(message, messageOptions, noItem, yesItem) .then((selection) => resolve(selection?.result ?? PromptResult.Dismissed)); }); @@ -129,7 +129,7 @@ async function promptToDownloadMono() { isCloseAffordance: true, }; - vscode.window + void vscode.window .showErrorMessage(message, messageOptions, noItem, yesItem) .then((selection) => resolve(selection?.result ?? PromptResult.Dismissed)); }); diff --git a/src/omnisharp/server.ts b/src/omnisharp/server.ts index 1e19bb9e1..95e8b57cf 100644 --- a/src/omnisharp/server.ts +++ b/src/omnisharp/server.ts @@ -127,8 +127,8 @@ export class OmniSharpServer { extensionPath ); this._omnisharpManager = new OmnisharpManager(downloader, platformInfo); - this.updateProjectDebouncer.pipe(debounceTime(1500)).subscribe((_) => { - this.updateProjectInfo(); + this.updateProjectDebouncer.pipe(debounceTime(1500)).subscribe(async (_) => { + await this.updateProjectInfo(); }); this.firstUpdateProject = true; } @@ -608,12 +608,12 @@ export class OmniSharpServer { return this._addListener(Events.ProjectConfiguration, listener); } - private debounceUpdateProjectWithLeadingTrue = () => { + private debounceUpdateProjectWithLeadingTrue = async () => { // Call the updateProjectInfo directly if it is the first time, otherwise debounce the request // This needs to be done so that we have a project information for the first incoming request if (this.firstUpdateProject) { - this.updateProjectInfo(); + await this.updateProjectInfo(); } else { this.updateProjectDebouncer.next(new ObservableEvents.ProjectModified()); } diff --git a/src/razor/razor.ts b/src/razor/razor.ts index 9aedc03f2..8223d4815 100644 --- a/src/razor/razor.ts +++ b/src/razor/razor.ts @@ -11,6 +11,7 @@ import * as Razor from '../../src/razor/src/extension'; import { EventStream } from '../eventStream'; import TelemetryReporter from '@vscode/extension-telemetry'; import { PlatformInformation } from '../shared/platform'; +import { showWarningMessage } from '../shared/observers/utils/showMessage'; export async function activateRazorExtension( context: vscode.ExtensionContext, @@ -52,7 +53,8 @@ export async function activateRazorExtension( ); } } else { - vscode.window.showWarningMessage( + showWarningMessage( + vscode, vscode.l10n.t( "Cannot load Razor language server because the directory was not found: '{0}'", languageServerDir diff --git a/src/razor/src/blazorDebug/blazorDebugConfigurationProvider.ts b/src/razor/src/blazorDebug/blazorDebugConfigurationProvider.ts index 8c6e505b0..028ec84cf 100644 --- a/src/razor/src/blazorDebug/blazorDebugConfigurationProvider.ts +++ b/src/razor/src/blazorDebug/blazorDebugConfigurationProvider.ts @@ -12,8 +12,7 @@ import { ChromeBrowserFinder, EdgeBrowserFinder } from '@vscode/js-debug-browser import { RazorLogger } from '../razorLogger'; import { JS_DEBUG_NAME, SERVER_APP_NAME } from './constants'; import { onDidTerminateDebugSession } from './terminateDebugHandler'; -import showInformationMessage from '../../../shared/observers/utils/showInformationMessage'; -import showErrorMessage from '../../../shared/observers/utils/showErrorMessage'; +import { ActionOption, showErrorMessage, showInformationMessage } from '../../../shared/observers/utils/showMessage'; export class BlazorDebugConfigurationProvider implements vscode.DebugConfigurationProvider { private static readonly autoDetectUserNotice: string = vscode.l10n.t( @@ -168,14 +167,15 @@ export class BlazorDebugConfigurationProvider implements vscode.DebugConfigurati const message = vscode.l10n.t( 'There was an unexpected error while launching your debugging session. Check the console for helpful logs and visit the debugging docs for more info.' ); - const viewDebugDocsButton = vscode.l10n.t('View Debug Docs'); - const ignoreButton = vscode.l10n.t('Ignore'); - this.vscodeType.window.showErrorMessage(message, viewDebugDocsButton, ignoreButton).then(async (result) => { - if (result === viewDebugDocsButton) { + const viewDebugDocsButton: ActionOption = { + title: vscode.l10n.t('View Debug Docs'), + action: async () => { const debugDocsUri = 'https://aka.ms/blazorwasmcodedebug'; await this.vscodeType.commands.executeCommand(`vcode.open`, debugDocsUri); - } - }); + }, + }; + const ignoreButton = vscode.l10n.t('Ignore'); + showErrorMessage(this.vscodeType, message, viewDebugDocsButton, ignoreButton); } } diff --git a/src/razor/src/configurationChangeListener.ts b/src/razor/src/configurationChangeListener.ts index acb6cec92..aae277e6e 100644 --- a/src/razor/src/configurationChangeListener.ts +++ b/src/razor/src/configurationChangeListener.ts @@ -6,6 +6,7 @@ import * as vscode from 'vscode'; import { RazorLanguageServerClient } from './razorLanguageServerClient'; import { RazorLogger } from './razorLogger'; +import { ActionOption, showInformationMessage } from '../../shared/observers/utils/showMessage'; export function listenToConfigurationChanges(languageServerClient: RazorLanguageServerClient): vscode.Disposable { return vscode.workspace.onDidChangeConfiguration((event) => { @@ -19,15 +20,13 @@ function razorTraceConfigurationChangeHandler(languageServerClient: RazorLanguag const promptText: string = vscode.l10n.t( 'Would you like to restart the Razor Language Server to enable the Razor trace configuration change?' ); - const restartButtonText = vscode.l10n.t('Restart'); - - vscode.window.showInformationMessage(promptText, restartButtonText).then(async (result) => { - if (result !== restartButtonText) { - return; - } - - await languageServerClient.stop(); - languageServerClient.updateTraceLevel(); - await languageServerClient.start(); - }); + const restartButtonText: ActionOption = { + title: vscode.l10n.t('Restart'), + action: async () => { + await languageServerClient.stop(); + languageServerClient.updateTraceLevel(); + await languageServerClient.start(); + }, + }; + showInformationMessage(vscode, promptText, restartButtonText); } diff --git a/src/razor/src/csharp/csharpPreviewPanel.ts b/src/razor/src/csharp/csharpPreviewPanel.ts index 3c942bd1c..80b0487ee 100644 --- a/src/razor/src/csharp/csharpPreviewPanel.ts +++ b/src/razor/src/csharp/csharpPreviewPanel.ts @@ -8,6 +8,7 @@ import { IRazorDocumentChangeEvent } from '../document/IRazorDocumentChangeEvent import { RazorDocumentChangeKind } from '../document/razorDocumentChangeKind'; import { RazorDocumentManager } from '../document/razorDocumentManager'; import { getUriPath } from '../uriPaths'; +import { showErrorMessage, showInformationMessage } from '../../../shared/observers/utils/showMessage'; export class CSharpPreviewPanel { public static readonly viewType = 'razorCSharpPreview'; @@ -61,7 +62,7 @@ export class CSharpPreviewPanel { private attachToCurrentPanel() { if (!this.panel) { - vscode.window.showErrorMessage(vscode.l10n.t('Unexpected error when attaching to C# preview window.')); + showErrorMessage(vscode, vscode.l10n.t('Unexpected error when attaching to C# preview window.')); return; } @@ -73,7 +74,7 @@ export class CSharpPreviewPanel { } await vscode.env.clipboard.writeText(this.csharpContent); - vscode.window.showInformationMessage(vscode.l10n.t('Razor C# copied to clipboard')); + showInformationMessage(vscode, vscode.l10n.t('Razor C# copied to clipboard')); return; } }); diff --git a/src/razor/src/diagnostics/reportIssuePanel.ts b/src/razor/src/diagnostics/reportIssuePanel.ts index 982e36263..83551174a 100644 --- a/src/razor/src/diagnostics/reportIssuePanel.ts +++ b/src/razor/src/diagnostics/reportIssuePanel.ts @@ -9,6 +9,7 @@ import { LogLevel } from '../logLevel'; import { ReportIssueCreator } from './reportIssueCreator'; import { ReportIssueDataCollector } from './reportIssueDataCollector'; import { ReportIssueDataCollectorFactory } from './reportIssueDataCollectorFactory'; +import { showErrorMessage, showInformationMessage } from '../../../shared/observers/utils/showMessage'; export class ReportIssuePanel { public static readonly viewType = 'razorReportIssue'; @@ -52,9 +53,7 @@ export class ReportIssuePanel { private attachToCurrentPanel() { if (!this.panel) { - vscode.window.showErrorMessage( - vscode.l10n.t('Unexpected error when attaching to report Razor issue window.') - ); + showErrorMessage(vscode, vscode.l10n.t('Unexpected error when attaching to report Razor issue window.')); return; } @@ -63,7 +62,8 @@ export class ReportIssuePanel { case 'copyIssue': if (!this.issueContent) { if (!this.dataCollector) { - vscode.window.showErrorMessage( + showErrorMessage( + vscode, vscode.l10n.t('You must first start the data collection before copying.') ); return; @@ -74,7 +74,7 @@ export class ReportIssuePanel { } await vscode.env.clipboard.writeText(this.issueContent); - vscode.window.showInformationMessage(vscode.l10n.t('Razor issue copied to clipboard')); + showInformationMessage(vscode, vscode.l10n.t('Razor issue copied to clipboard')); return; case 'startIssue': if (this.dataCollector) { @@ -83,19 +83,22 @@ export class ReportIssuePanel { } this.issueContent = undefined; this.dataCollector = this.dataCollectorFactory.create(); - vscode.window.showInformationMessage( + showInformationMessage( + vscode, vscode.l10n.t('Razor issue data collection started. Reproduce the issue then press "Stop"') ); return; case 'stopIssue': if (!this.dataCollector) { - vscode.window.showErrorMessage( + showErrorMessage( + vscode, vscode.l10n.t('You must first start the data collection before stopping.') ); return; } this.dataCollector.stop(); - vscode.window.showInformationMessage( + showInformationMessage( + vscode, vscode.l10n.t('Razor issue data collection stopped. Copying issue content...') ); return; diff --git a/src/razor/src/document/razorDocumentManager.ts b/src/razor/src/document/razorDocumentManager.ts index 253034487..066073f40 100644 --- a/src/razor/src/document/razorDocumentManager.ts +++ b/src/razor/src/document/razorDocumentManager.ts @@ -179,8 +179,8 @@ export class RazorDocumentManager implements IRazorDocumentManager { this.razorDocumentGenerationInitialized = true; const pipeName = generateUuid(); - vscode.commands.executeCommand(razorInitializeCommand, pipeName); - this.serverClient.connectNamedPipe(pipeName); + await vscode.commands.executeCommand(razorInitializeCommand, pipeName); + await this.serverClient.connectNamedPipe(pipeName); for (const document of this.documents) { await this.ensureDocumentAndProjectedDocumentsOpen(document); @@ -193,11 +193,13 @@ export class RazorDocumentManager implements IRazorDocumentManager { private closeDocument(uri: vscode.Uri) { const document = this._getDocument(uri); - // Files outside of the workspace will return undefined from getWorkspaceFolder - const workspaceFolder = vscode.workspace.getWorkspaceFolder(uri); - if (!workspaceFolder) { - // Out of workspace files should be removed once they're closed - this.removeDocument(uri); + // Documents that are files should be removed if they are outside the workspace folder + if (uri.scheme === 'file') { + // Files outside of the workspace will return undefined from getWorkspaceFolder + const workspaceFolder = vscode.workspace.getWorkspaceFolder(uri); + if (!workspaceFolder) { + this.removeDocument(uri); + } } this.notifyDocumentChange(document, RazorDocumentChangeKind.closed); diff --git a/src/razor/src/dynamicFile/dynamicFileInfoHandler.ts b/src/razor/src/dynamicFile/dynamicFileInfoHandler.ts index b84afa81f..9a91d1375 100644 --- a/src/razor/src/dynamicFile/dynamicFileInfoHandler.ts +++ b/src/razor/src/dynamicFile/dynamicFileInfoHandler.ts @@ -30,7 +30,7 @@ export class DynamicFileInfoHandler { vscode.commands.registerCommand( DynamicFileInfoHandler.removeDynamicFileInfoCommand, async (request: RemoveDynamicFileParams) => { - this.removeDynamicFileInfo(request); + await this.removeDynamicFileInfo(request); } ); } diff --git a/src/razor/src/html/htmlPreviewPanel.ts b/src/razor/src/html/htmlPreviewPanel.ts index 82a1778f0..8f79f6456 100644 --- a/src/razor/src/html/htmlPreviewPanel.ts +++ b/src/razor/src/html/htmlPreviewPanel.ts @@ -8,6 +8,7 @@ import { IRazorDocumentChangeEvent } from '../document/IRazorDocumentChangeEvent import { RazorDocumentChangeKind } from '../document/razorDocumentChangeKind'; import { RazorDocumentManager } from '../document/razorDocumentManager'; import { getUriPath } from '../uriPaths'; +import { showErrorMessage, showInformationMessage } from '../../../shared/observers/utils/showMessage'; export class HtmlPreviewPanel { public static readonly viewType = 'razorHtmlPreview'; @@ -61,7 +62,7 @@ export class HtmlPreviewPanel { private attachToCurrentPanel() { if (!this.panel) { - vscode.window.showErrorMessage(vscode.l10n.t('Unexpected error when attaching to HTML preview window.')); + showErrorMessage(vscode, vscode.l10n.t('Unexpected error when attaching to HTML preview window.')); return; } @@ -73,7 +74,7 @@ export class HtmlPreviewPanel { } await vscode.env.clipboard.writeText(this.htmlContent); - vscode.window.showInformationMessage(vscode.l10n.t('Razor HTML copied to clipboard')); + showInformationMessage(vscode, vscode.l10n.t('Razor HTML copied to clipboard')); return; } }); diff --git a/src/razor/src/html/htmlTagCompletionProvider.ts b/src/razor/src/html/htmlTagCompletionProvider.ts index aef25c419..6ea3f6104 100644 --- a/src/razor/src/html/htmlTagCompletionProvider.ts +++ b/src/razor/src/html/htmlTagCompletionProvider.ts @@ -166,12 +166,12 @@ export class HtmlTagCompletionProvider { const selections = activeEditor.selections; if (selections.length && selections.some((s) => s.active.isEqual(position))) { - activeEditor.insertSnippet( + await activeEditor.insertSnippet( new vscode.SnippetString(tagCompletion), selections.map((s) => s.active) ); } else { - activeEditor.insertSnippet(new vscode.SnippetString(tagCompletion), position); + await activeEditor.insertSnippet(new vscode.SnippetString(tagCompletion), position); } }, 75); } diff --git a/src/razor/src/razorLanguageServerClient.ts b/src/razor/src/razorLanguageServerClient.ts index 64ecbeb55..141052c0e 100644 --- a/src/razor/src/razorLanguageServerClient.ts +++ b/src/razor/src/razorLanguageServerClient.ts @@ -17,6 +17,7 @@ import { RazorLogger } from './razorLogger'; import { TelemetryReporter as RazorTelemetryReporter } from './telemetryReporter'; import TelemetryReporter from '@vscode/extension-telemetry'; import { randomUUID } from 'crypto'; +import { showErrorMessage } from '../../shared/observers/utils/showMessage'; const events = { ServerStop: 'ServerStop', @@ -129,7 +130,8 @@ export class RazorLanguageServerClient implements vscode.Disposable { // the language client will handle that. didChangeStateDisposable.dispose(); } catch (error) { - vscode.window.showErrorMessage( + showErrorMessage( + vscode, vscode.l10n.t( "Razor Language Server failed to start unexpectedly, please check the 'Razor Log' and report an issue." ) @@ -206,7 +208,8 @@ export class RazorLanguageServerClient implements vscode.Disposable { resolve(); } catch (error) { - vscode.window.showErrorMessage( + showErrorMessage( + vscode, vscode.l10n.t( "Razor Language Server failed to stop correctly, please check the 'Razor Log' and report an issue." ) diff --git a/src/shared/assets.ts b/src/shared/assets.ts index 41a7db31d..460a0bce9 100644 --- a/src/shared/assets.ts +++ b/src/shared/assets.ts @@ -14,6 +14,7 @@ import * as vscode from 'vscode'; import { tolerantParse } from '../json'; import { IWorkspaceDebugInformationProvider, ProjectDebugInformation } from './IWorkspaceDebugInformationProvider'; +import { showErrorMessage } from './observers/utils/showMessage'; type DebugConsoleOptions = { console: string }; @@ -572,7 +573,7 @@ export async function getBuildOperations(generator: AssetGenerator): Promise { - return new Promise((resolve, _) => { - getExistingAssets(generator).then((res) => { - if (res.length > 0) { - const yesItem = { title: vscode.l10n.t('Yes') }; - const cancelItem = { title: vscode.l10n.t('Cancel'), isCloseAffordance: true }; - vscode.window - .showWarningMessage(vscode.l10n.t('Replace existing build and debug assets?'), cancelItem, yesItem) - .then((selection) => { - if (selection === yesItem) { - resolve(true); - } else { - // The user clicked cancel - resolve(false); - } - }); - } else { - // The assets don't exist, so we're good to go. - resolve(true); - } - }); + return new Promise((resolve, reject) => { + getExistingAssets(generator).then( + (res) => { + if (res.length > 0) { + const yesItem = { title: vscode.l10n.t('Yes') }; + const cancelItem = { title: vscode.l10n.t('Cancel'), isCloseAffordance: true }; + vscode.window + .showWarningMessage( + vscode.l10n.t('Replace existing build and debug assets?'), + cancelItem, + yesItem + ) + .then((selection) => { + if (selection === yesItem) { + resolve(true); + } else { + // The user clicked cancel + resolve(false); + } + }); + } else { + // The assets don't exist, so we're good to go. + resolve(true); + } + }, + (err) => reject(err) + ); }); } @@ -925,7 +933,8 @@ export async function generateAssets( await fs.ensureDir(generator.vscodeFolder); await addAssets(generator, operations); } else { - await vscode.window.showErrorMessage( + showErrorMessage( + vscode, vscode.l10n.t( `Could not locate .NET Core project in '{0}'. Assets were not generated.`, workspaceFolder.name @@ -934,9 +943,7 @@ export async function generateAssets( } } } catch (err) { - await vscode.window.showErrorMessage( - vscode.l10n.t('Unable to generate assets to build and debug. {0}.', `${err}`) - ); + showErrorMessage(vscode, vscode.l10n.t('Unable to generate assets to build and debug. {0}.', `${err}`)); } } diff --git a/src/shared/configurationProvider.ts b/src/shared/configurationProvider.ts index 9ff342ac4..8c4360ef6 100644 --- a/src/shared/configurationProvider.ts +++ b/src/shared/configurationProvider.ts @@ -7,7 +7,6 @@ import * as vscode from 'vscode'; import { ParsedEnvironmentFile } from '../coreclrDebug/parsedEnvironmentFile'; import { debugSessionTracker } from '../coreclrDebug/provisionalDebugSessionTracker'; -import { MessageItem } from '../vscodeAdapter'; import { CertToolStatusCodes, createSelfSignedCert, hasDotnetDevCertsHttps } from '../utils/dotnetDevCertsHttps'; import { AttachItem, @@ -18,6 +17,12 @@ import { import { PlatformInformation } from './platform'; import { getCSharpDevKit } from '../utils/getCSharpDevKit'; import { commonOptions } from './options'; +import { + ActionOption, + showErrorMessageWithOptions, + showInformationMessage, + showWarningMessage, +} from './observers/utils/showMessage'; /** * Class used for debug configurations that will be sent to the debugger registered by {@link DebugAdapterExecutableFactory} @@ -121,7 +126,7 @@ export class BaseVsDbgConfigurationProvider implements vscode.DebugConfiguration } } } else { - vscode.window.showErrorMessage(vscode.l10n.t('No process was selected.'), { modal: true }); + showErrorMessageWithOptions(vscode, vscode.l10n.t('No process was selected.'), { modal: true }); return undefined; } } @@ -145,7 +150,7 @@ export class BaseVsDbgConfigurationProvider implements vscode.DebugConfiguration } if (debugConfiguration.checkForDevCert) { - this.checkForDevCerts(commonOptions.dotnetPath); + await this.checkForDevCerts(commonOptions.dotnetPath); } } @@ -163,7 +168,7 @@ export class BaseVsDbgConfigurationProvider implements vscode.DebugConfiguration // show error message if single lines cannot get parsed if (parsedFile.Warning) { - this.showFileWarningAsync(parsedFile.Warning, envFile); + this.showFileWarning(parsedFile.Warning, envFile); } config.env = parsedFile.Env; @@ -177,13 +182,15 @@ export class BaseVsDbgConfigurationProvider implements vscode.DebugConfiguration return config; } - private async showFileWarningAsync(message: string, fileName: string) { - const openItem: MessageItem = { title: vscode.l10n.t('Open envFile') }; - const result = await vscode.window.showWarningMessage(message, openItem); - if (result?.title === openItem.title) { - const doc = await vscode.workspace.openTextDocument(fileName); - await vscode.window.showTextDocument(doc); - } + private showFileWarning(message: string, fileName: string) { + const openItem: ActionOption = { + title: vscode.l10n.t('Open envFile'), + action: async () => { + const doc = await vscode.workspace.openTextDocument(fileName); + await vscode.window.showTextDocument(doc); + }, + }; + showWarningMessage(vscode, message, openItem); } private loadSettingDebugOptions(debugConfiguration: vscode.DebugConfiguration): void { @@ -226,58 +233,69 @@ export class BaseVsDbgConfigurationProvider implements vscode.DebugConfiguration } } - private checkForDevCerts(dotnetPath: string) { - hasDotnetDevCertsHttps(dotnetPath).then(async (returnData) => { + private async checkForDevCerts(dotnetPath: string) { + await hasDotnetDevCertsHttps(dotnetPath).then(async (returnData) => { const errorCode = returnData.error?.code; if ( errorCode === CertToolStatusCodes.CertificateNotTrusted || errorCode === CertToolStatusCodes.ErrorNoValidCertificateFound ) { - const labelYes = vscode.l10n.t('Yes'); + const labelYes: ActionOption = { + title: vscode.l10n.t('Yes'), + action: async () => { + const returnData = await createSelfSignedCert(dotnetPath); + if (returnData.error === null) { + // if the process returns 0, returnData.error is null, otherwise the return code can be accessed in returnData.error.code + const message = + errorCode === CertToolStatusCodes.CertificateNotTrusted ? 'trusted' : 'created'; + showInformationMessage( + vscode, + vscode.l10n.t('Self-signed certificate sucessfully {0}', message) + ); + } else { + this.csharpOutputChannel.appendLine( + vscode.l10n.t( + `Couldn't create self-signed certificate. {0}\ncode: {1}\nstdout: {2}`, + returnData.error.message, + `${returnData.error.code}`, + returnData.stdout + ) + ); + + const labelShowOutput: ActionOption = { + title: vscode.l10n.t('Show Output'), + action: async () => { + this.csharpOutputChannel.show(); + }, + }; + showWarningMessage( + vscode, + vscode.l10n.t( + "Couldn't create self-signed certificate. See output for more information." + ), + labelShowOutput + ); + } + }, + }; const labelNotNow = vscode.l10n.t('Not Now'); - const labelMoreInfo = vscode.l10n.t('More Information'); - - const result = await vscode.window.showInformationMessage( + const labelMoreInfo: ActionOption = { + title: vscode.l10n.t('More Information'), + action: async () => { + const launchjsonDescriptionURL = 'https://aka.ms/VSCode-CS-CheckForDevCert'; + await vscode.env.openExternal(vscode.Uri.parse(launchjsonDescriptionURL)); + await this.checkForDevCerts(dotnetPath); + }, + }; + showInformationMessage( + vscode, vscode.l10n.t( 'The selected launch configuration is configured to launch a web browser but no trusted development certificate was found. Create a trusted self-signed certificate?' ), - { title: labelYes }, - { title: labelNotNow, isCloseAffordance: true }, - { title: labelMoreInfo } + labelYes, + labelNotNow, + labelMoreInfo ); - if (result?.title === labelYes) { - const returnData = await createSelfSignedCert(dotnetPath); - if (returnData.error === null) { - //if the prcess returns 0, returnData.error is null, otherwise the return code can be acessed in returnData.error.code - const message = errorCode === CertToolStatusCodes.CertificateNotTrusted ? 'trusted' : 'created'; - vscode.window.showInformationMessage( - vscode.l10n.t('Self-signed certificate sucessfully {0}', message) - ); - } else { - this.csharpOutputChannel.appendLine( - vscode.l10n.t( - `Couldn't create self-signed certificate. {0}\ncode: {1}\nstdout: {2}`, - returnData.error.message, - `${returnData.error.code}`, - returnData.stdout - ) - ); - - const labelShowOutput = vscode.l10n.t('Show Output'); - const result = await vscode.window.showWarningMessage( - vscode.l10n.t("Couldn't create self-signed certificate. See output for more information."), - labelShowOutput - ); - if (result === labelShowOutput) { - this.csharpOutputChannel.show(); - } - } - } - if (result?.title === labelMoreInfo) { - const launchjsonDescriptionURL = 'https://aka.ms/VSCode-CS-CheckForDevCert'; - vscode.env.openExternal(vscode.Uri.parse(launchjsonDescriptionURL)); - this.checkForDevCerts(dotnetPath); - } } }); } diff --git a/src/shared/dotnetConfigurationProvider.ts b/src/shared/dotnetConfigurationProvider.ts index b62fa29c9..d07e5449a 100644 --- a/src/shared/dotnetConfigurationProvider.ts +++ b/src/shared/dotnetConfigurationProvider.ts @@ -171,10 +171,10 @@ export class DotnetConfigurationResolver implements vscode.DebugConfigurationPro } else if (debugConfigArray.length === 2) { // This creates a onDidStartDebugSession event listener that will dispose of itself when it detects // the debugConfiguration that is return from this method has started. - const startDebugEvent = vscode.debug.onDidStartDebugSession((debugSession: vscode.DebugSession) => { + const startDebugEvent = vscode.debug.onDidStartDebugSession(async (debugSession: vscode.DebugSession) => { if (debugSession.name === debugConfigArray[0].name) { startDebugEvent.dispose(); - vscode.debug.startDebugging(debugSession.workspaceFolder, debugConfigArray[1], debugSession); + await vscode.debug.startDebugging(debugSession.workspaceFolder, debugConfigArray[1], debugSession); } }); diff --git a/src/shared/observers/utils/messageItemWithCommand.ts b/src/shared/observers/utils/messageItemWithCommand.ts deleted file mode 100644 index f6d9df502..000000000 --- a/src/shared/observers/utils/messageItemWithCommand.ts +++ /dev/null @@ -1,10 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ - -import { MessageItem } from '../../../vscodeAdapter'; - -export default interface MessageItemWithCommand extends MessageItem { - command: string; -} diff --git a/src/shared/observers/utils/showErrorMessage.ts b/src/shared/observers/utils/showErrorMessage.ts deleted file mode 100644 index bf0ab6759..000000000 --- a/src/shared/observers/utils/showErrorMessage.ts +++ /dev/null @@ -1,14 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ - -import { vscode } from '../../../vscodeAdapter'; - -export default async function showErrorMessage(vscode: vscode, message: string, ...items: string[]) { - try { - await vscode.window.showErrorMessage(message, ...items); - } catch (err) { - console.log(err); - } -} diff --git a/src/shared/observers/utils/showInformationMessage.ts b/src/shared/observers/utils/showInformationMessage.ts deleted file mode 100644 index 4d927f770..000000000 --- a/src/shared/observers/utils/showInformationMessage.ts +++ /dev/null @@ -1,22 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ - -import { vscode } from '../../../vscodeAdapter'; -import MessageItemWithCommand from './messageItemWithCommand'; - -export default async function showInformationMessage( - vscode: vscode, - message: string, - ...items: MessageItemWithCommand[] -) { - try { - const value = await vscode.window.showInformationMessage(message, ...items); - if (value?.command) { - vscode.commands.executeCommand(value.command); - } - } catch (err) { - console.log(err); - } -} diff --git a/src/shared/observers/utils/showMessage.ts b/src/shared/observers/utils/showMessage.ts new file mode 100644 index 000000000..6771a5dc9 --- /dev/null +++ b/src/shared/observers/utils/showMessage.ts @@ -0,0 +1,101 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { MessageOptions, vscode } from '../../../vscodeAdapter'; + +/** + * Show an error message toast. + * This function returns immediately and does not wait for the user to select an option or dismiss the message. + */ +export function showErrorMessage( + vscode: vscode, + message: string, + ...items: (CommandOption | ActionOption | string)[] +): void { + showErrorMessageWithOptions(vscode, message, undefined, ...items); +} + +/** + * Show an error message with specific options. + * This function returns immediately and does not wait for the user to select an option or dismiss the message. + */ +export function showErrorMessageWithOptions( + vscode: vscode, + message: string, + options: MessageOptions | undefined, + ...items: (CommandOption | ActionOption | string)[] +): void { + showMessage(vscode, vscode.window.showErrorMessage, message, options, ...items); +} + +/** + * Show a warning message toast. + * This function returns immediately and does not wait for the user to select an option or dismiss the message. + */ +export function showWarningMessage( + vscode: vscode, + message: string, + ...items: (CommandOption | ActionOption | string)[] +) { + showMessage(vscode, vscode.window.showWarningMessage, message, undefined, ...items); +} + +/** + * Show an information message toast. + * This function returns immediately and does not wait for the user to select an option or dismiss the message. + */ +export function showInformationMessage( + vscode: vscode, + message: string, + ...items: (CommandOption | ActionOption | string)[] +) { + showMessage(vscode, vscode.window.showInformationMessage, message, undefined, ...items); +} + +/** + * A message option that will trigger a command when selected. + */ +export type CommandOption = { title: string; command: string; arguments?: any[] }; + +/** + * A message option that will trigger an action when selected. + */ +export type ActionOption = { title: string; action: () => Promise }; + +type showMessageFunc = ( + message: string, + options: MessageOptions, + ...items: (CommandOption | ActionOption | string)[] +) => Thenable<(CommandOption | ActionOption | string) | undefined>; + +function showMessage( + vscode: vscode, + delegateFunc: showMessageFunc, + message: string, + options: MessageOptions | undefined, + ...items: (CommandOption | ActionOption | string)[] +) { + const messageOptions = options === undefined ? {} : options; + delegateFunc(message, messageOptions, ...items).then( + async (selectedItem) => { + if (selectedItem) { + if (typeof selectedItem === 'string') { + return; + } else if ('action' in selectedItem && selectedItem.action) { + await selectedItem.action(); + } else if ('command' in selectedItem && selectedItem.command) { + if (selectedItem.arguments) { + await vscode.commands.executeCommand(selectedItem.command, ...selectedItem.arguments); + } else { + await vscode.commands.executeCommand(selectedItem.command); + } + } + } + }, + (rejected) => { + console.log(rejected); + } + ); +} diff --git a/src/shared/observers/utils/showWarningMessage.ts b/src/shared/observers/utils/showWarningMessage.ts deleted file mode 100644 index 2d54a16c1..000000000 --- a/src/shared/observers/utils/showWarningMessage.ts +++ /dev/null @@ -1,18 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ - -import { vscode } from '../../../vscodeAdapter'; -import MessageItemWithCommand from './messageItemWithCommand'; - -export default async function showWarningMessage(vscode: vscode, message: string, ...items: MessageItemWithCommand[]) { - try { - const value = await vscode.window.showWarningMessage(message, ...items); - if (value?.command) { - await vscode.commands.executeCommand(value.command); - } - } catch (err) { - console.log(err); - } -} diff --git a/src/shared/processPicker.ts b/src/shared/processPicker.ts index f049b7aa6..78ff23dd6 100644 --- a/src/shared/processPicker.ts +++ b/src/shared/processPicker.ts @@ -650,35 +650,38 @@ async function execChildProcessAndOutputErrorToChannel( channel.appendLine(`Executing: ${process}`); return new Promise((resolve, reject) => { - GetSysNativePathIfNeeded(platformInfo).then((newEnv) => { - child_process.exec( - process, - { cwd: workingDirectory, env: newEnv, maxBuffer: 500 * 1024 }, - (error, stdout, stderr) => { - let channelOutput = ''; - - if (stdout && stdout.length > 0) { - channelOutput = channelOutput.concat(stdout); + GetSysNativePathIfNeeded(platformInfo).then( + (newEnv) => { + child_process.exec( + process, + { cwd: workingDirectory, env: newEnv, maxBuffer: 500 * 1024 }, + (error, stdout, stderr) => { + let channelOutput = ''; + + if (stdout && stdout.length > 0) { + channelOutput = channelOutput.concat(stdout); + } + + if (stderr && stderr.length > 0) { + channelOutput = channelOutput.concat('stderr: ' + stderr); + } + + if (error) { + channelOutput = channelOutput.concat(vscode.l10n.t('Error Message: ') + error.message); + } + + if (error || (stderr && stderr.length > 0)) { + channel.append(channelOutput); + channel.show(); + reject(new Error(vscode.l10n.t('See {0} output', 'remote-attach'))); + return; + } + + resolve(stdout); } - - if (stderr && stderr.length > 0) { - channelOutput = channelOutput.concat('stderr: ' + stderr); - } - - if (error) { - channelOutput = channelOutput.concat(vscode.l10n.t('Error Message: ') + error.message); - } - - if (error || (stderr && stderr.length > 0)) { - channel.append(channelOutput); - channel.show(); - reject(new Error(vscode.l10n.t('See {0} output', 'remote-attach'))); - return; - } - - resolve(stdout); - } - ); - }); + ); + }, + (innerRejects) => reject(innerRejects) + ); }); } diff --git a/src/shared/workspaceConfigurationProvider.ts b/src/shared/workspaceConfigurationProvider.ts index f13ebbddb..1d2d7c537 100644 --- a/src/shared/workspaceConfigurationProvider.ts +++ b/src/shared/workspaceConfigurationProvider.ts @@ -18,6 +18,7 @@ import { parse } from 'jsonc-parser'; import { IWorkspaceDebugInformationProvider } from './IWorkspaceDebugInformationProvider'; import { PlatformInformation } from './platform'; import { BaseVsDbgConfigurationProvider } from './configurationProvider'; +import { showErrorMessage } from './observers/utils/showMessage'; /** * This class will be used for providing debug configurations given workspace information. @@ -39,7 +40,8 @@ export class DotnetWorkspaceConfigurationProvider extends BaseVsDbgConfiguration _?: vscode.CancellationToken ): Promise { if (!folder || !folder.uri) { - vscode.window.showErrorMessage( + showErrorMessage( + vscode, vscode.l10n.t('Cannot create .NET debug configurations. No workspace folder was selected.') ); return []; @@ -48,7 +50,8 @@ export class DotnetWorkspaceConfigurationProvider extends BaseVsDbgConfiguration try { const info = await this.workspaceDebugInfoProvider.getWorkspaceDebugInformation(folder.uri); if (!info) { - vscode.window.showErrorMessage( + showErrorMessage( + vscode, vscode.l10n.t( 'Cannot create .NET debug configurations. The server is still initializing or has exited unexpectedly.' ) @@ -57,7 +60,8 @@ export class DotnetWorkspaceConfigurationProvider extends BaseVsDbgConfiguration } if (info.length === 0) { - vscode.window.showErrorMessage( + showErrorMessage( + vscode, vscode.l10n.t( "Cannot create .NET debug configurations. The active C# project is not within folder '{0}'.", folder.uri.fsPath diff --git a/src/vscodeAdapter.ts b/src/vscodeAdapter.ts index 581161f9a..8768f219a 100644 --- a/src/vscodeAdapter.ts +++ b/src/vscodeAdapter.ts @@ -965,9 +965,24 @@ export interface vscode { }; window: { activeTextEditor: TextEditor | undefined; - showInformationMessage: (message: string, ...items: T[]) => Thenable; - showWarningMessage: (message: string, ...items: T[]) => Thenable; - showErrorMessage(message: string, ...items: string[]): Thenable; + showInformationMessage(message: string, ...items: T[]): Thenable; + showInformationMessage( + message: string, + options: MessageOptions, + ...items: T[] + ): Thenable; + showWarningMessage(message: string, ...items: T[]): Thenable; + showWarningMessage( + message: string, + options: MessageOptions, + ...items: T[] + ): Thenable; + showErrorMessage(message: string, ...items: T[]): Thenable; + showErrorMessage( + message: string, + options: MessageOptions, + ...items: T[] + ): Thenable; }; workspace: { getConfiguration: (section?: string, resource?: Uri) => WorkspaceConfiguration; diff --git a/tasks/offlinePackagingTasks.ts b/tasks/offlinePackagingTasks.ts index f631a3e2f..1c492e2ff 100644 --- a/tasks/offlinePackagingTasks.ts +++ b/tasks/offlinePackagingTasks.ts @@ -149,7 +149,7 @@ gulp.task('installDependencies', async () => { )!; try { - acquireAndInstallAllNugetPackages(vsixPlatformInfo, packageJSON, true); + await acquireAndInstallAllNugetPackages(vsixPlatformInfo, packageJSON, true); } catch (err) { const message = (err instanceof Error ? err.stack : err) ?? ''; // NOTE: Extra `\n---` at the end is because gulp will print this message following by the diff --git a/tasks/testTasks.ts b/tasks/testTasks.ts index f8d705d48..0feded67c 100644 --- a/tasks/testTasks.ts +++ b/tasks/testTasks.ts @@ -20,7 +20,7 @@ createIntegrationTestSubTasks(); createOmniSharpTestSubTasks(); gulp.task('test:artifacts', async () => { - runJestTest(jestArtifactTestsProjectName); + await runJestTest(jestArtifactTestsProjectName); }); // Overall test command that runs everything except O# tests. @@ -43,13 +43,13 @@ function createUnitTestSubTasks() { }); gulp.task('test:unit:razor', async () => { - runJestTest(razorTestProjectName); + await runJestTest(razorTestProjectName); }); gulp.task('test:unit', gulp.series('test:unit:csharp', 'test:unit:razor')); } -async function createIntegrationTestSubTasks() { +function createIntegrationTestSubTasks() { const integrationTestProjects = ['slnWithCsproj']; for (const projectName of integrationTestProjects) { gulp.task(`test:integration:csharp:${projectName}`, async () => diff --git a/test/fakes.ts b/test/fakes.ts index 533a65bcc..a8ebf9225 100644 --- a/test/fakes.ts +++ b/test/fakes.ts @@ -156,7 +156,7 @@ export function getFakeVsCode(): vscode.vscode { showWarningMessage: (_message: string, ..._items: T[]) => { throw new Error('Not Implemented'); }, - showErrorMessage: (_message: string, ..._items: string[]) => { + showErrorMessage: (_message: string, ..._items: T[]) => { throw new Error('Not Implemented'); }, }, @@ -293,8 +293,13 @@ export function getVSCodeWithConfig(vscodeAdapter: vscode.vscode = getFakeVsCode return vscodeAdapter; } -export function updateConfig(vscodeAdapter: vscode.vscode, section: string | undefined, config: string, value: any) { - const workspaceConfig = vscodeAdapter.workspace.getConfiguration(section); +export async function updateConfig( + vscode: vscode.vscode, + section: string | undefined, + config: string, + value: any +): Promise { + const workspaceConfig = vscode.workspace.getConfiguration(section); const configEntry = section ? `${section}.${config}` : config; - workspaceConfig.update(configEntry, value); + await workspaceConfig.update(configEntry, value); } diff --git a/test/lsptoolshost/integrationTests/codeactions.integration.test.ts b/test/lsptoolshost/integrationTests/codeactions.integration.test.ts index 0c82b08ca..a9ec6091c 100644 --- a/test/lsptoolshost/integrationTests/codeactions.integration.test.ts +++ b/test/lsptoolshost/integrationTests/codeactions.integration.test.ts @@ -61,7 +61,7 @@ describe(`Code Actions Tests`, () => { await vscode.workspace.applyEdit(actions[0].edit!); - expectText(vscode.window.activeTextEditor!.document, [ + await expectText(vscode.window.activeTextEditor!.document, [ 'namespace CodeActionsTests;', '', 'class CodeActions', @@ -84,7 +84,7 @@ describe(`Code Actions Tests`, () => { await vscode.workspace.applyEdit(actions[0].edit!); - expectText(vscode.window.activeTextEditor!.document, [ + await expectText(vscode.window.activeTextEditor!.document, [ 'using System;', '', 'namespace CodeActionsTests;', @@ -112,7 +112,7 @@ describe(`Code Actions Tests`, () => { await invokeQuickPickAction(action, /*quickPickIndex: Document*/ 0); - expectText(vscode.window.activeTextEditor!.document, [ + await expectText(vscode.window.activeTextEditor!.document, [ 'using System;', '', 'namespace CodeActionsTests;', @@ -141,7 +141,7 @@ describe(`Code Actions Tests`, () => { await invokeQuickPickAction(action, /*quickPickIndex: Project*/ 1); - expectText(vscode.window.activeTextEditor!.document, [ + await expectText(vscode.window.activeTextEditor!.document, [ 'using System;', '', 'namespace CodeActionsTests;', @@ -160,7 +160,7 @@ describe(`Code Actions Tests`, () => { const projectFile = vscode.workspace.textDocuments.find((d) => d.fileName.endsWith('CodeActionsInProject.cs')); expect(projectFile).toBeDefined(); - expectText(projectFile!, [ + await expectText(projectFile!, [ 'using System;', '', 'namespace CodeActionsTests;', @@ -182,7 +182,7 @@ describe(`Code Actions Tests`, () => { await invokeQuickPickAction(action, /*quickPickIndex: Solution*/ 2); - expectText(vscode.window.activeTextEditor!.document, [ + await expectText(vscode.window.activeTextEditor!.document, [ 'using System;', '', 'namespace CodeActionsTests;', @@ -203,7 +203,7 @@ describe(`Code Actions Tests`, () => { d.fileName.endsWith('CodeActionsInProject.cs') ); expect(currentProjectFile).toBeDefined(); - expectText(currentProjectFile!, [ + await expectText(currentProjectFile!, [ 'using System;', '', 'namespace CodeActionsTests;', @@ -217,7 +217,7 @@ describe(`Code Actions Tests`, () => { d.fileName.endsWith('CodeActionsInSolution.cs') ); expect(otherProjectFile).toBeDefined(); - expectText(otherProjectFile!, [ + await expectText(otherProjectFile!, [ 'using System;', '', 'namespace CodeActionsTests;', @@ -236,7 +236,7 @@ describe(`Code Actions Tests`, () => { await invokeQuickPickAction(action, /*quickPickIndex: Convert to binary*/ 0); - expectText(vscode.window.activeTextEditor!.document, [ + await expectText(vscode.window.activeTextEditor!.document, [ 'using System;', '', 'namespace CodeActionsTests;', @@ -261,7 +261,7 @@ describe(`Code Actions Tests`, () => { await invokeQuickPickAction(action, /*quickPickIndex: Suppress CS0219 -> in Source*/ 0); - expectText(vscode.window.activeTextEditor!.document, [ + await expectText(vscode.window.activeTextEditor!.document, [ 'using System;', '', 'namespace CodeActionsTests;', diff --git a/test/lsptoolshost/integrationTests/formatting.integration.test.ts b/test/lsptoolshost/integrationTests/formatting.integration.test.ts index 7e7f228ad..9a8c0e989 100644 --- a/test/lsptoolshost/integrationTests/formatting.integration.test.ts +++ b/test/lsptoolshost/integrationTests/formatting.integration.test.ts @@ -50,7 +50,7 @@ describe(`Formatting Tests`, () => { ' }', '}', ]; - expectText(vscode.window.activeTextEditor!.document, expectedText); + await expectText(vscode.window.activeTextEditor!.document, expectedText); }); test('Document range formatting formats only the range', async () => { @@ -70,7 +70,7 @@ describe(`Formatting Tests`, () => { ' }', '}', ]; - expectText(vscode.window.activeTextEditor!.document, expectedText); + await expectText(vscode.window.activeTextEditor!.document, expectedText); }); test('Document on type formatting formats the typed location', async () => { @@ -89,6 +89,6 @@ describe(`Formatting Tests`, () => { ' }', '}', ]; - expectText(vscode.window.activeTextEditor!.document, expectedText); + await expectText(vscode.window.activeTextEditor!.document, expectedText); }); }); diff --git a/test/lsptoolshost/integrationTests/formattingEditorConfig.integration.test.ts b/test/lsptoolshost/integrationTests/formattingEditorConfig.integration.test.ts index 70945a9e6..839192316 100644 --- a/test/lsptoolshost/integrationTests/formattingEditorConfig.integration.test.ts +++ b/test/lsptoolshost/integrationTests/formattingEditorConfig.integration.test.ts @@ -50,7 +50,7 @@ describe(`Formatting With EditorConfig Tests`, () => { ' }', '}', ]; - expectText(vscode.window.activeTextEditor!.document, expectedText); + await expectText(vscode.window.activeTextEditor!.document, expectedText); }); test('Document range formatting respects editorconfig', async () => { @@ -72,7 +72,7 @@ describe(`Formatting With EditorConfig Tests`, () => { ' }', '}', ]; - expectText(vscode.window.activeTextEditor!.document, expectedText); + await expectText(vscode.window.activeTextEditor!.document, expectedText); }); test('Document on type formatting respects editorconfig', async () => { @@ -95,6 +95,6 @@ describe(`Formatting With EditorConfig Tests`, () => { ' }', '}', ]; - expectText(vscode.window.activeTextEditor!.document, expectedText); + await expectText(vscode.window.activeTextEditor!.document, expectedText); }); }); diff --git a/test/lsptoolshost/integrationTests/unitTests.integration.test.ts b/test/lsptoolshost/integrationTests/unitTests.integration.test.ts index 50d41afb6..ce7ccf03b 100644 --- a/test/lsptoolshost/integrationTests/unitTests.integration.test.ts +++ b/test/lsptoolshost/integrationTests/unitTests.integration.test.ts @@ -22,7 +22,7 @@ describeIfCSharp(`Unit Testing Tests`, () => { }); beforeEach(async () => { - vscode.workspace + await vscode.workspace .getConfiguration() .update('dotnet.unitTests.runSettingsPath', undefined, vscode.ConfigurationTarget.Workspace); const fileName = path.join('test', 'UnitTest1.cs'); diff --git a/test/lsptoolshost/unitTests/languageServerConfigChangeObserver.test.ts b/test/lsptoolshost/unitTests/languageServerConfigChangeObserver.test.ts index 31eec3a06..6b8ef6750 100644 --- a/test/lsptoolshost/unitTests/languageServerConfigChangeObserver.test.ts +++ b/test/lsptoolshost/unitTests/languageServerConfigChangeObserver.test.ts @@ -39,10 +39,10 @@ describe('Option changes observer', () => { { config: 'dotnet', section: 'preferCSharpExtension', value: true }, ].forEach((elem) => { describe(`When the ${elem.config}.${elem.section} changes`, () => { - beforeEach(() => { + beforeEach(async () => { expect(infoMessage).toBe(undefined); expect(invokedCommand).toBe(undefined); - updateConfig(vscode, elem.config, elem.section, elem.value); + await updateConfig(vscode, elem.config, elem.section, elem.value); optionObservable.next(); }); @@ -70,10 +70,10 @@ describe('Option changes observer', () => { [{ config: 'dotnet', section: 'server.useOmnisharp', value: true }].forEach((elem) => { describe(`When the ${elem.config}.${elem.section} changes`, () => { - beforeEach(() => { + beforeEach(async () => { expect(infoMessage).toBe(undefined); expect(invokedCommand).toBe(undefined); - updateConfig(vscode, elem.config, elem.section, elem.value); + await updateConfig(vscode, elem.config, elem.section, elem.value); optionObservable.next(); }); @@ -103,10 +103,10 @@ describe('Option changes observer', () => { { config: 'dotnet', section: 'server.documentSelector', value: ['csharp'] }, { config: 'dotnet', section: 'server.trace', value: 'Information' }, ].forEach((elem) => { - test(`Information Message is not shown if no change in value for ${elem.config}.${elem.section}`, () => { + test(`Information Message is not shown if no change in value for ${elem.config}.${elem.section}`, async () => { expect(infoMessage).toBe(undefined); expect(invokedCommand).toBe(undefined); - updateConfig(vscode, elem.config, elem.section, elem.value); + await updateConfig(vscode, elem.config, elem.section, elem.value); optionObservable.next(); expect(infoMessage).toBe(undefined); }); @@ -118,17 +118,21 @@ describe('Option changes observer', () => { { config: 'files', section: 'exclude', value: false }, { config: 'search', section: 'exclude', value: 1000 }, ].forEach((elem) => { - test(`Information Message is not shown on change in ${elem.config}.${elem.section}`, () => { + test(`Information Message is not shown on change in ${elem.config}.${elem.section}`, async () => { expect(infoMessage).toBe(undefined); expect(invokedCommand).toBe(undefined); - updateConfig(vscode, elem.config, elem.section, elem.value); + await updateConfig(vscode, elem.config, elem.section, elem.value); optionObservable.next(); expect(infoMessage).toBe(undefined); }); }); function resetMocks() { - vscode.window.showInformationMessage = async (message: string, ...items: T[]) => { + vscode.window.showInformationMessage = async ( + message: string, + _options: vscode.MessageOptions, + ...items: T[] + ) => { infoMessage = message; return new Promise((resolve) => { doClickCancel = () => { diff --git a/test/omnisharp/omnisharpIntegrationTests/integrationHelpers.ts b/test/omnisharp/omnisharpIntegrationTests/integrationHelpers.ts index 7742e1ce2..60ab78821 100644 --- a/test/omnisharp/omnisharpIntegrationTests/integrationHelpers.ts +++ b/test/omnisharp/omnisharpIntegrationTests/integrationHelpers.ts @@ -17,16 +17,6 @@ export interface ActivationResult { } export async function activateCSharpExtension(): Promise { - const configuration = vscode.workspace.getConfiguration(); - configuration.update( - 'omnisharp.enableLspDriver', - process.env.OMNISHARP_DRIVER === 'lsp' ? true : false, - vscode.ConfigurationTarget.WorkspaceFolder - ); - if (process.env.OMNISHARP_LOCATION) { - configuration.update('path', process.env.OMNISHARP_LOCATION, vscode.ConfigurationTarget.WorkspaceFolder); - } - const csharpExtension = vscode.extensions.getExtension('ms-dotnettools.csharp'); if (!csharpExtension) { throw new Error('Failed to find installation of ms-dotnettools.csharp'); diff --git a/test/omnisharp/omnisharpIntegrationTests/launchConfiguration.integration.test.ts b/test/omnisharp/omnisharpIntegrationTests/launchConfiguration.integration.test.ts index 5913781c9..6d3afacf7 100644 --- a/test/omnisharp/omnisharpIntegrationTests/launchConfiguration.integration.test.ts +++ b/test/omnisharp/omnisharpIntegrationTests/launchConfiguration.integration.test.ts @@ -23,7 +23,7 @@ describe.skip(`Tasks generation: ${testAssetWorkspace.description}`, function () }); test('Starting .NET Core Launch (console) from the workspace root should create an Active Debug Session', async () => { - vscode.commands.executeCommand('dotnet.generateAssets', 0); + await vscode.commands.executeCommand('dotnet.generateAssets', 0); await poll(async () => fs.exists(testAssetWorkspace.launchJsonPath), 10000, 100); const onChangeSubscription = vscode.debug.onDidChangeActiveDebugSession((_) => { diff --git a/test/omnisharp/omnisharpUnitTests/informationMessageObserver.test.ts b/test/omnisharp/omnisharpUnitTests/informationMessageObserver.test.ts index 3659812a8..d04aef960 100644 --- a/test/omnisharp/omnisharpUnitTests/informationMessageObserver.test.ts +++ b/test/omnisharp/omnisharpUnitTests/informationMessageObserver.test.ts @@ -33,7 +33,7 @@ describe('InformationMessageObserver', () => { jest.spyOn(vscode.window, 'showInformationMessage').mockImplementation( // eslint-disable-next-line @typescript-eslint/ban-ts-comment //@ts-ignore - async (message: string, ...items: T[]) => { + async (message: string, _options: vscode.MessageOptions, ...items: T[]) => { infoMessage = message; return new Promise((resolve) => { doClickCancel = () => { @@ -63,8 +63,8 @@ describe('InformationMessageObserver', () => { ].forEach((elem) => { describe(elem.event.constructor.name, () => { describe('Suppress Dotnet Restore Notification is true', () => { - beforeEach(() => { - vscode.workspace.getConfiguration().update('csharp.suppressDotnetRestoreNotification', true); + beforeEach(async () => { + await vscode.workspace.getConfiguration().update('csharp.suppressDotnetRestoreNotification', true); optionObservable.next(); }); @@ -75,8 +75,8 @@ describe('InformationMessageObserver', () => { }); describe('Suppress Dotnet Restore Notification is false', () => { - beforeEach(() => { - vscode.workspace.getConfiguration().update('csharp.suppressDotnetRestoreNotification', false); + beforeEach(async () => { + await vscode.workspace.getConfiguration().update('csharp.suppressDotnetRestoreNotification', false); optionObservable.next(); }); diff --git a/test/omnisharp/omnisharpUnitTests/logging/errorMessageObserver.test.ts b/test/omnisharp/omnisharpUnitTests/logging/errorMessageObserver.test.ts index df72f9f02..a9348339e 100644 --- a/test/omnisharp/omnisharpUnitTests/logging/errorMessageObserver.test.ts +++ b/test/omnisharp/omnisharpUnitTests/logging/errorMessageObserver.test.ts @@ -4,8 +4,7 @@ *--------------------------------------------------------------------------------------------*/ import { describe, test, expect, beforeEach } from '@jest/globals'; -import { vscode } from '../../../../src/vscodeAdapter'; - +import { MessageItem, vscode } from '../../../../src/vscodeAdapter'; import { ErrorMessageObserver } from '../../../../src/omnisharp/observers/errorMessageObserver'; import { ZipError, EventWithMessage, IntegrityCheckFailure } from '../../../../src/shared/loggingEvents'; import { getFakeVsCode } from '../../../fakes'; @@ -16,7 +15,7 @@ describe('ErrorMessageObserver', () => { let errorMessage: string | undefined; const observer = new ErrorMessageObserver(vscode); - vscode.window.showErrorMessage = async (message: string, ..._: string[]) => { + vscode.window.showErrorMessage = async (message: string, ..._items: T[]) => { errorMessage = message; return Promise.resolve('Done'); }; diff --git a/test/omnisharp/omnisharpUnitTests/logging/omnisharpChannelObserver.test.ts b/test/omnisharp/omnisharpUnitTests/logging/omnisharpChannelObserver.test.ts index 29bc6ced0..4a838a1e3 100644 --- a/test/omnisharp/omnisharpUnitTests/logging/omnisharpChannelObserver.test.ts +++ b/test/omnisharp/omnisharpUnitTests/logging/omnisharpChannelObserver.test.ts @@ -23,7 +23,7 @@ describe('OmnisharpChannelObserver', () => { const optionObservable = new Subject(); let observer: OmnisharpChannelObserver; - beforeEach(() => { + beforeEach(async () => { hasShown = false; hasCleared = false; preserveFocus = false; @@ -40,7 +40,7 @@ describe('OmnisharpChannelObserver', () => { jest.spyOn(vscode.workspace, 'getConfiguration').mockReturnValue(getWorkspaceConfiguration()); - vscode.workspace.getConfiguration().update('csharp.showOmnisharpLogOnError', true); + await vscode.workspace.getConfiguration().update('csharp.showOmnisharpLogOnError', true); optionObservable.next(); }); @@ -57,8 +57,8 @@ describe('OmnisharpChannelObserver', () => { }); }); - test(`OmnisharpServerOnStdErr: Channel is not shown when disabled in configuration`, () => { - vscode.workspace.getConfiguration().update('csharp.showOmnisharpLogOnError', false); + test(`OmnisharpServerOnStdErr: Channel is not shown when disabled in configuration`, async () => { + await vscode.workspace.getConfiguration().update('csharp.showOmnisharpLogOnError', false); optionObservable.next(); expect(hasShown).toEqual(false); diff --git a/test/omnisharp/omnisharpUnitTests/logging/telemetryObserver.test.ts b/test/omnisharp/omnisharpUnitTests/logging/telemetryObserver.test.ts index 08cf21513..0110c87f9 100644 --- a/test/omnisharp/omnisharpUnitTests/logging/telemetryObserver.test.ts +++ b/test/omnisharp/omnisharpUnitTests/logging/telemetryObserver.test.ts @@ -67,20 +67,20 @@ describe('TelemetryReporterObserver', () => { errorProp = []; }); - test('PackageInstallation: AcquisitionStart is reported', () => { + test('PackageInstallation: AcquisitionStart is reported', async () => { const event = new PackageInstallation('somePackage'); - observer.post(event); + await observer.post(event); expect(name.length).toBeGreaterThan(0); }); - test('InstallationSuccess: Telemetry props contain installation stage', () => { + test('InstallationSuccess: Telemetry props contain installation stage', async () => { const event = new InstallationSuccess(); - observer.post(event); + await observer.post(event); expect(name).toEqual('AcquisitionSucceeded'); expect(property).toHaveProperty('installStage', 'completeSuccess'); }); - test(`${ProjectConfiguration.name}: Telemetry props contains project id and target framework`, () => { + test(`${ProjectConfiguration.name}: Telemetry props contains project id and target framework`, async () => { const targetFrameworks = ['tfm1', 'tfm2']; const projectId = 'sample'; const sessionId = 'session01'; @@ -102,7 +102,7 @@ describe('TelemetryReporterObserver', () => { SdkStyleProject: sdkStyleProject, }); - observer.post(event); + await observer.post(event); isNotNull(property); expect(property['ProjectCapabilities']).toEqual('cap1 cap2'); expect(property['TargetFrameworks']).toEqual('tfm1|tfm2'); @@ -120,24 +120,24 @@ describe('TelemetryReporterObserver', () => { new OmnisharpDelayTrackerEventMeasures('someEvent', { someKey: 1 }), new OmnisharpStart('startEvent', { someOtherKey: 2 }), ].forEach((event: TelemetryEventWithMeasures) => { - test(`${event.constructor.name}: SendTelemetry event is called with the name and measures`, () => { - observer.post(event); + test(`${event.constructor.name}: SendTelemetry event is called with the name and measures`, async () => { + await observer.post(event); expect(name).toContain(event.eventName); expect(measure).toMatchObject([event.measures]); }); }); - test(`${TelemetryEvent.name}: SendTelemetry event is called with the name, properties and measures`, () => { + test(`${TelemetryEvent.name}: SendTelemetry event is called with the name, properties and measures`, async () => { const event = new TelemetryEvent('someName', { key: 'value' }, { someKey: 1 }); - observer.post(event); + await observer.post(event); expect(name).toContain(event.eventName); expect(measure).toMatchObject([event.measures!]); expect(property).toEqual(event.properties); }); - test(`${TelemetryErrorEvent.name}: SendTelemetry error event is called with the name, properties, measures, and errorProps`, () => { + test(`${TelemetryErrorEvent.name}: SendTelemetry error event is called with the name, properties, measures, and errorProps`, async () => { const event = new TelemetryErrorEvent('someName', { key: 'value' }, { someKey: 1 }, ['StackTrace']); - observer.post(event); + await observer.post(event); expect(name).toContain(event.eventName); expect(measure).toMatchObject([event.measures!]); expect(property).toEqual(event.properties); @@ -145,19 +145,19 @@ describe('TelemetryReporterObserver', () => { }); describe('InstallationFailure', () => { - test('Telemetry Props contains platform information, install stage and an event name', () => { + test('Telemetry Props contains platform information, install stage and an event name', async () => { const event = new InstallationFailure('someStage', 'someError'); - observer.post(event); + await observer.post(event); expect(name).toEqual('AcquisitionFailed'); expect(property!['platform.architecture']).toEqual(platformInfo.architecture); expect(property!['platform.platform']).toEqual(platformInfo.platform); expect(property!['installStage']).toBeDefined(); }); - test(`Telemetry Props contains message and packageUrl if error is package error`, () => { + test(`Telemetry Props contains message and packageUrl if error is package error`, async () => { const error = new PackageError('someError', { description: 'foo', url: 'someurl' }, undefined); const event = new InstallationFailure('someStage', error); - observer.post(event); + await observer.post(event); expect(name).toEqual('AcquisitionFailed'); expect(property!['error.message']).toEqual(error.message); expect(property!['error.packageUrl']).toEqual(error.pkg.url); @@ -165,33 +165,33 @@ describe('TelemetryReporterObserver', () => { }); describe('TestExecutionCountReport', () => { - test('SendTelemetryEvent is called for "RunTest" and "DebugTest"', () => { + test('SendTelemetryEvent is called for "RunTest" and "DebugTest"', async () => { const event = new TestExecutionCountReport({ framework1: 20 }, { framework2: 30 }); - observer.post(event); + await observer.post(event); expect(name).toContain('RunTest'); expect(name).toContain('DebugTest'); expect(measure).toMatchObject([event.debugCounts!, event.runCounts!]); }); - test('SendTelemetryEvent is not called for empty run count', () => { + test('SendTelemetryEvent is not called for empty run count', async () => { const event = new TestExecutionCountReport({ framework1: 20 }, undefined!); - observer.post(event); + await observer.post(event); expect(name).not.toContain('RunTest'); expect(name).toContain('DebugTest'); expect(measure).toMatchObject([event.debugCounts!]); }); - test('SendTelemetryEvent is not called for empty debug count', () => { + test('SendTelemetryEvent is not called for empty debug count', async () => { const event = new TestExecutionCountReport(undefined!, { framework1: 20 }); - observer.post(event); + await observer.post(event); expect(name).toContain('RunTest'); expect(name).not.toContain('DebugTest'); expect(measure).toMatchObject([event.runCounts!]); }); - test('SendTelemetryEvent is not called for empty debug and run counts', () => { + test('SendTelemetryEvent is not called for empty debug and run counts', async () => { const event = new TestExecutionCountReport(undefined!, undefined!); - observer.post(event); + await observer.post(event); expect(name).toBeFalsy(); expect(measure).toHaveLength(0); }); diff --git a/test/omnisharp/omnisharpUnitTests/logging/warningMessageObserver.test.ts b/test/omnisharp/omnisharpUnitTests/logging/warningMessageObserver.test.ts index d0e1e19a7..053c03a78 100644 --- a/test/omnisharp/omnisharpUnitTests/logging/warningMessageObserver.test.ts +++ b/test/omnisharp/omnisharpUnitTests/logging/warningMessageObserver.test.ts @@ -14,6 +14,7 @@ import { vscode } from '../../../../src/vscodeAdapter'; import { TestScheduler } from 'rxjs/testing'; import { from as observableFrom, Subject } from 'rxjs'; import { timeout, map } from 'rxjs/operators'; +import { MessageOptions } from 'vscode'; describe('WarningMessageObserver', () => { let doClickOk: () => void; @@ -32,7 +33,7 @@ describe('WarningMessageObserver', () => { let observer: WarningMessageObserver; const vscode: vscode = getFakeVsCode(); - vscode.window.showWarningMessage = async (message: string, ...items: T[]) => { + vscode.window.showWarningMessage = async (message: string, _options: MessageOptions, ...items: T[]) => { warningMessages.push(message); assertionObservable.next(`[${warningMessages.length}] ${message}`); return new Promise((resolve) => { diff --git a/test/omnisharp/omnisharpUnitTests/omnisharp/omniSharpMonoResolver.test.ts b/test/omnisharp/omnisharpUnitTests/omnisharp/omniSharpMonoResolver.test.ts index af8b9c7c9..3f6b21c32 100644 --- a/test/omnisharp/omnisharpUnitTests/omnisharp/omniSharpMonoResolver.test.ts +++ b/test/omnisharp/omnisharpUnitTests/omnisharp/omniSharpMonoResolver.test.ts @@ -24,10 +24,10 @@ describe(`${OmniSharpMonoResolver.name}`, () => { return Promise.resolve(version); }; - beforeEach(() => { + beforeEach(async () => { getMonoCalled = false; jest.spyOn(vscode.workspace, 'getConfiguration').mockReturnValue(getWorkspaceConfiguration()); - vscode.workspace.getConfiguration().update('omnisharp.monoPath', monoPath); + await vscode.workspace.getConfiguration().update('omnisharp.monoPath', monoPath); }); test(`it returns the path and version if the version is greater than or equal to ${requiredMonoVersion}`, async () => { diff --git a/test/omnisharp/omnisharpUnitTests/omnisharpManager.test.ts b/test/omnisharp/omnisharpUnitTests/omnisharpManager.test.ts index f4edaf802..c829900ba 100644 --- a/test/omnisharp/omnisharpUnitTests/omnisharpManager.test.ts +++ b/test/omnisharp/omnisharpUnitTests/omnisharpManager.test.ts @@ -119,13 +119,13 @@ describe(OmnisharpManager.name, () => { }); test('Throws error if the path is neither an absolute path nor a valid semver, nor the string "latest"', async () => { - expect( + await expect( manager.GetOmniSharpLaunchPath(defaultVersion, 'Some incorrect path', useFramework, extensionPath) ).rejects.toThrowError(Error); }); test('Throws error when the specified path is an invalid semver', async () => { - expect( + await expect( manager.GetOmniSharpLaunchPath(defaultVersion, 'a.b.c', useFramework, extensionPath) ).rejects.toThrowError(Error); }); diff --git a/test/omnisharp/omnisharpUnitTests/optionChangeObserver.test.ts b/test/omnisharp/omnisharpUnitTests/optionChangeObserver.test.ts index de1b4c1b7..29af13fbf 100644 --- a/test/omnisharp/omnisharpUnitTests/optionChangeObserver.test.ts +++ b/test/omnisharp/omnisharpUnitTests/optionChangeObserver.test.ts @@ -41,10 +41,10 @@ describe('OmniSharpConfigChangeObserver', () => { { config: 'omnisharp', section: 'loggingLevel', value: 'verbose' }, ].forEach((elem) => { describe(`When the ${elem.config} ${elem.section} changes`, () => { - beforeEach(() => { + beforeEach(async () => { expect(infoMessage).toBe(undefined); expect(invokedCommand).toBe(undefined); - updateConfig(vscode, elem.config, elem.section, elem.value); + await updateConfig(vscode, elem.config, elem.section, elem.value); optionObservable.next(); }); @@ -72,10 +72,10 @@ describe('OmniSharpConfigChangeObserver', () => { [{ config: 'dotnet', section: 'server.useOmnisharp', value: true }].forEach((elem) => { describe(`When the ${elem.config} ${elem.section} changes`, () => { - beforeEach(() => { + beforeEach(async () => { expect(infoMessage).toBe(undefined); expect(invokedCommand).toBe(undefined); - updateConfig(vscode, elem.config, elem.section, elem.value); + await updateConfig(vscode, elem.config, elem.section, elem.value); optionObservable.next(); }); @@ -111,17 +111,21 @@ describe('OmniSharpConfigChangeObserver', () => { { config: 'omnisharp', section: 'projectLoadTimeout', value: 1000 }, { config: 'omnisharp', section: 'autoStart', value: false }, ].forEach((elem) => { - test(`Information Message is not shown on change in ${elem.config}.${elem.section}`, () => { + test(`Information Message is not shown on change in ${elem.config}.${elem.section}`, async () => { expect(infoMessage).toBe(undefined); expect(invokedCommand).toBe(undefined); - updateConfig(vscode, elem.config, elem.section, elem.value); + await updateConfig(vscode, elem.config, elem.section, elem.value); optionObservable.next(); expect(infoMessage).toBe(undefined); }); }); function resetMocks() { - vscode.window.showInformationMessage = async (message: string, ...items: T[]) => { + vscode.window.showInformationMessage = async ( + message: string, + _options: vscode.MessageOptions, + ...items: T[] + ) => { infoMessage = message; return new Promise((resolve) => { doClickCancel = () => { diff --git a/test/omnisharp/omnisharpUnitTests/options.test.ts b/test/omnisharp/omnisharpUnitTests/options.test.ts index a07b9c099..b9aa409e1 100644 --- a/test/omnisharp/omnisharpUnitTests/options.test.ts +++ b/test/omnisharp/omnisharpUnitTests/options.test.ts @@ -41,60 +41,62 @@ describe('Options tests', () => { expect(commonOptions.runSettingsPath).toEqual(''); }); - test('Verify return no excluded paths when files.exclude empty', () => { - vscode.workspace.getConfiguration().update('files.exclude', {}); + test('Verify return no excluded paths when files.exclude empty', async () => { + await vscode.workspace.getConfiguration().update('files.exclude', {}); const excludedPaths = commonOptions.excludePaths; expect(excludedPaths).toHaveLength(0); }); - test('Verify return excluded paths when files.exclude populated', () => { - vscode.workspace.getConfiguration().update('files.exclude', { '**/node_modules': true, '**/assets': false }); + test('Verify return excluded paths when files.exclude populated', async () => { + await vscode.workspace + .getConfiguration() + .update('files.exclude', { '**/node_modules': true, '**/assets': false }); const excludedPaths = commonOptions.excludePaths; expect(excludedPaths).toStrictEqual(['**/node_modules']); }); - test('Verify return no excluded paths when files.exclude and search.exclude empty', () => { - vscode.workspace.getConfiguration().update('files.exclude', {}); - vscode.workspace.getConfiguration().update('search.exclude', {}); + test('Verify return no excluded paths when files.exclude and search.exclude empty', async () => { + await vscode.workspace.getConfiguration().update('files.exclude', {}); + await vscode.workspace.getConfiguration().update('search.exclude', {}); const excludedPaths = commonOptions.excludePaths; expect(excludedPaths).toHaveLength(0); }); - test('BACK-COMPAT: "omnisharp.loggingLevel": "verbose" == "omnisharp.loggingLevel": "debug"', () => { - vscode.workspace.getConfiguration().update('omnisharp.loggingLevel', 'verbose'); + test('BACK-COMPAT: "omnisharp.loggingLevel": "verbose" == "omnisharp.loggingLevel": "debug"', async () => { + await vscode.workspace.getConfiguration().update('omnisharp.loggingLevel', 'verbose'); expect(omnisharpOptions.loggingLevel).toEqual('debug'); }); - test('BACK-COMPAT: "csharp.omnisharp" is used if it is set and "omnisharp.path" is not', () => { - vscode.workspace.getConfiguration().update('csharp.omnisharp', 'OldPath'); + test('BACK-COMPAT: "csharp.omnisharp" is used if it is set and "omnisharp.path" is not', async () => { + await vscode.workspace.getConfiguration().update('csharp.omnisharp', 'OldPath'); expect(commonOptions.serverPath).toEqual('OldPath'); }); - test('BACK-COMPAT: "csharp.omnisharp" is not used if "omnisharp.path" is set', () => { - vscode.workspace.getConfiguration().update('omnisharp.path', 'NewPath'); - vscode.workspace.getConfiguration().update('csharp.omnisharp', 'OldPath'); + test('BACK-COMPAT: "csharp.omnisharp" is not used if "omnisharp.path" is set', async () => { + await vscode.workspace.getConfiguration().update('omnisharp.path', 'NewPath'); + await vscode.workspace.getConfiguration().update('csharp.omnisharp', 'OldPath'); expect(commonOptions.serverPath).toEqual('NewPath'); }); - test('"omnisharp.defaultLaunchSolution" is used if set', () => { + test('"omnisharp.defaultLaunchSolution" is used if set', async () => { const workspaceFolderUri = URI.file('/Test'); jest.replaceProperty(vscode.workspace, 'workspaceFolders', [ { index: 0, name: 'Test', uri: workspaceFolderUri }, ]); - vscode.workspace.getConfiguration().update('omnisharp.defaultLaunchSolution', 'some_valid_solution.sln'); + await vscode.workspace.getConfiguration().update('omnisharp.defaultLaunchSolution', 'some_valid_solution.sln'); expect(commonOptions.defaultSolution).toEqual(path.join(workspaceFolderUri.fsPath, 'some_valid_solution.sln')); }); - test('"omnisharp.testRunSettings" is used if set', () => { - vscode.workspace + test('"omnisharp.testRunSettings" is used if set', async () => { + await vscode.workspace .getConfiguration() .update('omnisharp.testRunSettings', 'some_valid_path\\some_valid_runsettings_files.runsettings'); diff --git a/test/omnisharp/omnisharpUnitTests/packages/fileDownloader.test.ts b/test/omnisharp/omnisharpUnitTests/packages/fileDownloader.test.ts index 15c4102d9..577579389 100644 --- a/test/omnisharp/omnisharpUnitTests/packages/fileDownloader.test.ts +++ b/test/omnisharp/omnisharpUnitTests/packages/fileDownloader.test.ts @@ -125,7 +125,7 @@ describe('FileDownloader', () => { } catch { /* empty */ } - expect(downloadPromise).rejects.toThrow(); + await expect(downloadPromise).rejects.toThrow(); }); test('Download Start and Download Failure events are created', async () => { diff --git a/test/omnisharp/omnisharpUnitTests/packages/zipInstaller.test.ts b/test/omnisharp/omnisharpUnitTests/packages/zipInstaller.test.ts index b963342fa..f5cf1b84b 100644 --- a/test/omnisharp/omnisharpUnitTests/packages/zipInstaller.test.ts +++ b/test/omnisharp/omnisharpUnitTests/packages/zipInstaller.test.ts @@ -67,7 +67,7 @@ describe('ZipInstaller', () => { }); test('Error is thrown when the buffer contains an invalid zip', async () => { - expect( + await expect( InstallZip(Buffer.from('My file', 'utf8'), 'Text File', installationPath, [], eventStream) ).rejects.toThrow(); }); diff --git a/test/omnisharp/omnisharpUnitTests/testAssets/testZip.ts b/test/omnisharp/omnisharpUnitTests/testAssets/testZip.ts index 2497d4c45..be20f86f8 100644 --- a/test/omnisharp/omnisharpUnitTests/testAssets/testZip.ts +++ b/test/omnisharp/omnisharpUnitTests/testAssets/testZip.ts @@ -37,7 +37,7 @@ export default class TestZip { archive.on('error', reject); archive.on('end', () => resolve(Buffer.concat(buffers))); filesToAdd.forEach((elem) => archive.append(elem.content, { name: elem.path })); - archive.finalize(); + archive.finalize().catch((any) => reject(any)); }); return new TestZip(finalBuffer, filesToAdd); diff --git a/test/omnisharp/runFeatureTests.ts b/test/omnisharp/runFeatureTests.ts index b2003986f..ac2304730 100644 --- a/test/omnisharp/runFeatureTests.ts +++ b/test/omnisharp/runFeatureTests.ts @@ -31,4 +31,6 @@ async function main() { } } +// top level async not supported in our version of ts/modules +// eslint-disable-next-line @typescript-eslint/no-floating-promises main(); diff --git a/version.json b/version.json index 1481c3f44..06cfa80ed 100644 --- a/version.json +++ b/version.json @@ -1,6 +1,6 @@ { "$schema": "https://raw.githubusercontent.com/dotnet/Nerdbank.GitVersioning/master/src/NerdBank.GitVersioning/version.schema.json", - "version": "2.49", + "version": "2.50", "publicReleaseRefSpec": [ "^refs/heads/release$", "^refs/heads/prerelease$",