diff --git a/.eslintrc.js b/.eslintrc.js index 5a1fd3933..050209c7f 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -21,7 +21,7 @@ module.exports = { rules: { "@typescript-eslint/no-explicit-any": "off", "@typescript-eslint/no-non-null-assertion": "off", - "@typescript-eslint/semi": ["error", "always"], + "@typescript-eslint/no-require-imports": "off", // Allow unused vars if prefixed by _ "@typescript-eslint/no-unused-vars": [ "warn", diff --git a/.vscode/launch.json b/.vscode/launch.json index 85a3417f6..377cb83ac 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -19,10 +19,10 @@ "args": [ // Launch VSCode using a specific profile to ensure that user settings are not used. // This profile must be imported into vscode before running this launch configuration. - // The profile can be found under /test/csharp-standalone-profile. + // The profile can be found under /test/csharp-test-profile. "--profile", - "csharp-standalone-profile", - "${workspaceRoot}/test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/.vscode/lsp_tools_host_slnWithCsproj.code-workspace", + "csharp-test-profile", + "${workspaceRoot}/test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/.vscode/slnWithCsproj.code-workspace", "--extensionDevelopmentPath=${workspaceRoot}", "--extensionTestsPath=${workspaceRoot}/out/test/lsptoolshost/integrationTests" ], @@ -36,6 +36,31 @@ "preLaunchTask": "buildDev", "internalConsoleOptions": "openOnSessionStart" }, + { + "name": "[DevKit] Launch Current File slnWithCsproj Integration Tests", + "type": "extensionHost", + "request": "launch", + "runtimeExecutable": "${execPath}", + "args": [ + // Launch VSCode using a specific profile to ensure that user settings are not used. + // This profile must be imported into vscode before running this launch configuration. + // The profile can be found under /test/csharp-test-profile. + "--profile", + "csharp-test-profile", + "${workspaceRoot}/test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/.vscode/devkit_slnWithCsproj.code-workspace", + "--extensionDevelopmentPath=${workspaceRoot}", + "--extensionTestsPath=${workspaceRoot}/out/test/lsptoolshost/integrationTests" + ], + "env": { + "CODE_EXTENSIONS_PATH": "${workspaceRoot}", + "TEST_FILE_FILTER": "${file}", + }, + "sourceMaps": true, + "outFiles": ["${workspaceRoot}/dist/*.js", "${workspaceRoot}/out/test/**/*.js"], + "resolveSourceMapLocations": ["${workspaceFolder}/**", "!**/node_modules/**"], + "preLaunchTask": "buildDev", + "internalConsoleOptions": "openOnSessionStart" + }, { "name": "Launch Current File BasicRazorApp2_1 Integration Tests", "type": "extensionHost", @@ -44,9 +69,9 @@ "args": [ // Launch VSCode using a specific profile to ensure that user settings are not used. // This profile must be imported into vscode before running this launch configuration. - // The profile can be found under /test/csharp-standalone-profile. + // The profile can be found under /test/csharp-test-profile. "--profile", - "csharp-standalone-profile", + "csharp-test-profile", "${workspaceRoot}/test/razor/razorIntegrationTests/testAssets/BasicRazorApp2_1/.vscode/lsp_tools_host_BasicRazorApp2_1.code-workspace", "--extensionDevelopmentPath=${workspaceRoot}", "--extensionTestsPath=${workspaceRoot}/out/test/razor/razorIntegrationTests" @@ -69,9 +94,9 @@ "args": [ // Launch VSCode using a specific profile to ensure that user settings are not used. // This profile must be imported into vscode before running this launch configuration. - // The profile can be found under /test/csharp-standalone-profile. + // The profile can be found under /test/csharp-test-profile. "--profile", - "csharp-standalone-profile", + "csharp-test-profile", "${workspaceRoot}/test/omnisharp/omnisharpIntegrationTests/testAssets/${input:omnisharpAssetName}/.vscode/omnisharp_${input:omnisharpAssetName}.code-workspace", "--extensionDevelopmentPath=${workspaceRoot}", "--extensionTestsPath=${workspaceRoot}/out/test/omnisharp/omnisharpIntegrationTests" @@ -94,9 +119,9 @@ "args": [ // Launch VSCode using a specific profile to ensure that user settings are not used. // This profile must be imported into vscode before running this launch configuration. - // The profile can be found under /test/csharp-standalone-profile. + // The profile can be found under /test/csharp-test-profile. "--profile", - "csharp-standalone-profile", + "csharp-test-profile", "${workspaceRoot}/test/omnisharp/omnisharpIntegrationTests/testAssets/${input:omnisharpAssetName}/.vscode/omnisharp_lsp_${input:omnisharpAssetName}.code-workspace", "--extensionDevelopmentPath=${workspaceRoot}", "--extensionTestsPath=${workspaceRoot}/out/test/omnisharp/omnisharpIntegrationTests" diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index d885f3285..f26f949b6 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -56,9 +56,9 @@ To run all tests, execute `npm run test`. To debug unit tests locally, press F5 in VS Code with the "Launch Tests" debug configuration selected. To debug integration tests -1. Import the `csharp-standalone-profile.code-profile` in VSCode to setup a clean profile in which to run integration tests. This must be imported at least once to use the launch configurations. +1. Import the `csharp-test-profile.code-profile` in VSCode to setup a clean profile in which to run integration tests. This must be imported at least once to use the launch configurations (ensure the extensions are updated in the profile). 2. Open any integration test file and F5 launch with the correct launch configuration selected. - - For integration tests inside `test/lsptoolshost`, use `Launch Current File slnWithCsproj Integration Tests` + - For integration tests inside `test/lsptoolshost`, use either `Launch Current File slnWithCsproj Integration Tests` or `[DevKit] Launch Current File slnWithCsproj Integration Tests` (to run tests using C# + C# Dev Kit) - For integration tests inside `test/razor`, use `Launch Current File BasicRazorApp2_1 Integration Tests` - For integration tests inside `test/omnisharp`, use one of the `Omnisharp:` current file profiles diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 72375d570..ce5870df0 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -24,58 +24,55 @@ stages: isOfficial: false signType: test -- stage: Test_Linux_Stage - displayName: Test Linux +- stage: + displayName: Test Linux (.NET 6) dependsOn: [] jobs: - - job: Test_Linux_Job - displayName: Test Linux - strategy: - matrix: - DotNet6: - containerName: mcr.microsoft.com/dotnet/sdk:6.0 - DotNet7: - containerName: mcr.microsoft.com/dotnet/sdk:7.0 - DotNet8: - containerName: mcr.microsoft.com/dotnet/sdk:8.0 - pool: - name: NetCore-Public - demands: ImageOverride -equals 1es-ubuntu-2004-open - container: $[ variables['containerName'] ] - steps: - - template: azure-pipelines/test.yml - parameters: - # Prefer the dotnet from the container. - installDotNet: false - installAdditionalLinuxDependencies: true + - template: azure-pipelines/test-matrix.yml + parameters: + # Prefer the dotnet from the container. + installDotNet: false + installAdditionalLinuxDependencies: true + pool: + name: NetCore-Public + demands: ImageOverride -equals 1es-ubuntu-2004-open + containerName: mcr.microsoft.com/dotnet/sdk:6.0 + +- stage: + displayName: Test Linux (.NET 8) + dependsOn: [] + jobs: + - template: azure-pipelines/test-matrix.yml + parameters: + # Prefer the dotnet from the container. + installDotNet: false + installAdditionalLinuxDependencies: true + pool: + name: NetCore-Public + demands: ImageOverride -equals 1es-ubuntu-2004-open + containerName: mcr.microsoft.com/dotnet/sdk:8.0 - stage: Test_Windows_Stage displayName: Test Windows dependsOn: [] jobs: - - job: Test_Windows_Job - displayName: Test Windows - pool: - name: NetCore-Public - demands: ImageOverride -equals 1es-windows-2022-open - steps: - - template: azure-pipelines/test.yml - parameters: - installDotNet: true + - template: azure-pipelines/test-matrix.yml + parameters: + installDotNet: true + pool: + name: NetCore-Public + demands: ImageOverride -equals 1es-windows-2022-open - stage: Test_MacOS_Stage displayName: Test MacOS dependsOn: [] jobs: - - job: Test_MacOS_Job - displayName: Test MacOS - pool: - name: Azure Pipelines - vmImage: macOS-13 - steps: - - template: azure-pipelines/test.yml - parameters: - installDotNet: true + - template: azure-pipelines/test-matrix.yml + parameters: + installDotNet: true + pool: + name: Azure Pipelines + vmImage: macOS-13 - stage: Test_OmniSharp displayName: Test OmniSharp diff --git a/azure-pipelines/test-matrix.yml b/azure-pipelines/test-matrix.yml new file mode 100644 index 000000000..dacf360ff --- /dev/null +++ b/azure-pipelines/test-matrix.yml @@ -0,0 +1,30 @@ +parameters: + - name: pool + type: object + - name: containerName + type: string + default: '' + - name: installDotNet + type: boolean + - name: installAdditionalLinuxDependencies + type: boolean + default: false + +jobs: +- job: + strategy: + matrix: + CSharpTests: + npmCommand: 'test:withoutDevKit' + DevKitTests: + npmCommand: test:integration:devkit + pool: ${{ parameters.pool }} + ${{ if parameters.containerName }}: + container: ${{ parameters.containerName }} + steps: + - template: /azure-pipelines/test.yml@self + parameters: + # Prefer the dotnet from the container. + installDotNet: false + installAdditionalLinuxDependencies: true + npmCommand: $(npmCommand) \ No newline at end of file diff --git a/azure-pipelines/test.yml b/azure-pipelines/test.yml index e4da1d476..bde85db28 100644 --- a/azure-pipelines/test.yml +++ b/azure-pipelines/test.yml @@ -4,6 +4,8 @@ parameters: - name: installAdditionalLinuxDependencies type: boolean default: false + - name: npmCommand + type: string steps: - checkout: self @@ -23,8 +25,8 @@ steps: parameters: installAdditionalLinuxDependencies: ${{ parameters.installAdditionalLinuxDependencies }} -- script: npm run test - displayName: 🧪 Run unit and integration tests +- script: npm run ${{ parameters.npmCommand }} + displayName: 🧪 Run $(Agent.JobName) env: DISPLAY: :99.0 @@ -37,11 +39,11 @@ steps: searchFolder: '$(Build.SourcesDirectory)/out' publishRunAttachments: true mergeTestResults: true - testRunTitle: $(Agent.JobName) (Attempt $(System.JobAttempt)) + testRunTitle: $(System.StageDisplayName) $(Agent.JobName) (Attempt $(System.JobAttempt)) - task: PublishPipelineArtifact@1 condition: failed() displayName: 'Upload integration test logs' inputs: - targetPath: '$(Build.SourcesDirectory)/.vscode-test/user-data/logs' - artifactName: 'VSCode Test Logs ($(Agent.JobName)-$(System.JobAttempt))' + targetPath: '$(Build.SourcesDirectory)/out/logs' + artifactName: 'Test Logs ($(System.StageDisplayName)-$(Agent.JobName)-$(System.JobAttempt))' diff --git a/jest.config.ts b/jest.config.ts index cf4a2d1de..3b98eb49c 100644 --- a/jest.config.ts +++ b/jest.config.ts @@ -27,7 +27,8 @@ const config: Config = { // Azure DevOps does not display test suites (it ignores them entirely). // So we have to put all the info in the test case name so the UI shows anything relatively useful. // See https://github.com/microsoft/azure-pipelines-tasks/issues/7659 - titleTemplate: '{filename} / {suitename} / {title}', + classNameTemplate: '{suitename}', + titleTemplate: `${process.env.JEST_SUITE_NAME} {suitename} / {title}`, }, ], ], diff --git a/package-lock.json b/package-lock.json index b3e8fbe0d..c290c8ef6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -49,15 +49,15 @@ "@types/fs-extra": "5.0.4", "@types/gulp": "4.0.5", "@types/minimist": "1.2.1", - "@types/node": "16.11.38", + "@types/node": "20.14.8", "@types/semver": "7.3.13", "@types/tmp": "0.0.33", "@types/unzipper": "^0.9.1", "@types/uuid": "^9.0.1", "@types/vscode": "1.73.0", "@types/yauzl": "2.10.0", - "@typescript-eslint/eslint-plugin": "^5.61.0", - "@typescript-eslint/parser": "^5.61.0", + "@typescript-eslint/eslint-plugin": "^8.5.0", + "@typescript-eslint/parser": "^8.5.0", "@vscode/l10n-dev": "^0.0.35", "@vscode/test-electron": "2.3.8", "@vscode/vsce": "3.0.0", @@ -65,7 +65,6 @@ "del": "3.0.0", "eslint": "^8.43.0", "eslint-config-prettier": "^8.8.0", - "eslint-config-standard-with-typescript": "^35.0.0", "eslint-plugin-header": "^3.1.1", "eslint-plugin-import": "^2.27.5", "eslint-plugin-n": "^15.7.0", @@ -89,7 +88,7 @@ "ts-jest": "^29.1.1", "ts-loader": "9.0.0", "ts-node": "9.1.1", - "typescript": "^5.1.6", + "typescript": "5.6.2", "unzipper": "0.10.11", "vscode-oniguruma": "^1.6.1", "vscode-textmate": "^6.0.0", @@ -540,29 +539,6 @@ "url": "https://opencollective.com/babel" } }, - "node_modules/@babel/core/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@babel/core/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, "node_modules/@babel/core/node_modules/semver": { "version": "6.3.1", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/semver/-/semver-6.3.1.tgz", @@ -1016,23 +992,6 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/traverse/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, "node_modules/@babel/traverse/node_modules/globals": { "version": "11.12.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/globals/-/globals-11.12.0.tgz", @@ -1042,12 +1001,6 @@ "node": ">=4" } }, - "node_modules/@babel/traverse/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, "node_modules/@babel/types": { "version": "7.23.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/types/-/types-7.23.0.tgz", @@ -1093,23 +1046,25 @@ } }, "node_modules/@eslint-community/regexpp": { - "version": "4.5.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@eslint-community/regexpp/-/regexpp-4.5.1.tgz", - "integrity": "sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==", + "version": "4.11.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@eslint-community/regexpp/-/regexpp-4.11.0.tgz", + "integrity": "sha1-sP/QMStKP9LW93I35ySKWtOmgK4=", "dev": true, + "license": "MIT", "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, "node_modules/@eslint/eslintrc": { - "version": "2.0.3", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@eslint/eslintrc/-/eslintrc-2.0.3.tgz", - "integrity": "sha512-+5gy6OQfk+xx3q0d6jGZZC3f3KzAkXc/IanVxd1is/VIIziRqqt3ongQz0FiTUXqTk0c7aDB3OaFuKnuSoJicQ==", + "version": "2.1.4", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha1-OIomnw8lwbatwxe1osVXFIlMcK0=", "dev": true, + "license": "MIT", "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.5.2", + "espree": "^9.6.0", "globals": "^13.19.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", @@ -1127,31 +1082,16 @@ "node_modules/@eslint/eslintrc/node_modules/argparse": { "version": "2.0.1", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "node_modules/@eslint/eslintrc/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "integrity": "sha1-JG9Q88p4oyQPbJl+ipvR6sSeSzg=", "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } + "license": "Python-2.0" }, "node_modules/@eslint/eslintrc/node_modules/js-yaml": { "version": "4.1.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "integrity": "sha1-wftl+PUBeQHN0slRhkuhhFihBgI=", "dev": true, + "license": "MIT", "dependencies": { "argparse": "^2.0.1" }, @@ -1162,8 +1102,9 @@ "node_modules/@eslint/eslintrc/node_modules/minimatch": { "version": "3.1.2", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "integrity": "sha1-Gc0ZS/0+Qo8EmnCBfAONiatL41s=", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -1171,17 +1112,12 @@ "node": "*" } }, - "node_modules/@eslint/eslintrc/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, "node_modules/@eslint/js": { - "version": "8.43.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@eslint/js/-/js-8.43.0.tgz", - "integrity": "sha512-s2UHCoiXfxMvmfzqoN+vrQ84ahUSYde9qNO1MdxmoEhyHWsfmwOpFlwYV+ePJEVc7gFnATGUi376WowX1N7tFg==", + "version": "8.57.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@eslint/js/-/js-8.57.0.tgz", + "integrity": "sha1-pUF66EJ4c/HdCLcLNXS0U+Z7X38=", "dev": true, + "license": "MIT", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } @@ -1210,42 +1146,20 @@ } }, "node_modules/@humanwhocodes/config-array": { - "version": "0.11.10", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@humanwhocodes/config-array/-/config-array-0.11.10.tgz", - "integrity": "sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==", + "version": "0.11.14", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", + "integrity": "sha1-145IGgOfdWbsyWYLTqf+ax/sRCs=", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", + "@humanwhocodes/object-schema": "^2.0.2", + "debug": "^4.3.1", "minimatch": "^3.0.5" }, "engines": { "node": ">=10.10.0" } }, - "node_modules/@humanwhocodes/config-array/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@humanwhocodes/config-array/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, "node_modules/@humanwhocodes/module-importer": { "version": "1.0.1", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", @@ -1260,10 +1174,11 @@ } }, "node_modules/@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true + "version": "2.0.3", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha1-Siho111taWPkI7z5C3/RvjQ0CdM=", + "dev": true, + "license": "BSD-3-Clause" }, "node_modules/@isaacs/cliui": { "version": "8.0.2", @@ -2995,9 +2910,13 @@ "dev": true }, "node_modules/@types/node": { - "version": "16.11.38", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@types/node/-/node-16.11.38.tgz", - "integrity": "sha512-hjO/0K140An3GWDw2HJfq7gko3wWeznbjXgg+rzPdVzhe198hp4x2i1dgveAOEiFKd8sOilAxzoSJiVv5P/CUg==" + "version": "20.14.8", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@types/node/-/node-20.14.8.tgz", + "integrity": "sha1-RcJqKl3ibDU0qVBFMN2zsnzgMaw=", + "license": "MIT", + "dependencies": { + "undici-types": "~5.26.4" + } }, "node_modules/@types/normalize-package-data": { "version": "2.4.1", @@ -3106,32 +3025,32 @@ } }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.62.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz", - "integrity": "sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==", + "version": "8.5.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.5.0.tgz", + "integrity": "sha1-fBhjaTqYNxcDaG4cD6xk/8V2zbE=", "dev": true, + "license": "MIT", "dependencies": { - "@eslint-community/regexpp": "^4.4.0", - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/type-utils": "5.62.0", - "@typescript-eslint/utils": "5.62.0", - "debug": "^4.3.4", + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "8.5.0", + "@typescript-eslint/type-utils": "8.5.0", + "@typescript-eslint/utils": "8.5.0", + "@typescript-eslint/visitor-keys": "8.5.0", "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "natural-compare-lite": "^1.4.0", - "semver": "^7.3.7", - "tsutils": "^3.21.0" + "ignore": "^5.3.1", + "natural-compare": "^1.4.0", + "ts-api-utils": "^1.3.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^5.0.0", - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + "@typescript-eslint/parser": "^8.0.0 || ^8.0.0-alpha.0", + "eslint": "^8.57.0 || ^9.0.0" }, "peerDependenciesMeta": { "typescript": { @@ -3139,49 +3058,28 @@ } } }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, "node_modules/@typescript-eslint/parser": { - "version": "5.62.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@typescript-eslint/parser/-/parser-5.62.0.tgz", - "integrity": "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==", + "version": "8.5.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@typescript-eslint/parser/-/parser-8.5.0.tgz", + "integrity": "sha1-1ZDh758x8m1COZmtP2h3IyR+a8w=", "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/typescript-estree": "5.62.0", + "@typescript-eslint/scope-manager": "8.5.0", + "@typescript-eslint/types": "8.5.0", + "@typescript-eslint/typescript-estree": "8.5.0", + "@typescript-eslint/visitor-keys": "8.5.0", "debug": "^4.3.4" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + "eslint": "^8.57.0 || ^9.0.0" }, "peerDependenciesMeta": { "typescript": { @@ -3189,40 +3087,18 @@ } } }, - "node_modules/@typescript-eslint/parser/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/parser/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, "node_modules/@typescript-eslint/scope-manager": { - "version": "5.62.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", - "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", + "version": "8.5.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@typescript-eslint/scope-manager/-/scope-manager-8.5.0.tgz", + "integrity": "sha1-OFNB3mW5dvArKVuKylS7T/1rXwc=", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0" + "@typescript-eslint/types": "8.5.0", + "@typescript-eslint/visitor-keys": "8.5.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", @@ -3230,62 +3106,38 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "5.62.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz", - "integrity": "sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==", + "version": "8.5.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@typescript-eslint/type-utils/-/type-utils-8.5.0.tgz", + "integrity": "sha1-YhWyOqOdu9jd4KTvnuD3RUEMKbE=", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/typescript-estree": "5.62.0", - "@typescript-eslint/utils": "5.62.0", + "@typescript-eslint/typescript-estree": "8.5.0", + "@typescript-eslint/utils": "8.5.0", "debug": "^4.3.4", - "tsutils": "^3.21.0" + "ts-api-utils": "^1.3.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, - "peerDependencies": { - "eslint": "*" - }, "peerDependenciesMeta": { "typescript": { "optional": true } } }, - "node_modules/@typescript-eslint/type-utils/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/type-utils/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, "node_modules/@typescript-eslint/types": { - "version": "5.62.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@typescript-eslint/types/-/types-5.62.0.tgz", - "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", + "version": "8.5.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@typescript-eslint/types/-/types-8.5.0.tgz", + "integrity": "sha1-RGXZkzHRJ2+PsgMOT5xz/gGgW/k=", "dev": true, + "license": "MIT", "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", @@ -3293,21 +3145,23 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.62.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", - "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", + "version": "8.5.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@typescript-eslint/typescript-estree/-/typescript-estree-8.5.0.tgz", + "integrity": "sha1-bldYzy9jqobp3fpOKE4uC4G4dVc=", "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0", + "@typescript-eslint/types": "8.5.0", + "@typescript-eslint/visitor-keys": "8.5.0", "debug": "^4.3.4", - "globby": "^11.1.0", + "fast-glob": "^3.3.2", "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", @@ -3319,107 +3173,93 @@ } } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha1-HtxFng8MVISG7Pn8mfIiE2S5oK4=", "dev": true, - "engines": { - "node": ">=8" + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha1-10+d1rV9g9jpjPuCEzsDl4vJKeU=", "dev": true, + "license": "ISC", "dependencies": { - "ms": "2.1.2" + "brace-expansion": "^2.0.1" }, "engines": { - "node": ">=6.0" + "node": ">=16 || 14 >=14.17" }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/globby": { - "version": "11.1.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/semver/-/semver-7.6.3.tgz", + "integrity": "sha1-mA97VVC8F1+03AlAMIVif56zMUM=", "dev": true, - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" + "license": "ISC", + "bin": { + "semver": "bin/semver.js" }, "engines": { "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, "node_modules/@typescript-eslint/utils": { - "version": "5.62.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@typescript-eslint/utils/-/utils-5.62.0.tgz", - "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", + "version": "8.5.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@typescript-eslint/utils/-/utils-8.5.0.tgz", + "integrity": "sha1-TU/+2W0GVFRqN/qluEvc4W2VFjQ=", "dev": true, + "license": "MIT", "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@types/json-schema": "^7.0.9", - "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/typescript-estree": "5.62.0", - "eslint-scope": "^5.1.1", - "semver": "^7.3.7" + "@eslint-community/eslint-utils": "^4.4.0", + "@typescript-eslint/scope-manager": "8.5.0", + "@typescript-eslint/types": "8.5.0", + "@typescript-eslint/typescript-estree": "8.5.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + "eslint": "^8.57.0 || ^9.0.0" } }, - "node_modules/@typescript-eslint/utils/node_modules/@types/semver": { - "version": "7.5.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@types/semver/-/semver-7.5.0.tgz", - "integrity": "sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==", - "dev": true - }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.62.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", - "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", + "version": "8.5.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@typescript-eslint/visitor-keys/-/visitor-keys-8.5.0.tgz", + "integrity": "sha1-EwKN87hm0uPi4sxBk88sHg4ExL8=", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/types": "5.62.0", - "eslint-visitor-keys": "^3.3.0" + "@typescript-eslint/types": "8.5.0", + "eslint-visitor-keys": "^3.4.3" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" } }, + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha1-dWZBrbWHhRtcyz4JXa8nrlgchAY=", + "dev": true, + "license": "ISC" + }, "node_modules/@vscode/debugprotocol": { "version": "1.56.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@vscode/debugprotocol/-/debugprotocol-1.56.0.tgz", @@ -3582,23 +3422,6 @@ "node": ">=12" } }, - "node_modules/@vscode/l10n-dev/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, "node_modules/@vscode/l10n-dev/node_modules/entities": { "version": "4.5.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/entities/-/entities-4.5.0.tgz", @@ -3684,12 +3507,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@vscode/l10n-dev/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, "node_modules/@vscode/l10n-dev/node_modules/uc.micro": { "version": "2.1.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/uc.micro/-/uc.micro-2.1.0.tgz", @@ -3751,23 +3568,6 @@ "node": ">= 6.0.0" } }, - "node_modules/@vscode/test-electron/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, "node_modules/@vscode/test-electron/node_modules/http-proxy-agent": { "version": "4.0.1", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", @@ -3795,12 +3595,6 @@ "node": ">= 6" } }, - "node_modules/@vscode/test-electron/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, "node_modules/@vscode/vsce": { "version": "3.0.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@vscode/vsce/-/vsce-3.0.0.tgz", @@ -4333,10 +4127,11 @@ "license": "Apache-2.0" }, "node_modules/acorn": { - "version": "8.8.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/acorn/-/acorn-8.8.2.tgz", - "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", + "version": "8.12.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/acorn/-/acorn-8.12.1.tgz", + "integrity": "sha1-cWFr3MviXielRDngBG6JynbfIkg=", "dev": true, + "license": "MIT", "bin": { "acorn": "bin/acorn" }, @@ -4357,8 +4152,9 @@ "node_modules/acorn-jsx": { "version": "5.3.2", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "integrity": "sha1-ftW7VZCLOy8bxVxq8WU7rafweTc=", "dev": true, + "license": "MIT", "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } @@ -4374,27 +4170,6 @@ "node": ">= 14" } }, - "node_modules/agent-base/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/agent-base/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, "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", @@ -5857,6 +5632,29 @@ "url": "https://github.com/sponsors/fb55" } }, + "node_modules/debug": { + "version": "4.3.7", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/debug/-/debug-4.3.7.tgz", + "integrity": "sha1-h5RbQVGgEddtlaGY1xEchlw2ClI=", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/debug/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ms/-/ms-2.1.3.tgz", + "integrity": "sha1-V0yBOM4dK1hh8LRFedut1gxmFbI=", + "license": "MIT" + }, "node_modules/decompress-response": { "version": "6.0.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/decompress-response/-/decompress-response-6.0.0.tgz", @@ -5900,8 +5698,9 @@ "node_modules/deep-is": { "version": "0.1.4", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true + "integrity": "sha1-pvLc5hL63S7x9Rm3NVHxfoUZmDE=", + "dev": true, + "license": "MIT" }, "node_modules/deepmerge": { "version": "4.3.1", @@ -6036,27 +5835,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/dir-glob/node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/doctrine": { "version": "3.0.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/doctrine/-/doctrine-3.0.0.tgz", @@ -6419,27 +6197,29 @@ } }, "node_modules/eslint": { - "version": "8.43.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/eslint/-/eslint-8.43.0.tgz", - "integrity": "sha512-aaCpf2JqqKesMFGgmRPessmVKjcGXqdlAYLLC3THM8t5nBRZRQ+st5WM/hoJXkdioEXLLbXgclUpM0TXo5HX5Q==", + "version": "8.57.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/eslint/-/eslint-8.57.0.tgz", + "integrity": "sha1-x4am/Q4LaJQar2JFlvuYcIkZVmg=", "dev": true, + "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.4.0", - "@eslint/eslintrc": "^2.0.3", - "@eslint/js": "8.43.0", - "@humanwhocodes/config-array": "^0.11.10", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.0", + "@humanwhocodes/config-array": "^0.11.14", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", - "ajv": "^6.10.0", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", "debug": "^4.3.2", "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.0", - "eslint-visitor-keys": "^3.4.1", - "espree": "^9.5.2", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", "esquery": "^1.4.2", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", @@ -6449,7 +6229,6 @@ "globals": "^13.19.0", "graphemer": "^1.4.0", "ignore": "^5.2.0", - "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", "is-path-inside": "^3.0.3", @@ -6459,9 +6238,8 @@ "lodash.merge": "^4.6.2", "minimatch": "^3.1.2", "natural-compare": "^1.4.0", - "optionator": "^0.9.1", + "optionator": "^0.9.3", "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", "text-table": "^0.2.0" }, "bin": { @@ -6486,50 +6264,6 @@ "eslint": ">=7.0.0" } }, - "node_modules/eslint-config-standard": { - "version": "17.0.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/eslint-config-standard/-/eslint-config-standard-17.0.0.tgz", - "integrity": "sha512-/2ks1GKyqSOkH7JFvXJicu0iMpoojkwB+f5Du/1SC0PtBL+s8v30k9njRZ21pm2drKYm2342jFnGWzttxPmZVg==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "peerDependencies": { - "eslint": "^8.0.1", - "eslint-plugin-import": "^2.25.2", - "eslint-plugin-n": "^15.0.0", - "eslint-plugin-promise": "^6.0.0" - } - }, - "node_modules/eslint-config-standard-with-typescript": { - "version": "35.0.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/eslint-config-standard-with-typescript/-/eslint-config-standard-with-typescript-35.0.0.tgz", - "integrity": "sha512-Xa7DY9GgduZyp0qmXxBF0/dB+Vm4/DgWu1lGpNLJV2d46aCaUxTKDEnkzjUWX/1O9S0a+Dhnw7A4oI0JpYzwtw==", - "dev": true, - "dependencies": { - "@typescript-eslint/parser": "^5.50.0", - "eslint-config-standard": "17.0.0" - }, - "peerDependencies": { - "@typescript-eslint/eslint-plugin": "^5.50.0", - "eslint": "^8.0.1", - "eslint-plugin-import": "^2.25.2", - "eslint-plugin-n": "^15.0.0", - "eslint-plugin-promise": "^6.0.0", - "typescript": "*" - } - }, "node_modules/eslint-import-resolver-node": { "version": "0.3.7", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz", @@ -6999,10 +6733,11 @@ } }, "node_modules/eslint-visitor-keys": { - "version": "3.4.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz", - "integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==", + "version": "3.4.3", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha1-DNcv6FUOPC6uFWqWpN3c0cisWAA=", "dev": true, + "license": "Apache-2.0", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, @@ -7079,23 +6814,6 @@ "node": ">= 8" } }, - "node_modules/eslint/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, "node_modules/eslint/node_modules/escape-string-regexp": { "version": "4.0.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", @@ -7109,10 +6827,11 @@ } }, "node_modules/eslint/node_modules/eslint-scope": { - "version": "7.2.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/eslint-scope/-/eslint-scope-7.2.0.tgz", - "integrity": "sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==", + "version": "7.2.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha1-3rT5JWM5DzIAaJSvYqItuhxGQj8=", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" @@ -7178,12 +6897,6 @@ "node": "*" } }, - "node_modules/eslint/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, "node_modules/eslint/node_modules/path-key": { "version": "3.1.1", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/path-key/-/path-key-3.1.1.tgz", @@ -7242,12 +6955,13 @@ } }, "node_modules/espree": { - "version": "9.5.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/espree/-/espree-9.5.2.tgz", - "integrity": "sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw==", + "version": "9.6.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/espree/-/espree-9.6.1.tgz", + "integrity": "sha1-oqF7jkNGkKVDLy+AGM5x0zGkjG8=", "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "acorn": "^8.8.0", + "acorn": "^8.9.0", "acorn-jsx": "^5.3.2", "eslint-visitor-keys": "^3.4.1" }, @@ -7495,10 +7209,11 @@ "license": "MIT" }, "node_modules/fast-glob": { - "version": "3.3.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/fast-glob/-/fast-glob-3.3.1.tgz", - "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", + "version": "3.3.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha1-qQRQHlfP3S/83tRemaVP71XkYSk=", "dev": true, + "license": "MIT", "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -7519,8 +7234,9 @@ "node_modules/fast-levenshtein": { "version": "2.0.6", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true, + "license": "MIT" }, "node_modules/fastest-levenshtein": { "version": "1.0.12", @@ -8202,10 +7918,11 @@ } }, "node_modules/globals": { - "version": "13.20.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/globals/-/globals-13.20.0.tgz", - "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", + "version": "13.24.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/globals/-/globals-13.24.0.tgz", + "integrity": "sha1-hDKhnXjODB6DOUnDats0VAC7EXE=", "dev": true, + "license": "MIT", "dependencies": { "type-fest": "^0.20.2" }, @@ -8591,27 +8308,6 @@ "node": ">= 14" } }, - "node_modules/http-proxy-agent/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/http-proxy-agent/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, "node_modules/https-proxy-agent": { "version": "7.0.2", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/https-proxy-agent/-/https-proxy-agent-7.0.2.tgz", @@ -8624,27 +8320,6 @@ "node": ">= 14" } }, - "node_modules/https-proxy-agent/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/https-proxy-agent/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, "node_modules/human-signals": { "version": "2.1.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/human-signals/-/human-signals-2.1.0.tgz", @@ -8686,10 +8361,11 @@ ] }, "node_modules/ignore": { - "version": "5.2.4", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "version": "5.3.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha1-PNQOcp82Q/2HywTlC/DrcivFlvU=", "dev": true, + "license": "MIT", "engines": { "node": ">= 4" } @@ -8708,8 +8384,9 @@ "node_modules/import-fresh": { "version": "3.3.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "integrity": "sha1-NxYsJfy566oublPVtNiM4X2eDCs=", "dev": true, + "license": "MIT", "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" @@ -8724,8 +8401,9 @@ "node_modules/import-fresh/node_modules/resolve-from": { "version": "4.0.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "integrity": "sha1-SrzYUq0y3Xuqv+m0DgCjbbXzkuY=", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -9362,33 +9040,10 @@ "istanbul-lib-coverage": "^3.0.0", "source-map": "^0.6.1" }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-lib-source-maps/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "engines": { + "node": ">=10" } }, - "node_modules/istanbul-lib-source-maps/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, "node_modules/istanbul-lib-source-maps/node_modules/source-map": { "version": "0.6.1", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/source-map/-/source-map-0.6.1.tgz", @@ -11459,8 +11114,9 @@ "node_modules/levn": { "version": "0.4.1", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "integrity": "sha1-rkViwAdHO5MqYgDUAyaN0v/8at4=", "dev": true, + "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" @@ -11732,8 +11388,9 @@ "node_modules/merge2": { "version": "1.4.1", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "integrity": "sha1-Q2iJL4hekHRVpv19xVwMnUBJkK4=", "dev": true, + "license": "MIT", "engines": { "node": ">= 8" } @@ -11981,12 +11638,6 @@ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, - "node_modules/natural-compare-lite": { - "version": "1.4.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", - "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", - "dev": true - }, "node_modules/neo-async": { "version": "2.6.2", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/neo-async/-/neo-async-2.6.2.tgz", @@ -12425,17 +12076,18 @@ } }, "node_modules/optionator": { - "version": "0.9.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "version": "0.9.4", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha1-fqHBpdkddk+yghOciP4R4YKjpzQ=", "dev": true, + "license": "MIT", "dependencies": { "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", "levn": "^0.4.1", "prelude-ls": "^1.2.1", "type-check": "^0.4.0", - "word-wrap": "^1.2.3" + "word-wrap": "^1.2.5" }, "engines": { "node": ">= 0.8.0" @@ -12513,8 +12165,9 @@ "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "integrity": "sha1-aR0nCeeMefrjoVZiJFLQB2LKqqI=", "dev": true, + "license": "MIT", "dependencies": { "callsites": "^3.0.0" }, @@ -12850,8 +12503,9 @@ "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "integrity": "sha1-3rxkidem5rDnYRiIzsiAM30xY5Y=", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8.0" } @@ -14320,6 +13974,19 @@ "integrity": "sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk=", "dev": true }, + "node_modules/ts-api-utils": { + "version": "1.3.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ts-api-utils/-/ts-api-utils-1.3.0.tgz", + "integrity": "sha1-S0kOJxKfHo5oa0XMSrY3FNxg7qE=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "typescript": ">=4.2.0" + } + }, "node_modules/ts-jest": { "version": "29.1.1", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ts-jest/-/ts-jest-29.1.1.tgz", @@ -14526,21 +14193,6 @@ "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/tslib/-/tslib-1.13.0.tgz", "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==" }, - "node_modules/tsutils": { - "version": "3.21.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "dependencies": { - "tslib": "^1.8.1" - }, - "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" - } - }, "node_modules/tunnel": { "version": "0.0.6", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/tunnel/-/tunnel-0.0.6.tgz", @@ -14567,8 +14219,9 @@ "node_modules/type-check": { "version": "0.4.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "integrity": "sha1-B7ggO/pwVsBlcFDjzNLDdzC6uPE=", "dev": true, + "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1" }, @@ -14588,8 +14241,9 @@ "node_modules/type-fest": { "version": "0.20.2", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "integrity": "sha1-G/IH9LKPkVg2ZstfvTJ4hzAc1fQ=", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" }, @@ -14637,10 +14291,11 @@ } }, "node_modules/typescript": { - "version": "5.1.6", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/typescript/-/typescript-5.1.6.tgz", - "integrity": "sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==", + "version": "5.6.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/typescript/-/typescript-5.6.2.tgz", + "integrity": "sha1-0d5ntr73fEGCP4It+PCzvP9gpaA=", "dev": true, + "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -14734,6 +14389,12 @@ "fastest-levenshtein": "^1.0.7" } }, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha1-vNU5iT0AtW6WT9JlekhmsiGmVhc=", + "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", @@ -15479,10 +15140,11 @@ "dev": true }, "node_modules/word-wrap": { - "version": "1.2.4", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/word-wrap/-/word-wrap-1.2.4.tgz", - "integrity": "sha512-2V81OA4ugVo5pRo46hAoD2ivUJx8jXmWXfUkY4KFNw0hEptvN0QfH3K4nHiwzGeKl5rFKedV48QVoqYavy4YpA==", + "version": "1.2.5", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha1-0sRcbdT7zmIaZvE2y+Mor9BBCzQ=", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -16117,21 +15779,6 @@ "semver": "^6.3.1" }, "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, "semver": { "version": "6.3.1", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/semver/-/semver-6.3.1.tgz", @@ -16468,26 +16115,11 @@ "globals": "^11.1.0" }, "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, "globals": { "version": "11.12.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/globals/-/globals-11.12.0.tgz", "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "dev": true - }, - "ms": { - "version": "2.1.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true } } }, @@ -16524,20 +16156,20 @@ } }, "@eslint-community/regexpp": { - "version": "4.5.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@eslint-community/regexpp/-/regexpp-4.5.1.tgz", - "integrity": "sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==", + "version": "4.11.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@eslint-community/regexpp/-/regexpp-4.11.0.tgz", + "integrity": "sha1-sP/QMStKP9LW93I35ySKWtOmgK4=", "dev": true }, "@eslint/eslintrc": { - "version": "2.0.3", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@eslint/eslintrc/-/eslintrc-2.0.3.tgz", - "integrity": "sha512-+5gy6OQfk+xx3q0d6jGZZC3f3KzAkXc/IanVxd1is/VIIziRqqt3ongQz0FiTUXqTk0c7aDB3OaFuKnuSoJicQ==", + "version": "2.1.4", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha1-OIomnw8lwbatwxe1osVXFIlMcK0=", "dev": true, "requires": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.5.2", + "espree": "^9.6.0", "globals": "^13.19.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", @@ -16549,22 +16181,13 @@ "argparse": { "version": "2.0.1", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "integrity": "sha1-JG9Q88p4oyQPbJl+ipvR6sSeSzg=", "dev": true }, - "debug": { - "version": "4.3.4", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, "js-yaml": { "version": "4.1.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "integrity": "sha1-wftl+PUBeQHN0slRhkuhhFihBgI=", "dev": true, "requires": { "argparse": "^2.0.1" @@ -16573,24 +16196,18 @@ "minimatch": { "version": "3.1.2", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "integrity": "sha1-Gc0ZS/0+Qo8EmnCBfAONiatL41s=", "dev": true, "requires": { "brace-expansion": "^1.1.7" } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true } } }, "@eslint/js": { - "version": "8.43.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@eslint/js/-/js-8.43.0.tgz", - "integrity": "sha512-s2UHCoiXfxMvmfzqoN+vrQ84ahUSYde9qNO1MdxmoEhyHWsfmwOpFlwYV+ePJEVc7gFnATGUi376WowX1N7tFg==", + "version": "8.57.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@eslint/js/-/js-8.57.0.tgz", + "integrity": "sha1-pUF66EJ4c/HdCLcLNXS0U+Z7X38=", "dev": true }, "@gulpjs/messages": { @@ -16609,31 +16226,14 @@ } }, "@humanwhocodes/config-array": { - "version": "0.11.10", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@humanwhocodes/config-array/-/config-array-0.11.10.tgz", - "integrity": "sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==", + "version": "0.11.14", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", + "integrity": "sha1-145IGgOfdWbsyWYLTqf+ax/sRCs=", "dev": true, "requires": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", + "@humanwhocodes/object-schema": "^2.0.2", + "debug": "^4.3.1", "minimatch": "^3.0.5" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } } }, "@humanwhocodes/module-importer": { @@ -16643,9 +16243,9 @@ "dev": true }, "@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "version": "2.0.3", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha1-Siho111taWPkI7z5C3/RvjQ0CdM=", "dev": true }, "@isaacs/cliui": { @@ -18032,9 +17632,12 @@ "dev": true }, "@types/node": { - "version": "16.11.38", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@types/node/-/node-16.11.38.tgz", - "integrity": "sha512-hjO/0K140An3GWDw2HJfq7gko3wWeznbjXgg+rzPdVzhe198hp4x2i1dgveAOEiFKd8sOilAxzoSJiVv5P/CUg==" + "version": "20.14.8", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@types/node/-/node-20.14.8.tgz", + "integrity": "sha1-RcJqKl3ibDU0qVBFMN2zsnzgMaw=", + "requires": { + "undici-types": "~5.26.4" + } }, "@types/normalize-package-data": { "version": "2.4.1", @@ -18143,200 +17746,133 @@ } }, "@typescript-eslint/eslint-plugin": { - "version": "5.62.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz", - "integrity": "sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==", + "version": "8.5.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.5.0.tgz", + "integrity": "sha1-fBhjaTqYNxcDaG4cD6xk/8V2zbE=", "dev": true, "requires": { - "@eslint-community/regexpp": "^4.4.0", - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/type-utils": "5.62.0", - "@typescript-eslint/utils": "5.62.0", - "debug": "^4.3.4", + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "8.5.0", + "@typescript-eslint/type-utils": "8.5.0", + "@typescript-eslint/utils": "8.5.0", + "@typescript-eslint/visitor-keys": "8.5.0", "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "natural-compare-lite": "^1.4.0", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } + "ignore": "^5.3.1", + "natural-compare": "^1.4.0", + "ts-api-utils": "^1.3.0" } }, "@typescript-eslint/parser": { - "version": "5.62.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@typescript-eslint/parser/-/parser-5.62.0.tgz", - "integrity": "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==", + "version": "8.5.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@typescript-eslint/parser/-/parser-8.5.0.tgz", + "integrity": "sha1-1ZDh758x8m1COZmtP2h3IyR+a8w=", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/typescript-estree": "5.62.0", + "@typescript-eslint/scope-manager": "8.5.0", + "@typescript-eslint/types": "8.5.0", + "@typescript-eslint/typescript-estree": "8.5.0", + "@typescript-eslint/visitor-keys": "8.5.0", "debug": "^4.3.4" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } } }, "@typescript-eslint/scope-manager": { - "version": "5.62.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", - "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", + "version": "8.5.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@typescript-eslint/scope-manager/-/scope-manager-8.5.0.tgz", + "integrity": "sha1-OFNB3mW5dvArKVuKylS7T/1rXwc=", "dev": true, "requires": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0" + "@typescript-eslint/types": "8.5.0", + "@typescript-eslint/visitor-keys": "8.5.0" } }, "@typescript-eslint/type-utils": { - "version": "5.62.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz", - "integrity": "sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==", + "version": "8.5.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@typescript-eslint/type-utils/-/type-utils-8.5.0.tgz", + "integrity": "sha1-YhWyOqOdu9jd4KTvnuD3RUEMKbE=", "dev": true, "requires": { - "@typescript-eslint/typescript-estree": "5.62.0", - "@typescript-eslint/utils": "5.62.0", + "@typescript-eslint/typescript-estree": "8.5.0", + "@typescript-eslint/utils": "8.5.0", "debug": "^4.3.4", - "tsutils": "^3.21.0" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } + "ts-api-utils": "^1.3.0" } }, "@typescript-eslint/types": { - "version": "5.62.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@typescript-eslint/types/-/types-5.62.0.tgz", - "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", + "version": "8.5.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@typescript-eslint/types/-/types-8.5.0.tgz", + "integrity": "sha1-RGXZkzHRJ2+PsgMOT5xz/gGgW/k=", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "5.62.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", - "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", + "version": "8.5.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@typescript-eslint/typescript-estree/-/typescript-estree-8.5.0.tgz", + "integrity": "sha1-bldYzy9jqobp3fpOKE4uC4G4dVc=", "dev": true, "requires": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0", + "@typescript-eslint/types": "8.5.0", + "@typescript-eslint/visitor-keys": "8.5.0", "debug": "^4.3.4", - "globby": "^11.1.0", + "fast-glob": "^3.3.2", "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" }, "dependencies": { - "array-union": { - "version": "2.1.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true - }, - "debug": { - "version": "4.3.4", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha1-HtxFng8MVISG7Pn8mfIiE2S5oK4=", "dev": true, "requires": { - "ms": "2.1.2" + "balanced-match": "^1.0.0" } }, - "globby": { - "version": "11.1.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "minimatch": { + "version": "9.0.5", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha1-10+d1rV9g9jpjPuCEzsDl4vJKeU=", "dev": true, "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" + "brace-expansion": "^2.0.1" } }, - "ms": { - "version": "2.1.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "semver": { + "version": "7.6.3", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/semver/-/semver-7.6.3.tgz", + "integrity": "sha1-mA97VVC8F1+03AlAMIVif56zMUM=", "dev": true } } }, "@typescript-eslint/utils": { - "version": "5.62.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@typescript-eslint/utils/-/utils-5.62.0.tgz", - "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", + "version": "8.5.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@typescript-eslint/utils/-/utils-8.5.0.tgz", + "integrity": "sha1-TU/+2W0GVFRqN/qluEvc4W2VFjQ=", "dev": true, "requires": { - "@eslint-community/eslint-utils": "^4.2.0", - "@types/json-schema": "^7.0.9", - "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/typescript-estree": "5.62.0", - "eslint-scope": "^5.1.1", - "semver": "^7.3.7" - }, - "dependencies": { - "@types/semver": { - "version": "7.5.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@types/semver/-/semver-7.5.0.tgz", - "integrity": "sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==", - "dev": true - } + "@eslint-community/eslint-utils": "^4.4.0", + "@typescript-eslint/scope-manager": "8.5.0", + "@typescript-eslint/types": "8.5.0", + "@typescript-eslint/typescript-estree": "8.5.0" } }, "@typescript-eslint/visitor-keys": { - "version": "5.62.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", - "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", + "version": "8.5.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@typescript-eslint/visitor-keys/-/visitor-keys-8.5.0.tgz", + "integrity": "sha1-EwKN87hm0uPi4sxBk88sHg4ExL8=", "dev": true, "requires": { - "@typescript-eslint/types": "5.62.0", - "eslint-visitor-keys": "^3.3.0" + "@typescript-eslint/types": "8.5.0", + "eslint-visitor-keys": "^3.4.3" } }, + "@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha1-dWZBrbWHhRtcyz4JXa8nrlgchAY=", + "dev": true + }, "@vscode/debugprotocol": { "version": "1.56.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@vscode/debugprotocol/-/debugprotocol-1.56.0.tgz", @@ -18463,15 +17999,6 @@ "wrap-ansi": "^7.0.0" } }, - "debug": { - "version": "4.3.4", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, "entities": { "version": "4.5.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/entities/-/entities-4.5.0.tgz", @@ -18529,12 +18056,6 @@ "brace-expansion": "^2.0.1" } }, - "ms": { - "version": "2.1.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, "uc.micro": { "version": "2.1.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/uc.micro/-/uc.micro-2.1.0.tgz", @@ -18585,15 +18106,6 @@ "debug": "4" } }, - "debug": { - "version": "4.3.4", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, "http-proxy-agent": { "version": "4.0.1", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", @@ -18614,12 +18126,6 @@ "agent-base": "6", "debug": "4" } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true } } }, @@ -19009,9 +18515,9 @@ "dev": true }, "acorn": { - "version": "8.8.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/acorn/-/acorn-8.8.2.tgz", - "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", + "version": "8.12.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/acorn/-/acorn-8.12.1.tgz", + "integrity": "sha1-cWFr3MviXielRDngBG6JynbfIkg=", "dev": true }, "acorn-import-attributes": { @@ -19024,7 +18530,7 @@ "acorn-jsx": { "version": "5.3.2", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "integrity": "sha1-ftW7VZCLOy8bxVxq8WU7rafweTc=", "dev": true, "requires": {} }, @@ -19034,21 +18540,6 @@ "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", "requires": { "debug": "^4.3.4" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } } }, "aggregate-error": { @@ -20177,6 +19668,21 @@ "integrity": "sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw==", "dev": true }, + "debug": { + "version": "4.3.7", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/debug/-/debug-4.3.7.tgz", + "integrity": "sha1-h5RbQVGgEddtlaGY1xEchlw2ClI=", + "requires": { + "ms": "^2.1.3" + }, + "dependencies": { + "ms": { + "version": "2.1.3", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ms/-/ms-2.1.3.tgz", + "integrity": "sha1-V0yBOM4dK1hh8LRFedut1gxmFbI=" + } + } + }, "decompress-response": { "version": "6.0.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/decompress-response/-/decompress-response-6.0.0.tgz", @@ -20204,7 +19710,7 @@ "deep-is": { "version": "0.1.4", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "integrity": "sha1-pvLc5hL63S7x9Rm3NVHxfoUZmDE=", "dev": true }, "deepmerge": { @@ -20297,23 +19803,6 @@ "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", "dev": true }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "requires": { - "path-type": "^4.0.0" - }, - "dependencies": { - "path-type": { - "version": "4.0.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true - } - } - }, "doctrine": { "version": "3.0.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/doctrine/-/doctrine-3.0.0.tgz", @@ -20597,27 +20086,28 @@ "dev": true }, "eslint": { - "version": "8.43.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/eslint/-/eslint-8.43.0.tgz", - "integrity": "sha512-aaCpf2JqqKesMFGgmRPessmVKjcGXqdlAYLLC3THM8t5nBRZRQ+st5WM/hoJXkdioEXLLbXgclUpM0TXo5HX5Q==", + "version": "8.57.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/eslint/-/eslint-8.57.0.tgz", + "integrity": "sha1-x4am/Q4LaJQar2JFlvuYcIkZVmg=", "dev": true, "requires": { "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.4.0", - "@eslint/eslintrc": "^2.0.3", - "@eslint/js": "8.43.0", - "@humanwhocodes/config-array": "^0.11.10", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.0", + "@humanwhocodes/config-array": "^0.11.14", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", - "ajv": "^6.10.0", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", "debug": "^4.3.2", "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.0", - "eslint-visitor-keys": "^3.4.1", - "espree": "^9.5.2", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", "esquery": "^1.4.2", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", @@ -20627,7 +20117,6 @@ "globals": "^13.19.0", "graphemer": "^1.4.0", "ignore": "^5.2.0", - "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", "is-path-inside": "^3.0.3", @@ -20637,9 +20126,8 @@ "lodash.merge": "^4.6.2", "minimatch": "^3.1.2", "natural-compare": "^1.4.0", - "optionator": "^0.9.1", + "optionator": "^0.9.3", "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", "text-table": "^0.2.0" }, "dependencies": { @@ -20694,15 +20182,6 @@ "which": "^2.0.1" } }, - "debug": { - "version": "4.3.4", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, "escape-string-regexp": { "version": "4.0.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", @@ -20710,9 +20189,9 @@ "dev": true }, "eslint-scope": { - "version": "7.2.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/eslint-scope/-/eslint-scope-7.2.0.tgz", - "integrity": "sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==", + "version": "7.2.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha1-3rT5JWM5DzIAaJSvYqItuhxGQj8=", "dev": true, "requires": { "esrecurse": "^4.3.0", @@ -20758,12 +20237,6 @@ "brace-expansion": "^1.1.7" } }, - "ms": { - "version": "2.1.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, "path-key": { "version": "3.1.1", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/path-key/-/path-key-3.1.1.tgz", @@ -20812,23 +20285,6 @@ "dev": true, "requires": {} }, - "eslint-config-standard": { - "version": "17.0.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/eslint-config-standard/-/eslint-config-standard-17.0.0.tgz", - "integrity": "sha512-/2ks1GKyqSOkH7JFvXJicu0iMpoojkwB+f5Du/1SC0PtBL+s8v30k9njRZ21pm2drKYm2342jFnGWzttxPmZVg==", - "dev": true, - "requires": {} - }, - "eslint-config-standard-with-typescript": { - "version": "35.0.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/eslint-config-standard-with-typescript/-/eslint-config-standard-with-typescript-35.0.0.tgz", - "integrity": "sha512-Xa7DY9GgduZyp0qmXxBF0/dB+Vm4/DgWu1lGpNLJV2d46aCaUxTKDEnkzjUWX/1O9S0a+Dhnw7A4oI0JpYzwtw==", - "dev": true, - "requires": { - "@typescript-eslint/parser": "^5.50.0", - "eslint-config-standard": "17.0.0" - } - }, "eslint-import-resolver-node": { "version": "0.3.7", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz", @@ -21181,18 +20637,18 @@ } }, "eslint-visitor-keys": { - "version": "3.4.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz", - "integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==", + "version": "3.4.3", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha1-DNcv6FUOPC6uFWqWpN3c0cisWAA=", "dev": true }, "espree": { - "version": "9.5.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/espree/-/espree-9.5.2.tgz", - "integrity": "sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw==", + "version": "9.6.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/espree/-/espree-9.6.1.tgz", + "integrity": "sha1-oqF7jkNGkKVDLy+AGM5x0zGkjG8=", "dev": true, "requires": { - "acorn": "^8.8.0", + "acorn": "^8.9.0", "acorn-jsx": "^5.3.2", "eslint-visitor-keys": "^3.4.1" } @@ -21369,9 +20825,9 @@ "dev": true }, "fast-glob": { - "version": "3.3.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/fast-glob/-/fast-glob-3.3.1.tgz", - "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", + "version": "3.3.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha1-qQRQHlfP3S/83tRemaVP71XkYSk=", "dev": true, "requires": { "@nodelib/fs.stat": "^2.0.2", @@ -21390,7 +20846,7 @@ "fast-levenshtein": { "version": "2.0.6", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", "dev": true }, "fastest-levenshtein": { @@ -21895,9 +21351,9 @@ } }, "globals": { - "version": "13.20.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/globals/-/globals-13.20.0.tgz", - "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", + "version": "13.24.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/globals/-/globals-13.24.0.tgz", + "integrity": "sha1-hDKhnXjODB6DOUnDats0VAC7EXE=", "dev": true, "requires": { "type-fest": "^0.20.2" @@ -22164,21 +21620,6 @@ "requires": { "agent-base": "^7.1.0", "debug": "^4.3.4" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } } }, "https-proxy-agent": { @@ -22188,21 +21629,6 @@ "requires": { "agent-base": "^7.0.2", "debug": "4" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } } }, "human-signals": { @@ -22226,9 +21652,9 @@ "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" }, "ignore": { - "version": "5.2.4", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "version": "5.3.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha1-PNQOcp82Q/2HywTlC/DrcivFlvU=", "dev": true }, "immediate": { @@ -22245,7 +21671,7 @@ "import-fresh": { "version": "3.3.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "integrity": "sha1-NxYsJfy566oublPVtNiM4X2eDCs=", "dev": true, "requires": { "parent-module": "^1.0.0", @@ -22255,7 +21681,7 @@ "resolve-from": { "version": "4.0.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "integrity": "sha1-SrzYUq0y3Xuqv+m0DgCjbbXzkuY=", "dev": true } } @@ -22703,21 +22129,6 @@ "source-map": "^0.6.1" }, "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, "source-map": { "version": "0.6.1", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/source-map/-/source-map-0.6.1.tgz", @@ -24260,7 +23671,7 @@ "levn": { "version": "0.4.1", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "integrity": "sha1-rkViwAdHO5MqYgDUAyaN0v/8at4=", "dev": true, "requires": { "prelude-ls": "^1.2.1", @@ -24494,7 +23905,7 @@ "merge2": { "version": "1.4.1", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "integrity": "sha1-Q2iJL4hekHRVpv19xVwMnUBJkK4=", "dev": true }, "micromatch": { @@ -24684,12 +24095,6 @@ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, - "natural-compare-lite": { - "version": "1.4.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", - "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", - "dev": true - }, "neo-async": { "version": "2.6.2", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/neo-async/-/neo-async-2.6.2.tgz", @@ -25023,9 +24428,9 @@ } }, "optionator": { - "version": "0.9.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "version": "0.9.4", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha1-fqHBpdkddk+yghOciP4R4YKjpzQ=", "dev": true, "requires": { "deep-is": "^0.1.3", @@ -25033,7 +24438,7 @@ "levn": "^0.4.1", "prelude-ls": "^1.2.1", "type-check": "^0.4.0", - "word-wrap": "^1.2.3" + "word-wrap": "^1.2.5" } }, "os-tmpdir": { @@ -25086,7 +24491,7 @@ "parent-module": { "version": "1.0.1", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "integrity": "sha1-aR0nCeeMefrjoVZiJFLQB2LKqqI=", "dev": true, "requires": { "callsites": "^3.0.0" @@ -25346,7 +24751,7 @@ "prelude-ls": { "version": "1.2.1", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "integrity": "sha1-3rxkidem5rDnYRiIzsiAM30xY5Y=", "dev": true }, "prettier": { @@ -26408,6 +25813,13 @@ "integrity": "sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk=", "dev": true }, + "ts-api-utils": { + "version": "1.3.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ts-api-utils/-/ts-api-utils-1.3.0.tgz", + "integrity": "sha1-S0kOJxKfHo5oa0XMSrY3FNxg7qE=", + "dev": true, + "requires": {} + }, "ts-jest": { "version": "29.1.1", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ts-jest/-/ts-jest-29.1.1.tgz", @@ -26544,15 +25956,6 @@ "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/tslib/-/tslib-1.13.0.tgz", "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==" }, - "tsutils": { - "version": "3.21.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "requires": { - "tslib": "^1.8.1" - } - }, "tunnel": { "version": "0.0.6", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/tunnel/-/tunnel-0.0.6.tgz", @@ -26572,7 +25975,7 @@ "type-check": { "version": "0.4.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "integrity": "sha1-B7ggO/pwVsBlcFDjzNLDdzC6uPE=", "dev": true, "requires": { "prelude-ls": "^1.2.1" @@ -26587,7 +25990,7 @@ "type-fest": { "version": "0.20.2", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "integrity": "sha1-G/IH9LKPkVg2ZstfvTJ4hzAc1fQ=", "dev": true }, "type-is": { @@ -26623,9 +26026,9 @@ } }, "typescript": { - "version": "5.1.6", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/typescript/-/typescript-5.1.6.tgz", - "integrity": "sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==", + "version": "5.6.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/typescript/-/typescript-5.6.2.tgz", + "integrity": "sha1-0d5ntr73fEGCP4It+PCzvP9gpaA=", "dev": true }, "uc.micro": { @@ -26696,6 +26099,11 @@ "integrity": "sha1-1DQkbjmERHQN1/5MlUPkAq2Z5Mo=", "dev": true }, + "undici-types": { + "version": "5.26.5", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/undici-types/-/undici-types-5.26.5.tgz", + "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", @@ -27261,9 +26669,9 @@ "dev": true }, "word-wrap": { - "version": "1.2.4", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/word-wrap/-/word-wrap-1.2.4.tgz", - "integrity": "sha512-2V81OA4ugVo5pRo46hAoD2ivUJx8jXmWXfUkY4KFNw0hEptvN0QfH3K4nHiwzGeKl5rFKedV48QVoqYavy4YpA==", + "version": "1.2.5", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha1-0sRcbdT7zmIaZvE2y+Mor9BBCzQ=", "dev": true }, "wrap-ansi": { diff --git a/package.json b/package.json index eab79cf5b..a333bc6db 100644 --- a/package.json +++ b/package.json @@ -67,7 +67,8 @@ "compileDev": "tsc -p ./ && npx eslint ./ && webpack --mode development && npm run l10nDevGenerateLocalizationBundle", "watch": "tsc -watch -p ./", "test": "tsc -p ./ && gulp test", - "test:integration": "tsc -p ./ && gulp test:integration", + "test:withoutDevKit": "tsc -p ./ && gulp test:withoutDevKit", + "test:integration:devkit": "tsc -p ./ && gulp test:integration:devkit", "test:razor": "tsc -p ./ && npm run compile:razorTextMate && gulp test:razor", "test:razorintegration": "tsc -p ./ && gulp test:razorintegration", "test:artifacts": "tsc -p ./ && gulp test:artifacts", @@ -126,15 +127,15 @@ "@types/fs-extra": "5.0.4", "@types/gulp": "4.0.5", "@types/minimist": "1.2.1", - "@types/node": "16.11.38", + "@types/node": "20.14.8", "@types/semver": "7.3.13", "@types/tmp": "0.0.33", "@types/unzipper": "^0.9.1", "@types/uuid": "^9.0.1", "@types/vscode": "1.73.0", "@types/yauzl": "2.10.0", - "@typescript-eslint/eslint-plugin": "^5.61.0", - "@typescript-eslint/parser": "^5.61.0", + "@typescript-eslint/eslint-plugin": "^8.5.0", + "@typescript-eslint/parser": "^8.5.0", "@vscode/l10n-dev": "^0.0.35", "@vscode/test-electron": "2.3.8", "@vscode/vsce": "3.0.0", @@ -142,7 +143,6 @@ "del": "3.0.0", "eslint": "^8.43.0", "eslint-config-prettier": "^8.8.0", - "eslint-config-standard-with-typescript": "^35.0.0", "eslint-plugin-header": "^3.1.1", "eslint-plugin-import": "^2.27.5", "eslint-plugin-n": "^15.7.0", @@ -166,7 +166,7 @@ "ts-jest": "^29.1.1", "ts-loader": "9.0.0", "ts-node": "9.1.1", - "typescript": "^5.1.6", + "typescript": "5.6.2", "unzipper": "0.10.11", "vscode-oniguruma": "^1.6.1", "vscode-textmate": "^6.0.0", diff --git a/src/common.ts b/src/common.ts index 2fb5a6a59..5cf8efa7c 100644 --- a/src/common.ts +++ b/src/common.ts @@ -220,7 +220,7 @@ export function findPowerShell(): string | undefined { if (fs.statSync(candidate).isFile()) { return name; } - } catch (e) { + } catch (_) { /* empty */ } } diff --git a/src/omnisharp/engines/stdioEngine.ts b/src/omnisharp/engines/stdioEngine.ts index 1fda3bcc3..5fa9640d8 100644 --- a/src/omnisharp/engines/stdioEngine.ts +++ b/src/omnisharp/engines/stdioEngine.ts @@ -399,7 +399,7 @@ export class StdioEngine implements IEngine { let packet: protocol.WireProtocol.Packet; try { packet = JSON.parse(line); - } catch (err) { + } catch (_) { // This isn't JSON return; } diff --git a/src/omnisharp/features/codeLensProvider.ts b/src/omnisharp/features/codeLensProvider.ts index ea00eac36..935f81e8e 100644 --- a/src/omnisharp/features/codeLensProvider.ts +++ b/src/omnisharp/features/codeLensProvider.ts @@ -96,7 +96,7 @@ export default class OmniSharpCodeLensProvider extends AbstractProvider implemen if (response && response.Elements) { return createCodeLenses(response.Elements, document.fileName); } - } catch (error) { + } catch (_) { /* empty */ } @@ -162,7 +162,7 @@ export default class OmniSharpCodeLensProvider extends AbstractProvider implemen }; return codeLens; - } catch (error) { + } catch (_) { return undefined; } } @@ -188,7 +188,7 @@ export default class OmniSharpCodeLensProvider extends AbstractProvider implemen let projectInfo: protocol.ProjectInformationResponse; try { projectInfo = await serverUtils.requestProjectInformation(this._server, { FileName: codeLens.fileName }); - } catch (error) { + } catch (_) { return undefined; } diff --git a/src/omnisharp/features/completionProvider.ts b/src/omnisharp/features/completionProvider.ts index 251f340e3..8eb0e0b13 100644 --- a/src/omnisharp/features/completionProvider.ts +++ b/src/omnisharp/features/completionProvider.ts @@ -95,7 +95,7 @@ export default class OmniSharpCompletionProvider extends AbstractProvider implem this.#lastCompletions = lastCompletions; return { items: mappedItems }; - } catch (error) { + } catch (_) { return; } } @@ -115,7 +115,7 @@ export default class OmniSharpCompletionProvider extends AbstractProvider implem try { const response = await serverUtils.getCompletionResolve(this._server, request, token); return this._convertToVscodeCompletionItem(response.Item, item.command?.arguments?.[1] as TextDocument); - } catch (error) { + } catch (_) { return item; } } @@ -155,7 +155,7 @@ export default class OmniSharpCompletionProvider extends AbstractProvider implem const finalPosition = new Position(response.Line, response.Column); editor.selections = [new Selection(finalPosition, finalPosition)]; - } catch (error) { + } catch (_) { return; } } diff --git a/src/omnisharp/features/definitionProvider.ts b/src/omnisharp/features/definitionProvider.ts index 9a8534b3c..a57ceb592 100644 --- a/src/omnisharp/features/definitionProvider.ts +++ b/src/omnisharp/features/definitionProvider.ts @@ -51,7 +51,7 @@ export default class OmniSharpDefinitionProvider try { const gotoDefinitionResponse = await serverUtils.goToDefinition(this._server, req, token); return await this.GetLocationsFromResponse(gotoDefinitionResponse, token); - } catch (error) { + } catch (_) { return []; } } @@ -67,7 +67,7 @@ export default class OmniSharpDefinitionProvider try { const goToTypeDefinitionResponse = await serverUtils.goToTypeDefinition(this._server, req, token); return await this.GetLocationsFromResponse(goToTypeDefinitionResponse, token); - } catch (error) { + } catch (_) { return []; } } diff --git a/src/omnisharp/features/diagnosticsProvider.ts b/src/omnisharp/features/diagnosticsProvider.ts index 8decafb43..9bf31235a 100644 --- a/src/omnisharp/features/diagnosticsProvider.ts +++ b/src/omnisharp/features/diagnosticsProvider.ts @@ -279,7 +279,7 @@ class OmniSharpDiagnosticsProvider extends AbstractSupport { document.uri, diagnosticsInFile.map((x) => x.diagnostic) ); - } catch (error) { + } catch (_) { return; } } diff --git a/src/omnisharp/features/documentSymbolProvider.ts b/src/omnisharp/features/documentSymbolProvider.ts index 532f3d19d..88bacf3b9 100644 --- a/src/omnisharp/features/documentSymbolProvider.ts +++ b/src/omnisharp/features/documentSymbolProvider.ts @@ -26,7 +26,7 @@ export default class OmniSharpDocumentSymbolProvider extends AbstractSupport imp } return []; - } catch (error) { + } catch (_) { return []; } } diff --git a/src/omnisharp/features/dotnetTest.ts b/src/omnisharp/features/dotnetTest.ts index ebd3805d0..a7bf07204 100644 --- a/src/omnisharp/features/dotnetTest.ts +++ b/src/omnisharp/features/dotnetTest.ts @@ -41,7 +41,7 @@ const TelemetryReportingDelay = 2 * 60 * 1000; // two minutes export default class TestManager extends AbstractProvider { private _runCounts?: { [testFrameworkName: string]: number }; private _debugCounts?: { [testFrameworkName: string]: number }; - private _telemetryIntervalId?: NodeJS.Timer = undefined; + private _telemetryIntervalId?: NodeJS.Timeout = undefined; private _eventStream: EventStream; constructor( @@ -190,7 +190,7 @@ export default class TestManager extends AbstractProvider { let projectInfo: protocol.ProjectInformationResponse; try { projectInfo = await serverUtils.requestProjectInformation(this._server, { FileName: fileName }); - } catch (error) { + } catch (_) { return undefined; } @@ -465,7 +465,7 @@ export default class TestManager extends AbstractProvider { let projectInfo: protocol.ProjectInformationResponse; try { projectInfo = await serverUtils.requestProjectInformation(this._server, { FileName: fileName }); - } catch (error) { + } catch (_) { throw new Error('Could not determine project type.'); } @@ -708,7 +708,7 @@ class DebugEventListener { let event: DebuggerEventsProtocol.DebuggerEvent; try { event = DebuggerEventsProtocol.decodePacket(buffer); - } catch (e) { + } catch (_) { this._eventStream.post(new DotNetTestDebugWarning('Invalid event received from debugger')); return; } @@ -803,7 +803,7 @@ class DebugEventListener { try { serverUtils.debugTestStop(this._server, request); this.close(); - } catch (error) { + } catch (_) { return; } } diff --git a/src/omnisharp/features/hoverProvider.ts b/src/omnisharp/features/hoverProvider.ts index b812413dc..6c7f76ebe 100644 --- a/src/omnisharp/features/hoverProvider.ts +++ b/src/omnisharp/features/hoverProvider.ts @@ -26,7 +26,7 @@ export default class OmniSharpHoverProvider extends AbstractSupport implements H markdownString.appendMarkdown(response.Markdown); return new Hover(markdownString); - } catch (error) { + } catch (_) { return undefined; } } diff --git a/src/omnisharp/features/renameProvider.ts b/src/omnisharp/features/renameProvider.ts index e160b06bb..d0a0a347b 100644 --- a/src/omnisharp/features/renameProvider.ts +++ b/src/omnisharp/features/renameProvider.ts @@ -44,7 +44,7 @@ export default class OmniSharpRenameProvider extends AbstractSupport implements // Allow language middlewares to re-map its edits if necessary. const result = await this._languageMiddlewareFeature.remap('remapWorkspaceEdit', edit, token); return result; - } catch (error) { + } catch (_) { return undefined; } } diff --git a/src/omnisharp/features/signatureHelpProvider.ts b/src/omnisharp/features/signatureHelpProvider.ts index 1cea58fc4..44791bf5a 100644 --- a/src/omnisharp/features/signatureHelpProvider.ts +++ b/src/omnisharp/features/signatureHelpProvider.ts @@ -55,7 +55,7 @@ export default class OmniSharpSignatureHelpProvider extends AbstractSupport impl } return ret; - } catch (error) { + } catch (_) { return undefined; } } diff --git a/src/omnisharp/features/structureProvider.ts b/src/omnisharp/features/structureProvider.ts index 6a0c7a52f..437e50eeb 100644 --- a/src/omnisharp/features/structureProvider.ts +++ b/src/omnisharp/features/structureProvider.ts @@ -35,7 +35,7 @@ export class OmniSharpStructureProvider extends AbstractSupport implements Foldi } return ranges; - } catch (error) { + } catch (_) { return []; } } diff --git a/src/omnisharp/languageMiddlewareFeature.ts b/src/omnisharp/languageMiddlewareFeature.ts index bca7e54e5..cfaba25ae 100644 --- a/src/omnisharp/languageMiddlewareFeature.ts +++ b/src/omnisharp/languageMiddlewareFeature.ts @@ -79,7 +79,7 @@ export class LanguageMiddlewareFeature implements IDisposable { } return remapped; - } catch (error) { + } catch (_) { // Something happened while remapping. Return the original. return original; } diff --git a/src/omnisharp/requirementCheck.ts b/src/omnisharp/requirementCheck.ts index ead017f35..5c5e4d2f7 100644 --- a/src/omnisharp/requirementCheck.ts +++ b/src/omnisharp/requirementCheck.ts @@ -74,7 +74,7 @@ async function checkRequirements(): Promise { let monoError = false; try { await monoResolver.getHostExecutableInfo(); - } catch (e) { + } catch (_) { monoError = true; } diff --git a/src/packageManager/downloadAndInstallPackages.ts b/src/packageManager/downloadAndInstallPackages.ts index d75aae2fa..a148a666e 100644 --- a/src/packageManager/downloadAndInstallPackages.ts +++ b/src/packageManager/downloadAndInstallPackages.ts @@ -67,7 +67,7 @@ export async function downloadAndInstallPackages( if (await installFileExists(pkg.installPath, InstallFileType.Begin)) { await deleteInstallFile(pkg.installPath, InstallFileType.Begin); } - } catch (error) { + } catch (_) { /* empty */ } } diff --git a/src/packageManager/fileDownloader.ts b/src/packageManager/fileDownloader.ts index cea218574..b1535a213 100644 --- a/src/packageManager/fileDownloader.ts +++ b/src/packageManager/fileDownloader.ts @@ -43,7 +43,7 @@ export async function DownloadFile( const buffer = await downloadFile(description, fallbackUrl, eventStream, networkSettingsProvider); eventStream.post(new DownloadSuccess(' Done!')); return buffer; - } catch (fallbackUrlError) { + } catch (_) { throw primaryUrlError; } } else { diff --git a/src/packageManager/zipInstaller.ts b/src/packageManager/zipInstaller.ts index 832d5b88f..5e99ff418 100644 --- a/src/packageManager/zipInstaller.ts +++ b/src/packageManager/zipInstaller.ts @@ -43,10 +43,7 @@ export async function InstallZip( } catch (err) { const error = err as NodeJS.ErrnoException; // Hack for TypeScript to type err correctly return reject( - new NestedError( - 'Error creating directory for zip directory entry:' + error.code ?? '', - error - ) + new NestedError('Error creating directory for zip directory entry:' + error.code, error) ); } } else { diff --git a/src/razor/src/diagnostics/reportIssueCreator.ts b/src/razor/src/diagnostics/reportIssueCreator.ts index 75735c46c..f2ca9a499 100644 --- a/src/razor/src/diagnostics/reportIssueCreator.ts +++ b/src/razor/src/diagnostics/reportIssueCreator.ts @@ -212,7 +212,7 @@ ${csharpTextDocument.getText()}`; csharpContent = `${csharpContent} ${errorSuffix}`; } - } catch (e) { + } catch (_) { csharpContent = `${csharpContent} ${errorSuffix}`; } @@ -239,7 +239,7 @@ ${htmlTextDocument.getText()}`; htmlContent = `${htmlContent} ${errorSuffix}`; } - } catch (e) { + } catch (_) { htmlContent = `${htmlContent} ${errorSuffix}`; } diff --git a/src/razor/src/document/razorDocumentSynchronizer.ts b/src/razor/src/document/razorDocumentSynchronizer.ts index d98274662..e8e8cbc80 100644 --- a/src/razor/src/document/razorDocumentSynchronizer.ts +++ b/src/razor/src/document/razorDocumentSynchronizer.ts @@ -256,7 +256,7 @@ interface SynchronizationContext { readonly projectedDocument: IProjectedDocument; readonly logIdentifier: number; readonly toHostDocumentVersion: number; - readonly timeoutId: NodeJS.Timer; + readonly timeoutId: NodeJS.Timeout; readonly projectedDocumentSynchronized: () => void; readonly onProjectedDocumentSynchronized: Promise; readonly projectedTextDocumentSynchronized: () => void; diff --git a/src/razor/src/html/htmlTagCompletionProvider.ts b/src/razor/src/html/htmlTagCompletionProvider.ts index 7c7792f5f..aef25c419 100644 --- a/src/razor/src/html/htmlTagCompletionProvider.ts +++ b/src/razor/src/html/htmlTagCompletionProvider.ts @@ -15,7 +15,7 @@ import { RazorLanguageServiceClient } from '../razorLanguageServiceClient'; import { LanguageKind } from '../rpc/languageKind'; export class HtmlTagCompletionProvider { - private timeout: NodeJS.Timer | undefined = void 0; + private timeout: NodeJS.Timeout | undefined = void 0; private enabled = false; private htmlLanguageService: HtmlLanguageService | undefined; diff --git a/tasks/testTasks.ts b/tasks/testTasks.ts index c84e53a1a..f8d705d48 100644 --- a/tasks/testTasks.ts +++ b/tasks/testTasks.ts @@ -7,94 +7,142 @@ import * as fs from 'fs'; import * as gulp from 'gulp'; import * as path from 'path'; import { codeExtensionPath, rootPath, outPath } from './projectPaths'; -import spawnNode from './spawnNode'; import * as jest from 'jest'; import { Config } from '@jest/types'; import { jestOmniSharpUnitTestProjectName } from '../test/omnisharp/omnisharpUnitTests/jest.config'; import { jestUnitTestProjectName } from '../test/lsptoolshost/unitTests/jest.config'; import { razorTestProjectName } from '../test/razor/razorTests/jest.config'; import { jestArtifactTestsProjectName } from '../test/lsptoolshost/artifactTests/jest.config'; +import { prepareVSCodeAndExecuteTests } from '../test/vscodeLauncher'; -gulp.task('test:razor', async () => { - runJestTest(razorTestProjectName); -}); - -const razorIntegrationTestProjects = ['BasicRazorApp2_1']; -for (const projectName of razorIntegrationTestProjects) { - gulp.task(`test:razorintegration:${projectName}`, async () => - runIntegrationTest( - projectName, - path.join('razor', 'razorIntegrationTests'), - `Razor Test Integration ${projectName}` - ) - ); -} - -gulp.task( - 'test:razorintegration', - gulp.series(razorIntegrationTestProjects.map((projectName) => `test:razorintegration:${projectName}`)) -); +createUnitTestSubTasks(); +createIntegrationTestSubTasks(); +createOmniSharpTestSubTasks(); gulp.task('test:artifacts', async () => { runJestTest(jestArtifactTestsProjectName); }); -gulp.task('omnisharptest:unit', async () => { - await runJestTest(jestOmniSharpUnitTestProjectName); -}); +// Overall test command that runs everything except O# tests. +gulp.task('test', gulp.series('test:unit', 'test:integration')); + +// Bit of a special task for CI. We want to generally combine test runs to save preparation time. +// However the Dev Kit integration tests are much slower than everything else (VSCode restarts on each test file). +// So we can have one run for all of the general C# extension tests, and then another for Dev Kit integration tests. +gulp.task('test:withoutDevKit', gulp.series('test:unit', 'test:integration:csharp', 'test:razorintegration')); + +gulp.task('test:razor', gulp.series('test:unit:razor', 'test:razorintegration')); + +// OmniSharp tests are run separately in CI, so we have separate tasks for these. +// TODO: Enable lsp integration tests once tests for unimplemented features are disabled. +gulp.task('omnisharptest', gulp.series('omnisharptest:unit', 'omnisharptest:integration:stdio')); + +function createUnitTestSubTasks() { + gulp.task('test:unit:csharp', async () => { + await runJestTest(jestUnitTestProjectName); + }); + + gulp.task('test:unit:razor', async () => { + runJestTest(razorTestProjectName); + }); + + gulp.task('test:unit', gulp.series('test:unit:csharp', 'test:unit:razor')); +} + +async function createIntegrationTestSubTasks() { + const integrationTestProjects = ['slnWithCsproj']; + for (const projectName of integrationTestProjects) { + gulp.task(`test:integration:csharp:${projectName}`, async () => + runIntegrationTest(projectName, path.join('lsptoolshost', 'integrationTests'), `[C#][${projectName}]`) + ); -const omnisharpIntegrationTestProjects = ['singleCsproj', 'slnWithCsproj', 'slnFilterWithCsproj', 'BasicRazorApp2_1']; + gulp.task(`test:integration:devkit:${projectName}`, async () => + runDevKitIntegrationTests( + projectName, + path.join('lsptoolshost', 'integrationTests'), + `[DevKit][${projectName}]` + ) + ); + } -for (const projectName of omnisharpIntegrationTestProjects) { - gulp.task(`omnisharptest:integration:${projectName}:stdio`, async () => - runOmnisharpJestIntegrationTest(projectName, 'stdio', `OmniSharp Test Integration ${projectName} STDIO}`) + gulp.task( + 'test:integration:csharp', + gulp.series(integrationTestProjects.map((projectName) => `test:integration:csharp:${projectName}`)) ); - gulp.task(`omnisharptest:integration:${projectName}:lsp`, async () => - runOmnisharpJestIntegrationTest(projectName, 'lsp', `OmniSharp Test Integration ${projectName} LSP}`) + + gulp.task( + 'test:integration:devkit', + gulp.series(integrationTestProjects.map((projectName) => `test:integration:devkit:${projectName}`)) ); + + const razorIntegrationTestProjects = ['BasicRazorApp2_1']; + for (const projectName of razorIntegrationTestProjects) { + gulp.task(`test:razorintegration:${projectName}`, async () => + runIntegrationTest( + projectName, + path.join('razor', 'razorIntegrationTests'), + `Razor Test Integration ${projectName}` + ) + ); + } + + gulp.task( + 'test:razorintegration', + gulp.series(razorIntegrationTestProjects.map((projectName) => `test:razorintegration:${projectName}`)) + ); + gulp.task( - `omnisharptest:integration:${projectName}`, - gulp.series(`omnisharptest:integration:${projectName}:stdio`, `omnisharptest:integration:${projectName}:lsp`) + 'test:integration', + gulp.series('test:integration:csharp', 'test:integration:devkit', 'test:razorintegration') ); } -gulp.task( - 'omnisharptest:integration', - gulp.series(omnisharpIntegrationTestProjects.map((projectName) => `omnisharptest:integration:${projectName}`)) -); -gulp.task( - 'omnisharptest:integration:stdio', - gulp.series(omnisharpIntegrationTestProjects.map((projectName) => `omnisharptest:integration:${projectName}:stdio`)) -); -gulp.task( - 'omnisharptest:integration:lsp', - gulp.series(omnisharpIntegrationTestProjects.map((projectName) => `omnisharptest:integration:${projectName}:lsp`)) -); -// TODO: Enable lsp integration tests once tests for unimplemented features are disabled. -gulp.task('omnisharptest', gulp.series('omnisharptest:unit', 'omnisharptest:integration:stdio')); +function createOmniSharpTestSubTasks() { + gulp.task('omnisharptest:unit', async () => { + await runJestTest(jestOmniSharpUnitTestProjectName); + }); -gulp.task('test:unit', async () => { - await runJestTest(jestUnitTestProjectName); -}); + const omnisharpIntegrationTestProjects = [ + 'singleCsproj', + 'slnWithCsproj', + 'slnFilterWithCsproj', + 'BasicRazorApp2_1', + ]; -const integrationTestProjects = ['slnWithCsproj']; -for (const projectName of integrationTestProjects) { - gulp.task(`test:integration:${projectName}`, async () => - runIntegrationTest( - projectName, - path.join('lsptoolshost', 'integrationTests'), - `Test Integration ${projectName}` + for (const projectName of omnisharpIntegrationTestProjects) { + gulp.task(`omnisharptest:integration:${projectName}:stdio`, async () => + runOmnisharpJestIntegrationTest(projectName, 'stdio', `[O#][${projectName}][STDIO]`) + ); + gulp.task(`omnisharptest:integration:${projectName}:lsp`, async () => + runOmnisharpJestIntegrationTest(projectName, 'lsp', `[O#][${projectName}][LSP]`) + ); + gulp.task( + `omnisharptest:integration:${projectName}`, + gulp.series( + `omnisharptest:integration:${projectName}:stdio`, + `omnisharptest:integration:${projectName}:lsp` + ) + ); + } + + gulp.task( + 'omnisharptest:integration', + gulp.series(omnisharpIntegrationTestProjects.map((projectName) => `omnisharptest:integration:${projectName}`)) + ); + gulp.task( + 'omnisharptest:integration:stdio', + gulp.series( + omnisharpIntegrationTestProjects.map((projectName) => `omnisharptest:integration:${projectName}:stdio`) + ) + ); + gulp.task( + 'omnisharptest:integration:lsp', + gulp.series( + omnisharpIntegrationTestProjects.map((projectName) => `omnisharptest:integration:${projectName}:lsp`) ) ); } -gulp.task( - 'test:integration', - gulp.series(integrationTestProjects.map((projectName) => `test:integration:${projectName}`)) -); - -gulp.task('test', gulp.series('test:unit', 'test:integration', 'test:razor', 'test:razorintegration')); - async function runOmnisharpJestIntegrationTest(testAssetName: string, engine: 'stdio' | 'lsp', suiteName: string) { const workspaceFile = `omnisharp${engine === 'lsp' ? '_lsp' : ''}_${testAssetName}.code-workspace`; const testFolder = path.join('test', 'omnisharp', 'omnisharpIntegrationTests'); @@ -111,10 +159,56 @@ async function runOmnisharpJestIntegrationTest(testAssetName: string, engine: 's await runJestIntegrationTest(testAssetName, testFolder, workspaceFile, suiteName, env); } -async function runIntegrationTest(testAssetName: string, testFolderName: string, suiteName: string) { - const vscodeWorkspaceFileName = `lsp_tools_host_${testAssetName}.code-workspace`; +async function runDevKitIntegrationTests(testAssetName: string, testFolderName: string, suiteName: string) { + // Tests using C# Dev Kit tests are a bit different from the rest - we are not able to restart the Dev Kit server and there + // are not easy APIs to use to know if the project is reloading due to workspace changes. + // So we have to isolate the C# Dev Kit tests into smaller test runs (in this case, per file), where each run + // launches VSCode and runs the tests in that file. + const testFolder = path.join(rootPath, 'test', testFolderName); + console.log(`Searching for test files in ${testFolder}`); + const allFiles = fs + .readdirSync(testFolder, { + recursive: true, + }) + .filter((f) => typeof f === 'string'); + const devKitTestFiles = allFiles.filter((f) => f.endsWith('.test.ts')).map((f) => path.join(testFolder, f)); + if (devKitTestFiles.length === 0) { + throw new Error(`No test files found in ${testFolder}`); + } + + let failed: boolean = false; + for (const testFile of devKitTestFiles) { + try { + await runIntegrationTest( + testAssetName, + testFolderName, + suiteName, + `devkit_${testAssetName}.code-workspace`, + testFile + ); + } catch (err) { + // We have to catch the error to continue running tests from the rest of the files. + console.error(`##[error] Tests in ${path.basename(testFile)} failed`, err); + failed = true; + } + } + + if (failed) { + // Ensure the task fails if any tests failed. + throw new Error(`One or more tests failed`); + } +} + +async function runIntegrationTest( + testAssetName: string, + testFolderName: string, + suiteName: string, + vscodeWorkspaceFileName = `${testAssetName}.code-workspace`, + testFile: string | undefined = undefined +) { const testFolder = path.join('test', testFolderName); - return await runJestIntegrationTest(testAssetName, testFolder, vscodeWorkspaceFileName, suiteName); + const env: NodeJS.ProcessEnv = {}; + return await runJestIntegrationTest(testAssetName, testFolder, vscodeWorkspaceFileName, suiteName, env, testFile); } /** @@ -124,14 +218,21 @@ async function runIntegrationTest(testAssetName: string, testFolderName: string, * @param workspaceFileName the name of the vscode workspace file to use. * @param suiteName a unique name for the test suite being run. * @param env any environment variables needed. + * @param testFile the full path to a specific test file to run. */ async function runJestIntegrationTest( testAssetName: string, testFolderName: string, workspaceFileName: string, suiteName: string, - env: NodeJS.ProcessEnv = {} + env: NodeJS.ProcessEnv = {}, + testFile: string | undefined = undefined ) { + const logName = testFile ? `${suiteName}_${path.basename(testFile)}` : suiteName; + + // Set VSCode to produce logs in a unique directory for this test run. + const userDataDir = path.join(outPath, 'userData', logName); + // Test assets are always in a testAssets folder inside the integration test folder. const assetsPath = path.join(rootPath, testFolderName, 'testAssets'); if (!fs.existsSync(assetsPath)) { @@ -142,33 +243,39 @@ async function runJestIntegrationTest( throw new Error(`Could not find vscode workspace to open at ${workspacePath}`); } - // The launcher (that downloads and opens vscode) is always compiled to out/test/vscodeLauncher.js - const launcherPath = path.join(outPath, 'test', 'vscodeLauncher.js'); - if (!fs.existsSync(launcherPath)) { - throw new Error('Could not find test runner in out/ directory'); - } // The runner (that loads in the vscode process to run tests) is in the test folder in the *output* directory. const vscodeRunnerPath = path.join(outPath, testFolderName, 'index.js'); if (!fs.existsSync(vscodeRunnerPath)) { throw new Error(`Could not find vscode runner in out/ at ${vscodeRunnerPath}`); } - env.CODE_TESTS_WORKSPACE = workspacePath; - env.CODE_EXTENSIONS_PATH = rootPath; - env.EXTENSIONS_TESTS_PATH = vscodeRunnerPath; - // Configure the file and suite name in CI to avoid having multiple test runs stomp on each other. - env.JEST_JUNIT_OUTPUT_NAME = getJUnitFileName(suiteName); + env.JEST_JUNIT_OUTPUT_NAME = getJUnitFileName(logName); env.JEST_SUITE_NAME = suiteName; - const result = await spawnNode([launcherPath, '--enable-source-maps'], { env, cwd: rootPath }); - - if (result.code === null || result.code > 0) { - // Ensure that gulp fails when tests fail - throw new Error(`Exit code: ${result.code} Signal: ${result.signal}`); + if (testFile) { + console.log(`Setting test file filter to: ${testFile}`); + process.env.TEST_FILE_FILTER = testFile; } - return result; + try { + const result = await prepareVSCodeAndExecuteTests(rootPath, vscodeRunnerPath, workspacePath, userDataDir, env); + if (result > 0) { + // The VSCode API will generally throw if jest fails the test, but we can get errors before the test runs (e.g. launching VSCode). + // So here we make sure to error if we don't get a clean exit code. + throw new Error(`Exit code: ${result}`); + } + + return result; + } catch (err) { + // If we hit an error, copy the logs VSCode produced to a directory that CI can find. + const vscodeLogs = path.join(userDataDir, 'logs'); + const logOutputPath = path.join(outPath, 'logs', logName); + console.log(`Copying logs from ${vscodeLogs} to ${logOutputPath}`); + fs.cpSync(vscodeLogs, logOutputPath, { recursive: true, force: true }); + + throw err; + } } async function runJestTest(project: string) { @@ -189,6 +296,6 @@ async function runJestTest(project: string) { } } -function getJUnitFileName(suiteName: string) { - return `${suiteName.replaceAll(' ', '_')}_junit.xml`; +function getJUnitFileName(logName: string) { + return `${logName.replaceAll(' ', '_')}_junit.xml`; } diff --git a/test/csharp-standalone-profile.code-profile b/test/csharp-standalone-profile.code-profile deleted file mode 100644 index 795669a96..000000000 --- a/test/csharp-standalone-profile.code-profile +++ /dev/null @@ -1 +0,0 @@ -{"name":"csharp-standalone-profile","extensions":"[{\"identifier\":{\"id\":\"ms-dotnettools.csharp\",\"uuid\":\"d0bfc4ab-1d3a-4487-8782-7cf6027b4fff\"},\"displayName\":\"C#\"},{\"identifier\":{\"id\":\"ms-dotnettools.vscode-dotnet-runtime\",\"uuid\":\"1aab81a1-b3d9-4aef-976b-577d5d90fe3f\"},\"displayName\":\".NET Install Tool\"}]","globalState":"{\"storage\":{\"workbench.panel.pinnedPanels\":\"[{\\\"id\\\":\\\"workbench.panel.markers\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":0},{\\\"id\\\":\\\"workbench.panel.output\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":1},{\\\"id\\\":\\\"refactorPreview\\\",\\\"pinned\\\":true,\\\"visible\\\":false},{\\\"id\\\":\\\"workbench.panel.testResults\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":3},{\\\"id\\\":\\\"terminal\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":3},{\\\"id\\\":\\\"~remote.forwardedPortsContainer\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":5},{\\\"id\\\":\\\"workbench.panel.repl\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":2},{\\\"id\\\":\\\"workbench.panel.comments\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":10}]\",\"workbench.activity.pinnedViewlets2\":\"[{\\\"id\\\":\\\"workbench.view.explorer\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":0},{\\\"id\\\":\\\"workbench.view.debug\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":3},{\\\"id\\\":\\\"workbench.view.remote\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":4},{\\\"id\\\":\\\"workbench.view.scm\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":2},{\\\"id\\\":\\\"workbench.view.extension.test\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":6},{\\\"id\\\":\\\"workbench.view.extensions\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":4},{\\\"id\\\":\\\"workbench.view.search\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":1},{\\\"id\\\":\\\"workbench.panel.chatSidebar\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":100},{\\\"id\\\":\\\"workbench.view.extension.references-view\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":7},{\\\"id\\\":\\\"workbench.view.sync\\\",\\\"pinned\\\":true,\\\"visible\\\":false},{\\\"id\\\":\\\"workbench.view.editSessions\\\",\\\"pinned\\\":true,\\\"visible\\\":false}]\",\"workbench.explorer.views.state.hidden\":\"[{\\\"id\\\":\\\"workbench.explorer.openEditorsView\\\",\\\"isHidden\\\":false,\\\"order\\\":0},{\\\"id\\\":\\\"solutionExplorer\\\",\\\"isHidden\\\":false,\\\"order\\\":1},{\\\"id\\\":\\\"workbench.explorer.fileView\\\",\\\"isHidden\\\":false,\\\"order\\\":2},{\\\"id\\\":\\\"outline\\\",\\\"isHidden\\\":false,\\\"order\\\":3},{\\\"id\\\":\\\"timeline\\\",\\\"isHidden\\\":false,\\\"order\\\":4},{\\\"id\\\":\\\"npm\\\",\\\"isHidden\\\":true,\\\"order\\\":5},{\\\"id\\\":\\\"copilot-chat-requests\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"gitlens.views.graph\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"gitlens.views.graphDetails\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"azureActivityLog\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"syntaxTree\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"gitlens.views.home\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"operationTree\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"gitlens.views.launchpad\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"gitlens.views.drafts\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"gitlens.views.workspaces\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"gitlens.views.account\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"gitlens.views.commitDetails\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"gitlens.views.pullRequest\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"gitlens.views.lineHistory\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"gitlens.views.fileHistory\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"gitlens.views.timeline\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"gitlens.views.searchAndCompare\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"gitlens.views.patchDetails\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"azureFocusView\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"azureResourceGroups\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"azureWorkspace\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"ms-azuretools.helpAndFeedback\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"dockerContainers\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"dockerImages\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"dockerRegistries\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"dockerNetworks\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"dockerVolumes\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"vscode-docker.views.dockerContexts\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"vscode-docker.views.help\\\",\\\"isHidden\\\":false}]\",\"colorThemeData\":\"{\\\"id\\\":\\\"vs-dark vscode-theme-defaults-themes-dark_modern-json\\\",\\\"label\\\":\\\"Dark Modern\\\",\\\"settingsId\\\":\\\"Default Dark Modern\\\",\\\"themeTokenColors\\\":[{\\\"settings\\\":{\\\"foreground\\\":\\\"#D4D4D4\\\"},\\\"scope\\\":[\\\"meta.embedded\\\",\\\"source.groovy.embedded\\\",\\\"string meta.image.inline.markdown\\\",\\\"variable.legacy.builtin.python\\\"]},{\\\"settings\\\":{\\\"fontStyle\\\":\\\"italic\\\"},\\\"scope\\\":\\\"emphasis\\\"},{\\\"settings\\\":{\\\"fontStyle\\\":\\\"bold\\\"},\\\"scope\\\":\\\"strong\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#000080\\\"},\\\"scope\\\":\\\"header\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#6A9955\\\"},\\\"scope\\\":\\\"comment\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#569cd6\\\"},\\\"scope\\\":\\\"constant.language\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#b5cea8\\\"},\\\"scope\\\":[\\\"constant.numeric\\\",\\\"variable.other.enummember\\\",\\\"keyword.operator.plus.exponent\\\",\\\"keyword.operator.minus.exponent\\\"]},{\\\"settings\\\":{\\\"foreground\\\":\\\"#646695\\\"},\\\"scope\\\":\\\"constant.regexp\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#569cd6\\\"},\\\"scope\\\":\\\"entity.name.tag\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#d7ba7d\\\"},\\\"scope\\\":[\\\"entity.name.tag.css\\\",\\\"entity.name.tag.less\\\"]},{\\\"settings\\\":{\\\"foreground\\\":\\\"#9cdcfe\\\"},\\\"scope\\\":\\\"entity.other.attribute-name\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#d7ba7d\\\"},\\\"scope\\\":[\\\"entity.other.attribute-name.class.css\\\",\\\"source.css entity.other.attribute-name.class\\\",\\\"entity.other.attribute-name.id.css\\\",\\\"entity.other.attribute-name.parent-selector.css\\\",\\\"entity.other.attribute-name.parent.less\\\",\\\"source.css entity.other.attribute-name.pseudo-class\\\",\\\"entity.other.attribute-name.pseudo-element.css\\\",\\\"source.css.less entity.other.attribute-name.id\\\",\\\"entity.other.attribute-name.scss\\\"]},{\\\"settings\\\":{\\\"foreground\\\":\\\"#f44747\\\"},\\\"scope\\\":\\\"invalid\\\"},{\\\"settings\\\":{\\\"fontStyle\\\":\\\"underline\\\"},\\\"scope\\\":\\\"markup.underline\\\"},{\\\"settings\\\":{\\\"fontStyle\\\":\\\"bold\\\",\\\"foreground\\\":\\\"#569cd6\\\"},\\\"scope\\\":\\\"markup.bold\\\"},{\\\"settings\\\":{\\\"fontStyle\\\":\\\"bold\\\",\\\"foreground\\\":\\\"#569cd6\\\"},\\\"scope\\\":\\\"markup.heading\\\"},{\\\"settings\\\":{\\\"fontStyle\\\":\\\"italic\\\"},\\\"scope\\\":\\\"markup.italic\\\"},{\\\"settings\\\":{\\\"fontStyle\\\":\\\"strikethrough\\\"},\\\"scope\\\":\\\"markup.strikethrough\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#b5cea8\\\"},\\\"scope\\\":\\\"markup.inserted\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#ce9178\\\"},\\\"scope\\\":\\\"markup.deleted\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#569cd6\\\"},\\\"scope\\\":\\\"markup.changed\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#6A9955\\\"},\\\"scope\\\":\\\"punctuation.definition.quote.begin.markdown\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#6796e6\\\"},\\\"scope\\\":\\\"punctuation.definition.list.begin.markdown\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#ce9178\\\"},\\\"scope\\\":\\\"markup.inline.raw\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#808080\\\"},\\\"scope\\\":\\\"punctuation.definition.tag\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#569cd6\\\"},\\\"scope\\\":[\\\"meta.preprocessor\\\",\\\"entity.name.function.preprocessor\\\"]},{\\\"settings\\\":{\\\"foreground\\\":\\\"#ce9178\\\"},\\\"scope\\\":\\\"meta.preprocessor.string\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#b5cea8\\\"},\\\"scope\\\":\\\"meta.preprocessor.numeric\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#9cdcfe\\\"},\\\"scope\\\":\\\"meta.structure.dictionary.key.python\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#569cd6\\\"},\\\"scope\\\":\\\"meta.diff.header\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#569cd6\\\"},\\\"scope\\\":\\\"storage\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#569cd6\\\"},\\\"scope\\\":\\\"storage.type\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#569cd6\\\"},\\\"scope\\\":[\\\"storage.modifier\\\",\\\"keyword.operator.noexcept\\\"]},{\\\"settings\\\":{\\\"foreground\\\":\\\"#ce9178\\\"},\\\"scope\\\":[\\\"string\\\",\\\"meta.embedded.assembly\\\"]},{\\\"settings\\\":{\\\"foreground\\\":\\\"#ce9178\\\"},\\\"scope\\\":\\\"string.tag\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#ce9178\\\"},\\\"scope\\\":\\\"string.value\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#d16969\\\"},\\\"scope\\\":\\\"string.regexp\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#569cd6\\\"},\\\"scope\\\":[\\\"punctuation.definition.template-expression.begin\\\",\\\"punctuation.definition.template-expression.end\\\",\\\"punctuation.section.embedded\\\"]},{\\\"settings\\\":{\\\"foreground\\\":\\\"#d4d4d4\\\"},\\\"scope\\\":[\\\"meta.template.expression\\\"]},{\\\"settings\\\":{\\\"foreground\\\":\\\"#9cdcfe\\\"},\\\"scope\\\":[\\\"support.type.vendored.property-name\\\",\\\"support.type.property-name\\\",\\\"source.css variable\\\",\\\"source.coffee.embedded\\\"]},{\\\"settings\\\":{\\\"foreground\\\":\\\"#569cd6\\\"},\\\"scope\\\":\\\"keyword\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#569cd6\\\"},\\\"scope\\\":\\\"keyword.control\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#d4d4d4\\\"},\\\"scope\\\":\\\"keyword.operator\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#569cd6\\\"},\\\"scope\\\":[\\\"keyword.operator.new\\\",\\\"keyword.operator.expression\\\",\\\"keyword.operator.cast\\\",\\\"keyword.operator.sizeof\\\",\\\"keyword.operator.alignof\\\",\\\"keyword.operator.typeid\\\",\\\"keyword.operator.alignas\\\",\\\"keyword.operator.instanceof\\\",\\\"keyword.operator.logical.python\\\",\\\"keyword.operator.wordlike\\\"]},{\\\"settings\\\":{\\\"foreground\\\":\\\"#b5cea8\\\"},\\\"scope\\\":\\\"keyword.other.unit\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#569cd6\\\"},\\\"scope\\\":[\\\"punctuation.section.embedded.begin.php\\\",\\\"punctuation.section.embedded.end.php\\\"]},{\\\"settings\\\":{\\\"foreground\\\":\\\"#9cdcfe\\\"},\\\"scope\\\":\\\"support.function.git-rebase\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#b5cea8\\\"},\\\"scope\\\":\\\"constant.sha.git-rebase\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#d4d4d4\\\"},\\\"scope\\\":[\\\"storage.modifier.import.java\\\",\\\"variable.language.wildcard.java\\\",\\\"storage.modifier.package.java\\\"]},{\\\"settings\\\":{\\\"foreground\\\":\\\"#569cd6\\\"},\\\"scope\\\":\\\"variable.language\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#DCDCAA\\\"},\\\"scope\\\":[\\\"entity.name.function\\\",\\\"support.function\\\",\\\"support.constant.handlebars\\\",\\\"source.powershell variable.other.member\\\",\\\"entity.name.operator.custom-literal\\\"]},{\\\"settings\\\":{\\\"foreground\\\":\\\"#4EC9B0\\\"},\\\"scope\\\":[\\\"support.class\\\",\\\"support.type\\\",\\\"entity.name.type\\\",\\\"entity.name.namespace\\\",\\\"entity.other.attribute\\\",\\\"entity.name.scope-resolution\\\",\\\"entity.name.class\\\",\\\"storage.type.numeric.go\\\",\\\"storage.type.byte.go\\\",\\\"storage.type.boolean.go\\\",\\\"storage.type.string.go\\\",\\\"storage.type.uintptr.go\\\",\\\"storage.type.error.go\\\",\\\"storage.type.rune.go\\\",\\\"storage.type.cs\\\",\\\"storage.type.generic.cs\\\",\\\"storage.type.modifier.cs\\\",\\\"storage.type.variable.cs\\\",\\\"storage.type.annotation.java\\\",\\\"storage.type.generic.java\\\",\\\"storage.type.java\\\",\\\"storage.type.object.array.java\\\",\\\"storage.type.primitive.array.java\\\",\\\"storage.type.primitive.java\\\",\\\"storage.type.token.java\\\",\\\"storage.type.groovy\\\",\\\"storage.type.annotation.groovy\\\",\\\"storage.type.parameters.groovy\\\",\\\"storage.type.generic.groovy\\\",\\\"storage.type.object.array.groovy\\\",\\\"storage.type.primitive.array.groovy\\\",\\\"storage.type.primitive.groovy\\\"]},{\\\"settings\\\":{\\\"foreground\\\":\\\"#4EC9B0\\\"},\\\"scope\\\":[\\\"meta.type.cast.expr\\\",\\\"meta.type.new.expr\\\",\\\"support.constant.math\\\",\\\"support.constant.dom\\\",\\\"support.constant.json\\\",\\\"entity.other.inherited-class\\\"]},{\\\"settings\\\":{\\\"foreground\\\":\\\"#C586C0\\\"},\\\"scope\\\":[\\\"keyword.control\\\",\\\"source.cpp keyword.operator.new\\\",\\\"keyword.operator.delete\\\",\\\"keyword.other.using\\\",\\\"keyword.other.directive.using\\\",\\\"keyword.other.operator\\\",\\\"entity.name.operator\\\"]},{\\\"settings\\\":{\\\"foreground\\\":\\\"#9CDCFE\\\"},\\\"scope\\\":[\\\"variable\\\",\\\"meta.definition.variable.name\\\",\\\"support.variable\\\",\\\"entity.name.variable\\\",\\\"constant.other.placeholder\\\"]},{\\\"settings\\\":{\\\"foreground\\\":\\\"#4FC1FF\\\"},\\\"scope\\\":[\\\"variable.other.constant\\\",\\\"variable.other.enummember\\\"]},{\\\"settings\\\":{\\\"foreground\\\":\\\"#9CDCFE\\\"},\\\"scope\\\":[\\\"meta.object-literal.key\\\"]},{\\\"settings\\\":{\\\"foreground\\\":\\\"#CE9178\\\"},\\\"scope\\\":[\\\"support.constant.property-value\\\",\\\"support.constant.font-name\\\",\\\"support.constant.media-type\\\",\\\"support.constant.media\\\",\\\"constant.other.color.rgb-value\\\",\\\"constant.other.rgb-value\\\",\\\"support.constant.color\\\"]},{\\\"settings\\\":{\\\"foreground\\\":\\\"#CE9178\\\"},\\\"scope\\\":[\\\"punctuation.definition.group.regexp\\\",\\\"punctuation.definition.group.assertion.regexp\\\",\\\"punctuation.definition.character-class.regexp\\\",\\\"punctuation.character.set.begin.regexp\\\",\\\"punctuation.character.set.end.regexp\\\",\\\"keyword.operator.negation.regexp\\\",\\\"support.other.parenthesis.regexp\\\"]},{\\\"settings\\\":{\\\"foreground\\\":\\\"#d16969\\\"},\\\"scope\\\":[\\\"constant.character.character-class.regexp\\\",\\\"constant.other.character-class.set.regexp\\\",\\\"constant.other.character-class.regexp\\\",\\\"constant.character.set.regexp\\\"]},{\\\"settings\\\":{\\\"foreground\\\":\\\"#DCDCAA\\\"},\\\"scope\\\":[\\\"keyword.operator.or.regexp\\\",\\\"keyword.control.anchor.regexp\\\"]},{\\\"settings\\\":{\\\"foreground\\\":\\\"#d7ba7d\\\"},\\\"scope\\\":\\\"keyword.operator.quantifier.regexp\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#569cd6\\\"},\\\"scope\\\":[\\\"constant.character\\\",\\\"constant.other.option\\\"]},{\\\"settings\\\":{\\\"foreground\\\":\\\"#d7ba7d\\\"},\\\"scope\\\":\\\"constant.character.escape\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#C8C8C8\\\"},\\\"scope\\\":\\\"entity.name.label\\\"}],\\\"semanticTokenRules\\\":[{\\\"_selector\\\":\\\"newOperator\\\",\\\"_style\\\":{\\\"_foreground\\\":\\\"#d4d4d4\\\",\\\"_bold\\\":null,\\\"_underline\\\":null,\\\"_italic\\\":null,\\\"_strikethrough\\\":null}},{\\\"_selector\\\":\\\"stringLiteral\\\",\\\"_style\\\":{\\\"_foreground\\\":\\\"#ce9178\\\",\\\"_bold\\\":null,\\\"_underline\\\":null,\\\"_italic\\\":null,\\\"_strikethrough\\\":null}},{\\\"_selector\\\":\\\"customLiteral\\\",\\\"_style\\\":{\\\"_foreground\\\":\\\"#d4d4d4\\\",\\\"_bold\\\":null,\\\"_underline\\\":null,\\\"_italic\\\":null,\\\"_strikethrough\\\":null}},{\\\"_selector\\\":\\\"numberLiteral\\\",\\\"_style\\\":{\\\"_foreground\\\":\\\"#b5cea8\\\",\\\"_bold\\\":null,\\\"_underline\\\":null,\\\"_italic\\\":null,\\\"_strikethrough\\\":null}},{\\\"_selector\\\":\\\"newOperator\\\",\\\"_style\\\":{\\\"_foreground\\\":\\\"#c586c0\\\",\\\"_bold\\\":null,\\\"_underline\\\":null,\\\"_italic\\\":null,\\\"_strikethrough\\\":null}},{\\\"_selector\\\":\\\"stringLiteral\\\",\\\"_style\\\":{\\\"_foreground\\\":\\\"#ce9178\\\",\\\"_bold\\\":null,\\\"_underline\\\":null,\\\"_italic\\\":null,\\\"_strikethrough\\\":null}},{\\\"_selector\\\":\\\"customLiteral\\\",\\\"_style\\\":{\\\"_foreground\\\":\\\"#dcdcaa\\\",\\\"_bold\\\":null,\\\"_underline\\\":null,\\\"_italic\\\":null,\\\"_strikethrough\\\":null}},{\\\"_selector\\\":\\\"numberLiteral\\\",\\\"_style\\\":{\\\"_foreground\\\":\\\"#b5cea8\\\",\\\"_bold\\\":null,\\\"_underline\\\":null,\\\"_italic\\\":null,\\\"_strikethrough\\\":null}}],\\\"extensionData\\\":{\\\"_extensionId\\\":\\\"vscode.theme-defaults\\\",\\\"_extensionIsBuiltin\\\":true,\\\"_extensionName\\\":\\\"theme-defaults\\\",\\\"_extensionPublisher\\\":\\\"vscode\\\"},\\\"themeSemanticHighlighting\\\":true,\\\"colorMap\\\":{\\\"checkbox.border\\\":\\\"#3c3c3c\\\",\\\"editor.background\\\":\\\"#1f1f1f\\\",\\\"editor.foreground\\\":\\\"#cccccc\\\",\\\"editor.inactiveSelectionBackground\\\":\\\"#3a3d41\\\",\\\"editorIndentGuide.background1\\\":\\\"#404040\\\",\\\"editorIndentGuide.activeBackground1\\\":\\\"#707070\\\",\\\"editor.selectionHighlightBackground\\\":\\\"#add6ff26\\\",\\\"list.dropBackground\\\":\\\"#383b3d\\\",\\\"activityBarBadge.background\\\":\\\"#0078d4\\\",\\\"sideBarTitle.foreground\\\":\\\"#cccccc\\\",\\\"input.placeholderForeground\\\":\\\"#989898\\\",\\\"menu.background\\\":\\\"#1f1f1f\\\",\\\"menu.foreground\\\":\\\"#cccccc\\\",\\\"menu.separatorBackground\\\":\\\"#454545\\\",\\\"menu.border\\\":\\\"#454545\\\",\\\"menu.selectionBackground\\\":\\\"#0078d4\\\",\\\"statusBarItem.remoteForeground\\\":\\\"#ffffff\\\",\\\"statusBarItem.remoteBackground\\\":\\\"#0078d4\\\",\\\"ports.iconRunningProcessForeground\\\":\\\"#369432\\\",\\\"sideBarSectionHeader.background\\\":\\\"#181818\\\",\\\"sideBarSectionHeader.border\\\":\\\"#2b2b2b\\\",\\\"tab.selectedBackground\\\":\\\"#222222\\\",\\\"tab.selectedForeground\\\":\\\"#ffffffa0\\\",\\\"tab.lastPinnedBorder\\\":\\\"#cccccc33\\\",\\\"list.activeSelectionIconForeground\\\":\\\"#ffffff\\\",\\\"terminal.inactiveSelectionBackground\\\":\\\"#3a3d41\\\",\\\"widget.border\\\":\\\"#313131\\\",\\\"actionBar.toggledBackground\\\":\\\"#383a49\\\",\\\"activityBar.activeBorder\\\":\\\"#0078d4\\\",\\\"activityBar.background\\\":\\\"#181818\\\",\\\"activityBar.border\\\":\\\"#2b2b2b\\\",\\\"activityBar.foreground\\\":\\\"#d7d7d7\\\",\\\"activityBar.inactiveForeground\\\":\\\"#868686\\\",\\\"activityBarBadge.foreground\\\":\\\"#ffffff\\\",\\\"badge.background\\\":\\\"#616161\\\",\\\"badge.foreground\\\":\\\"#f8f8f8\\\",\\\"button.background\\\":\\\"#0078d4\\\",\\\"button.border\\\":\\\"#ffffff12\\\",\\\"button.foreground\\\":\\\"#ffffff\\\",\\\"button.hoverBackground\\\":\\\"#026ec1\\\",\\\"button.secondaryBackground\\\":\\\"#313131\\\",\\\"button.secondaryForeground\\\":\\\"#cccccc\\\",\\\"button.secondaryHoverBackground\\\":\\\"#3c3c3c\\\",\\\"chat.slashCommandBackground\\\":\\\"#34414b\\\",\\\"chat.slashCommandForeground\\\":\\\"#40a6ff\\\",\\\"checkbox.background\\\":\\\"#313131\\\",\\\"debugToolBar.background\\\":\\\"#181818\\\",\\\"descriptionForeground\\\":\\\"#9d9d9d\\\",\\\"dropdown.background\\\":\\\"#313131\\\",\\\"dropdown.border\\\":\\\"#3c3c3c\\\",\\\"dropdown.foreground\\\":\\\"#cccccc\\\",\\\"dropdown.listBackground\\\":\\\"#1f1f1f\\\",\\\"editor.findMatchBackground\\\":\\\"#9e6a03\\\",\\\"editorGroup.border\\\":\\\"#ffffff17\\\",\\\"editorGroupHeader.tabsBackground\\\":\\\"#181818\\\",\\\"editorGroupHeader.tabsBorder\\\":\\\"#2b2b2b\\\",\\\"editorGutter.addedBackground\\\":\\\"#2ea043\\\",\\\"editorGutter.deletedBackground\\\":\\\"#f85149\\\",\\\"editorGutter.modifiedBackground\\\":\\\"#0078d4\\\",\\\"editorLineNumber.activeForeground\\\":\\\"#cccccc\\\",\\\"editorLineNumber.foreground\\\":\\\"#6e7681\\\",\\\"editorOverviewRuler.border\\\":\\\"#010409\\\",\\\"editorWidget.background\\\":\\\"#202020\\\",\\\"errorForeground\\\":\\\"#f85149\\\",\\\"focusBorder\\\":\\\"#0078d4\\\",\\\"foreground\\\":\\\"#cccccc\\\",\\\"icon.foreground\\\":\\\"#cccccc\\\",\\\"input.background\\\":\\\"#313131\\\",\\\"input.border\\\":\\\"#3c3c3c\\\",\\\"input.foreground\\\":\\\"#cccccc\\\",\\\"inputOption.activeBackground\\\":\\\"#2489db82\\\",\\\"inputOption.activeBorder\\\":\\\"#2488db\\\",\\\"keybindingLabel.foreground\\\":\\\"#cccccc\\\",\\\"notificationCenterHeader.background\\\":\\\"#1f1f1f\\\",\\\"notificationCenterHeader.foreground\\\":\\\"#cccccc\\\",\\\"notifications.background\\\":\\\"#1f1f1f\\\",\\\"notifications.border\\\":\\\"#2b2b2b\\\",\\\"notifications.foreground\\\":\\\"#cccccc\\\",\\\"panel.background\\\":\\\"#181818\\\",\\\"panel.border\\\":\\\"#2b2b2b\\\",\\\"panelInput.border\\\":\\\"#2b2b2b\\\",\\\"panelTitle.activeBorder\\\":\\\"#0078d4\\\",\\\"panelTitle.activeForeground\\\":\\\"#cccccc\\\",\\\"panelTitle.inactiveForeground\\\":\\\"#9d9d9d\\\",\\\"peekViewEditor.background\\\":\\\"#1f1f1f\\\",\\\"peekViewEditor.matchHighlightBackground\\\":\\\"#bb800966\\\",\\\"peekViewResult.background\\\":\\\"#1f1f1f\\\",\\\"peekViewResult.matchHighlightBackground\\\":\\\"#bb800966\\\",\\\"pickerGroup.border\\\":\\\"#3c3c3c\\\",\\\"progressBar.background\\\":\\\"#0078d4\\\",\\\"quickInput.background\\\":\\\"#222222\\\",\\\"quickInput.foreground\\\":\\\"#cccccc\\\",\\\"settings.dropdownBackground\\\":\\\"#313131\\\",\\\"settings.dropdownBorder\\\":\\\"#3c3c3c\\\",\\\"settings.headerForeground\\\":\\\"#ffffff\\\",\\\"settings.modifiedItemIndicator\\\":\\\"#bb800966\\\",\\\"sideBar.background\\\":\\\"#181818\\\",\\\"sideBar.border\\\":\\\"#2b2b2b\\\",\\\"sideBar.foreground\\\":\\\"#cccccc\\\",\\\"sideBarSectionHeader.foreground\\\":\\\"#cccccc\\\",\\\"statusBar.background\\\":\\\"#181818\\\",\\\"statusBar.border\\\":\\\"#2b2b2b\\\",\\\"statusBar.debuggingBackground\\\":\\\"#0078d4\\\",\\\"statusBar.debuggingForeground\\\":\\\"#ffffff\\\",\\\"statusBar.focusBorder\\\":\\\"#0078d4\\\",\\\"statusBar.foreground\\\":\\\"#cccccc\\\",\\\"statusBar.noFolderBackground\\\":\\\"#1f1f1f\\\",\\\"statusBarItem.focusBorder\\\":\\\"#0078d4\\\",\\\"statusBarItem.prominentBackground\\\":\\\"#6e768166\\\",\\\"tab.activeBackground\\\":\\\"#1f1f1f\\\",\\\"tab.activeBorder\\\":\\\"#1f1f1f\\\",\\\"tab.activeBorderTop\\\":\\\"#0078d4\\\",\\\"tab.activeForeground\\\":\\\"#ffffff\\\",\\\"tab.selectedBorderTop\\\":\\\"#6caddf\\\",\\\"tab.border\\\":\\\"#2b2b2b\\\",\\\"tab.hoverBackground\\\":\\\"#1f1f1f\\\",\\\"tab.inactiveBackground\\\":\\\"#181818\\\",\\\"tab.inactiveForeground\\\":\\\"#9d9d9d\\\",\\\"tab.unfocusedActiveBorder\\\":\\\"#1f1f1f\\\",\\\"tab.unfocusedActiveBorderTop\\\":\\\"#2b2b2b\\\",\\\"tab.unfocusedHoverBackground\\\":\\\"#1f1f1f\\\",\\\"terminal.foreground\\\":\\\"#cccccc\\\",\\\"terminal.tab.activeBorder\\\":\\\"#0078d4\\\",\\\"textBlockQuote.background\\\":\\\"#2b2b2b\\\",\\\"textBlockQuote.border\\\":\\\"#616161\\\",\\\"textCodeBlock.background\\\":\\\"#2b2b2b\\\",\\\"textLink.activeForeground\\\":\\\"#4daafc\\\",\\\"textLink.foreground\\\":\\\"#4daafc\\\",\\\"textPreformat.foreground\\\":\\\"#d0d0d0\\\",\\\"textPreformat.background\\\":\\\"#3c3c3c\\\",\\\"textSeparator.foreground\\\":\\\"#21262d\\\",\\\"titleBar.activeBackground\\\":\\\"#181818\\\",\\\"titleBar.activeForeground\\\":\\\"#cccccc\\\",\\\"titleBar.border\\\":\\\"#2b2b2b\\\",\\\"titleBar.inactiveBackground\\\":\\\"#1f1f1f\\\",\\\"titleBar.inactiveForeground\\\":\\\"#9d9d9d\\\",\\\"welcomePage.tileBackground\\\":\\\"#2b2b2b\\\",\\\"welcomePage.progress.foreground\\\":\\\"#0078d4\\\"},\\\"watch\\\":false}\",\"workbench.view.extension.gitlens.state.hidden\":\"[{\\\"id\\\":\\\"gitlens.views.home\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"gitlens.views.launchpad\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"gitlens.views.drafts\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"gitlens.views.workspaces\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"gitlens.views.account\\\",\\\"isHidden\\\":false}]\",\"terminal.hidden\":\"[{\\\"id\\\":\\\"terminal\\\",\\\"isHidden\\\":false}]\",\"workbench.scm.views.state.hidden\":\"[{\\\"id\\\":\\\"workbench.scm.repositories\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.scm\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.scm.history\\\",\\\"isHidden\\\":false}]\",\"workbench.panel.chatSidebar.hidden\":\"[{\\\"id\\\":\\\"workbench.panel.chat.view.copilot\\\",\\\"isHidden\\\":false}]\",\"workbench.panel.alignment\":\"center\",\"workbench.view.extensions.state.hidden\":\"[{\\\"id\\\":\\\"workbench.views.extensions.installed\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.views.extensions.searchOutdated\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.views.extensions.workspaceRecommendations\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.views.extensions.popular\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.views.extensions.searchRecentlyUpdated\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.views.extensions.otherRecommendations\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"extensions.recommendedList\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.views.extensions.enabled\\\",\\\"isHidden\\\":true},{\\\"id\\\":\\\"workbench.views.extensions.disabled\\\",\\\"isHidden\\\":true},{\\\"id\\\":\\\"workbench.views.extensions.marketplace\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.views.extensions.searchInstalled\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.views.extensions.searchEnabled\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.views.extensions.searchDisabled\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.views.extensions.searchBuiltin\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.views.extensions.searchWorkspaceUnsupported\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.views.extensions.builtinFeatureExtensions\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.views.extensions.builtinThemeExtensions\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.views.extensions.builtinProgrammingLanguageExtensions\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.views.extensions.untrustedUnsupportedExtensions\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.views.extensions.untrustedPartiallySupportedExtensions\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.views.extensions.virtualUnsupportedExtensions\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.views.extensions.virtualPartiallySupportedExtensions\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.views.extensions.deprecatedExtensions\\\",\\\"isHidden\\\":false}]\"}}"} \ No newline at end of file diff --git a/test/csharp-test-profile.code-profile b/test/csharp-test-profile.code-profile new file mode 100644 index 000000000..7c6621563 --- /dev/null +++ b/test/csharp-test-profile.code-profile @@ -0,0 +1 @@ +{"name":"csharp-test-profile","extensions":"[{\"identifier\":{\"id\":\"ms-dotnettools.csdevkit\",\"uuid\":\"7ad42776-8f7e-4214-bf67-4f0b518ef629\"},\"displayName\":\"C# Dev Kit\"},{\"identifier\":{\"id\":\"ms-dotnettools.csharp\",\"uuid\":\"d0bfc4ab-1d3a-4487-8782-7cf6027b4fff\"},\"displayName\":\"C#\"},{\"identifier\":{\"id\":\"ms-dotnettools.vscode-dotnet-runtime\",\"uuid\":\"1aab81a1-b3d9-4aef-976b-577d5d90fe3f\"},\"displayName\":\".NET Install Tool\"}]","globalState":"{\"storage\":{\"workbench.panel.pinnedPanels\":\"[{\\\"id\\\":\\\"workbench.panel.output\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":1},{\\\"id\\\":\\\"workbench.panel.testResults\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":3},{\\\"id\\\":\\\"terminal\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":3},{\\\"id\\\":\\\"~remote.forwardedPortsContainer\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":5},{\\\"id\\\":\\\"refactorPreview\\\",\\\"pinned\\\":true,\\\"visible\\\":false},{\\\"id\\\":\\\"workbench.panel.repl\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":2},{\\\"id\\\":\\\"workbench.panel.comments\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":10},{\\\"id\\\":\\\"workbench.panel.markers\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":0}]\",\"workbench.activity.pinnedViewlets2\":\"[{\\\"id\\\":\\\"workbench.view.explorer\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":0},{\\\"id\\\":\\\"workbench.view.search\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":1},{\\\"id\\\":\\\"workbench.view.debug\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":3},{\\\"id\\\":\\\"workbench.view.scm\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":2},{\\\"id\\\":\\\"workbench.view.remote\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":4},{\\\"id\\\":\\\"workbench.view.extensions\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":4},{\\\"id\\\":\\\"workbench.view.extension.test\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":6},{\\\"id\\\":\\\"workbench.view.extension.references-view\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":7},{\\\"id\\\":\\\"workbench.panel.chatSidebar\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":100},{\\\"id\\\":\\\"workbench.view.sync\\\",\\\"pinned\\\":true,\\\"visible\\\":false},{\\\"id\\\":\\\"workbench.view.editSessions\\\",\\\"pinned\\\":true,\\\"visible\\\":false}]\",\"colorThemeData\":\"{\\\"id\\\":\\\"vs-dark vscode-theme-defaults-themes-dark_modern-json\\\",\\\"label\\\":\\\"Dark Modern\\\",\\\"settingsId\\\":\\\"Default Dark Modern\\\",\\\"themeTokenColors\\\":[{\\\"settings\\\":{\\\"foreground\\\":\\\"#D4D4D4\\\"},\\\"scope\\\":[\\\"meta.embedded\\\",\\\"source.groovy.embedded\\\",\\\"string meta.image.inline.markdown\\\",\\\"variable.legacy.builtin.python\\\"]},{\\\"settings\\\":{\\\"fontStyle\\\":\\\"italic\\\"},\\\"scope\\\":\\\"emphasis\\\"},{\\\"settings\\\":{\\\"fontStyle\\\":\\\"bold\\\"},\\\"scope\\\":\\\"strong\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#000080\\\"},\\\"scope\\\":\\\"header\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#6A9955\\\"},\\\"scope\\\":\\\"comment\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#569cd6\\\"},\\\"scope\\\":\\\"constant.language\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#b5cea8\\\"},\\\"scope\\\":[\\\"constant.numeric\\\",\\\"variable.other.enummember\\\",\\\"keyword.operator.plus.exponent\\\",\\\"keyword.operator.minus.exponent\\\"]},{\\\"settings\\\":{\\\"foreground\\\":\\\"#646695\\\"},\\\"scope\\\":\\\"constant.regexp\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#569cd6\\\"},\\\"scope\\\":\\\"entity.name.tag\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#d7ba7d\\\"},\\\"scope\\\":[\\\"entity.name.tag.css\\\",\\\"entity.name.tag.less\\\"]},{\\\"settings\\\":{\\\"foreground\\\":\\\"#9cdcfe\\\"},\\\"scope\\\":\\\"entity.other.attribute-name\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#d7ba7d\\\"},\\\"scope\\\":[\\\"entity.other.attribute-name.class.css\\\",\\\"source.css entity.other.attribute-name.class\\\",\\\"entity.other.attribute-name.id.css\\\",\\\"entity.other.attribute-name.parent-selector.css\\\",\\\"entity.other.attribute-name.parent.less\\\",\\\"source.css entity.other.attribute-name.pseudo-class\\\",\\\"entity.other.attribute-name.pseudo-element.css\\\",\\\"source.css.less entity.other.attribute-name.id\\\",\\\"entity.other.attribute-name.scss\\\"]},{\\\"settings\\\":{\\\"foreground\\\":\\\"#f44747\\\"},\\\"scope\\\":\\\"invalid\\\"},{\\\"settings\\\":{\\\"fontStyle\\\":\\\"underline\\\"},\\\"scope\\\":\\\"markup.underline\\\"},{\\\"settings\\\":{\\\"fontStyle\\\":\\\"bold\\\",\\\"foreground\\\":\\\"#569cd6\\\"},\\\"scope\\\":\\\"markup.bold\\\"},{\\\"settings\\\":{\\\"fontStyle\\\":\\\"bold\\\",\\\"foreground\\\":\\\"#569cd6\\\"},\\\"scope\\\":\\\"markup.heading\\\"},{\\\"settings\\\":{\\\"fontStyle\\\":\\\"italic\\\"},\\\"scope\\\":\\\"markup.italic\\\"},{\\\"settings\\\":{\\\"fontStyle\\\":\\\"strikethrough\\\"},\\\"scope\\\":\\\"markup.strikethrough\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#b5cea8\\\"},\\\"scope\\\":\\\"markup.inserted\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#ce9178\\\"},\\\"scope\\\":\\\"markup.deleted\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#569cd6\\\"},\\\"scope\\\":\\\"markup.changed\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#6A9955\\\"},\\\"scope\\\":\\\"punctuation.definition.quote.begin.markdown\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#6796e6\\\"},\\\"scope\\\":\\\"punctuation.definition.list.begin.markdown\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#ce9178\\\"},\\\"scope\\\":\\\"markup.inline.raw\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#808080\\\"},\\\"scope\\\":\\\"punctuation.definition.tag\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#569cd6\\\"},\\\"scope\\\":[\\\"meta.preprocessor\\\",\\\"entity.name.function.preprocessor\\\"]},{\\\"settings\\\":{\\\"foreground\\\":\\\"#ce9178\\\"},\\\"scope\\\":\\\"meta.preprocessor.string\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#b5cea8\\\"},\\\"scope\\\":\\\"meta.preprocessor.numeric\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#9cdcfe\\\"},\\\"scope\\\":\\\"meta.structure.dictionary.key.python\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#569cd6\\\"},\\\"scope\\\":\\\"meta.diff.header\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#569cd6\\\"},\\\"scope\\\":\\\"storage\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#569cd6\\\"},\\\"scope\\\":\\\"storage.type\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#569cd6\\\"},\\\"scope\\\":[\\\"storage.modifier\\\",\\\"keyword.operator.noexcept\\\"]},{\\\"settings\\\":{\\\"foreground\\\":\\\"#ce9178\\\"},\\\"scope\\\":[\\\"string\\\",\\\"meta.embedded.assembly\\\"]},{\\\"settings\\\":{\\\"foreground\\\":\\\"#ce9178\\\"},\\\"scope\\\":\\\"string.tag\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#ce9178\\\"},\\\"scope\\\":\\\"string.value\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#d16969\\\"},\\\"scope\\\":\\\"string.regexp\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#569cd6\\\"},\\\"scope\\\":[\\\"punctuation.definition.template-expression.begin\\\",\\\"punctuation.definition.template-expression.end\\\",\\\"punctuation.section.embedded\\\"]},{\\\"settings\\\":{\\\"foreground\\\":\\\"#d4d4d4\\\"},\\\"scope\\\":[\\\"meta.template.expression\\\"]},{\\\"settings\\\":{\\\"foreground\\\":\\\"#9cdcfe\\\"},\\\"scope\\\":[\\\"support.type.vendored.property-name\\\",\\\"support.type.property-name\\\",\\\"source.css variable\\\",\\\"source.coffee.embedded\\\"]},{\\\"settings\\\":{\\\"foreground\\\":\\\"#569cd6\\\"},\\\"scope\\\":\\\"keyword\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#569cd6\\\"},\\\"scope\\\":\\\"keyword.control\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#d4d4d4\\\"},\\\"scope\\\":\\\"keyword.operator\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#569cd6\\\"},\\\"scope\\\":[\\\"keyword.operator.new\\\",\\\"keyword.operator.expression\\\",\\\"keyword.operator.cast\\\",\\\"keyword.operator.sizeof\\\",\\\"keyword.operator.alignof\\\",\\\"keyword.operator.typeid\\\",\\\"keyword.operator.alignas\\\",\\\"keyword.operator.instanceof\\\",\\\"keyword.operator.logical.python\\\",\\\"keyword.operator.wordlike\\\"]},{\\\"settings\\\":{\\\"foreground\\\":\\\"#b5cea8\\\"},\\\"scope\\\":\\\"keyword.other.unit\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#569cd6\\\"},\\\"scope\\\":[\\\"punctuation.section.embedded.begin.php\\\",\\\"punctuation.section.embedded.end.php\\\"]},{\\\"settings\\\":{\\\"foreground\\\":\\\"#9cdcfe\\\"},\\\"scope\\\":\\\"support.function.git-rebase\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#b5cea8\\\"},\\\"scope\\\":\\\"constant.sha.git-rebase\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#d4d4d4\\\"},\\\"scope\\\":[\\\"storage.modifier.import.java\\\",\\\"variable.language.wildcard.java\\\",\\\"storage.modifier.package.java\\\"]},{\\\"settings\\\":{\\\"foreground\\\":\\\"#569cd6\\\"},\\\"scope\\\":\\\"variable.language\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#DCDCAA\\\"},\\\"scope\\\":[\\\"entity.name.function\\\",\\\"support.function\\\",\\\"support.constant.handlebars\\\",\\\"source.powershell variable.other.member\\\",\\\"entity.name.operator.custom-literal\\\"]},{\\\"settings\\\":{\\\"foreground\\\":\\\"#4EC9B0\\\"},\\\"scope\\\":[\\\"support.class\\\",\\\"support.type\\\",\\\"entity.name.type\\\",\\\"entity.name.namespace\\\",\\\"entity.other.attribute\\\",\\\"entity.name.scope-resolution\\\",\\\"entity.name.class\\\",\\\"storage.type.numeric.go\\\",\\\"storage.type.byte.go\\\",\\\"storage.type.boolean.go\\\",\\\"storage.type.string.go\\\",\\\"storage.type.uintptr.go\\\",\\\"storage.type.error.go\\\",\\\"storage.type.rune.go\\\",\\\"storage.type.cs\\\",\\\"storage.type.generic.cs\\\",\\\"storage.type.modifier.cs\\\",\\\"storage.type.variable.cs\\\",\\\"storage.type.annotation.java\\\",\\\"storage.type.generic.java\\\",\\\"storage.type.java\\\",\\\"storage.type.object.array.java\\\",\\\"storage.type.primitive.array.java\\\",\\\"storage.type.primitive.java\\\",\\\"storage.type.token.java\\\",\\\"storage.type.groovy\\\",\\\"storage.type.annotation.groovy\\\",\\\"storage.type.parameters.groovy\\\",\\\"storage.type.generic.groovy\\\",\\\"storage.type.object.array.groovy\\\",\\\"storage.type.primitive.array.groovy\\\",\\\"storage.type.primitive.groovy\\\"]},{\\\"settings\\\":{\\\"foreground\\\":\\\"#4EC9B0\\\"},\\\"scope\\\":[\\\"meta.type.cast.expr\\\",\\\"meta.type.new.expr\\\",\\\"support.constant.math\\\",\\\"support.constant.dom\\\",\\\"support.constant.json\\\",\\\"entity.other.inherited-class\\\"]},{\\\"settings\\\":{\\\"foreground\\\":\\\"#C586C0\\\"},\\\"scope\\\":[\\\"keyword.control\\\",\\\"source.cpp keyword.operator.new\\\",\\\"keyword.operator.delete\\\",\\\"keyword.other.using\\\",\\\"keyword.other.directive.using\\\",\\\"keyword.other.operator\\\",\\\"entity.name.operator\\\"]},{\\\"settings\\\":{\\\"foreground\\\":\\\"#9CDCFE\\\"},\\\"scope\\\":[\\\"variable\\\",\\\"meta.definition.variable.name\\\",\\\"support.variable\\\",\\\"entity.name.variable\\\",\\\"constant.other.placeholder\\\"]},{\\\"settings\\\":{\\\"foreground\\\":\\\"#4FC1FF\\\"},\\\"scope\\\":[\\\"variable.other.constant\\\",\\\"variable.other.enummember\\\"]},{\\\"settings\\\":{\\\"foreground\\\":\\\"#9CDCFE\\\"},\\\"scope\\\":[\\\"meta.object-literal.key\\\"]},{\\\"settings\\\":{\\\"foreground\\\":\\\"#CE9178\\\"},\\\"scope\\\":[\\\"support.constant.property-value\\\",\\\"support.constant.font-name\\\",\\\"support.constant.media-type\\\",\\\"support.constant.media\\\",\\\"constant.other.color.rgb-value\\\",\\\"constant.other.rgb-value\\\",\\\"support.constant.color\\\"]},{\\\"settings\\\":{\\\"foreground\\\":\\\"#CE9178\\\"},\\\"scope\\\":[\\\"punctuation.definition.group.regexp\\\",\\\"punctuation.definition.group.assertion.regexp\\\",\\\"punctuation.definition.character-class.regexp\\\",\\\"punctuation.character.set.begin.regexp\\\",\\\"punctuation.character.set.end.regexp\\\",\\\"keyword.operator.negation.regexp\\\",\\\"support.other.parenthesis.regexp\\\"]},{\\\"settings\\\":{\\\"foreground\\\":\\\"#d16969\\\"},\\\"scope\\\":[\\\"constant.character.character-class.regexp\\\",\\\"constant.other.character-class.set.regexp\\\",\\\"constant.other.character-class.regexp\\\",\\\"constant.character.set.regexp\\\"]},{\\\"settings\\\":{\\\"foreground\\\":\\\"#DCDCAA\\\"},\\\"scope\\\":[\\\"keyword.operator.or.regexp\\\",\\\"keyword.control.anchor.regexp\\\"]},{\\\"settings\\\":{\\\"foreground\\\":\\\"#d7ba7d\\\"},\\\"scope\\\":\\\"keyword.operator.quantifier.regexp\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#569cd6\\\"},\\\"scope\\\":[\\\"constant.character\\\",\\\"constant.other.option\\\"]},{\\\"settings\\\":{\\\"foreground\\\":\\\"#d7ba7d\\\"},\\\"scope\\\":\\\"constant.character.escape\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#C8C8C8\\\"},\\\"scope\\\":\\\"entity.name.label\\\"}],\\\"semanticTokenRules\\\":[{\\\"_selector\\\":\\\"newOperator\\\",\\\"_style\\\":{\\\"_foreground\\\":\\\"#d4d4d4\\\",\\\"_bold\\\":null,\\\"_underline\\\":null,\\\"_italic\\\":null,\\\"_strikethrough\\\":null}},{\\\"_selector\\\":\\\"stringLiteral\\\",\\\"_style\\\":{\\\"_foreground\\\":\\\"#ce9178\\\",\\\"_bold\\\":null,\\\"_underline\\\":null,\\\"_italic\\\":null,\\\"_strikethrough\\\":null}},{\\\"_selector\\\":\\\"customLiteral\\\",\\\"_style\\\":{\\\"_foreground\\\":\\\"#d4d4d4\\\",\\\"_bold\\\":null,\\\"_underline\\\":null,\\\"_italic\\\":null,\\\"_strikethrough\\\":null}},{\\\"_selector\\\":\\\"numberLiteral\\\",\\\"_style\\\":{\\\"_foreground\\\":\\\"#b5cea8\\\",\\\"_bold\\\":null,\\\"_underline\\\":null,\\\"_italic\\\":null,\\\"_strikethrough\\\":null}},{\\\"_selector\\\":\\\"newOperator\\\",\\\"_style\\\":{\\\"_foreground\\\":\\\"#c586c0\\\",\\\"_bold\\\":null,\\\"_underline\\\":null,\\\"_italic\\\":null,\\\"_strikethrough\\\":null}},{\\\"_selector\\\":\\\"stringLiteral\\\",\\\"_style\\\":{\\\"_foreground\\\":\\\"#ce9178\\\",\\\"_bold\\\":null,\\\"_underline\\\":null,\\\"_italic\\\":null,\\\"_strikethrough\\\":null}},{\\\"_selector\\\":\\\"customLiteral\\\",\\\"_style\\\":{\\\"_foreground\\\":\\\"#dcdcaa\\\",\\\"_bold\\\":null,\\\"_underline\\\":null,\\\"_italic\\\":null,\\\"_strikethrough\\\":null}},{\\\"_selector\\\":\\\"numberLiteral\\\",\\\"_style\\\":{\\\"_foreground\\\":\\\"#b5cea8\\\",\\\"_bold\\\":null,\\\"_underline\\\":null,\\\"_italic\\\":null,\\\"_strikethrough\\\":null}}],\\\"extensionData\\\":{\\\"_extensionId\\\":\\\"vscode.theme-defaults\\\",\\\"_extensionIsBuiltin\\\":true,\\\"_extensionName\\\":\\\"theme-defaults\\\",\\\"_extensionPublisher\\\":\\\"vscode\\\"},\\\"themeSemanticHighlighting\\\":true,\\\"colorMap\\\":{\\\"checkbox.border\\\":\\\"#3c3c3c\\\",\\\"editor.background\\\":\\\"#1f1f1f\\\",\\\"editor.foreground\\\":\\\"#cccccc\\\",\\\"editor.inactiveSelectionBackground\\\":\\\"#3a3d41\\\",\\\"editorIndentGuide.background1\\\":\\\"#404040\\\",\\\"editorIndentGuide.activeBackground1\\\":\\\"#707070\\\",\\\"editor.selectionHighlightBackground\\\":\\\"#add6ff26\\\",\\\"list.dropBackground\\\":\\\"#383b3d\\\",\\\"activityBarBadge.background\\\":\\\"#0078d4\\\",\\\"sideBarTitle.foreground\\\":\\\"#cccccc\\\",\\\"input.placeholderForeground\\\":\\\"#989898\\\",\\\"menu.background\\\":\\\"#1f1f1f\\\",\\\"menu.foreground\\\":\\\"#cccccc\\\",\\\"menu.separatorBackground\\\":\\\"#454545\\\",\\\"menu.border\\\":\\\"#454545\\\",\\\"menu.selectionBackground\\\":\\\"#0078d4\\\",\\\"statusBarItem.remoteForeground\\\":\\\"#ffffff\\\",\\\"statusBarItem.remoteBackground\\\":\\\"#0078d4\\\",\\\"ports.iconRunningProcessForeground\\\":\\\"#369432\\\",\\\"sideBarSectionHeader.background\\\":\\\"#181818\\\",\\\"sideBarSectionHeader.border\\\":\\\"#2b2b2b\\\",\\\"tab.selectedBackground\\\":\\\"#222222\\\",\\\"tab.selectedForeground\\\":\\\"#ffffffa0\\\",\\\"tab.lastPinnedBorder\\\":\\\"#cccccc33\\\",\\\"list.activeSelectionIconForeground\\\":\\\"#ffffff\\\",\\\"terminal.inactiveSelectionBackground\\\":\\\"#3a3d41\\\",\\\"widget.border\\\":\\\"#313131\\\",\\\"actionBar.toggledBackground\\\":\\\"#383a49\\\",\\\"activityBar.activeBorder\\\":\\\"#0078d4\\\",\\\"activityBar.background\\\":\\\"#181818\\\",\\\"activityBar.border\\\":\\\"#2b2b2b\\\",\\\"activityBar.foreground\\\":\\\"#d7d7d7\\\",\\\"activityBar.inactiveForeground\\\":\\\"#868686\\\",\\\"activityBarBadge.foreground\\\":\\\"#ffffff\\\",\\\"badge.background\\\":\\\"#616161\\\",\\\"badge.foreground\\\":\\\"#f8f8f8\\\",\\\"button.background\\\":\\\"#0078d4\\\",\\\"button.border\\\":\\\"#ffffff12\\\",\\\"button.foreground\\\":\\\"#ffffff\\\",\\\"button.hoverBackground\\\":\\\"#026ec1\\\",\\\"button.secondaryBackground\\\":\\\"#313131\\\",\\\"button.secondaryForeground\\\":\\\"#cccccc\\\",\\\"button.secondaryHoverBackground\\\":\\\"#3c3c3c\\\",\\\"chat.slashCommandBackground\\\":\\\"#34414b\\\",\\\"chat.slashCommandForeground\\\":\\\"#40a6ff\\\",\\\"checkbox.background\\\":\\\"#313131\\\",\\\"debugToolBar.background\\\":\\\"#181818\\\",\\\"descriptionForeground\\\":\\\"#9d9d9d\\\",\\\"dropdown.background\\\":\\\"#313131\\\",\\\"dropdown.border\\\":\\\"#3c3c3c\\\",\\\"dropdown.foreground\\\":\\\"#cccccc\\\",\\\"dropdown.listBackground\\\":\\\"#1f1f1f\\\",\\\"editor.findMatchBackground\\\":\\\"#9e6a03\\\",\\\"editorGroup.border\\\":\\\"#ffffff17\\\",\\\"editorGroupHeader.tabsBackground\\\":\\\"#181818\\\",\\\"editorGroupHeader.tabsBorder\\\":\\\"#2b2b2b\\\",\\\"editorGutter.addedBackground\\\":\\\"#2ea043\\\",\\\"editorGutter.deletedBackground\\\":\\\"#f85149\\\",\\\"editorGutter.modifiedBackground\\\":\\\"#0078d4\\\",\\\"editorLineNumber.activeForeground\\\":\\\"#cccccc\\\",\\\"editorLineNumber.foreground\\\":\\\"#6e7681\\\",\\\"editorOverviewRuler.border\\\":\\\"#010409\\\",\\\"editorWidget.background\\\":\\\"#202020\\\",\\\"errorForeground\\\":\\\"#f85149\\\",\\\"focusBorder\\\":\\\"#0078d4\\\",\\\"foreground\\\":\\\"#cccccc\\\",\\\"icon.foreground\\\":\\\"#cccccc\\\",\\\"input.background\\\":\\\"#313131\\\",\\\"input.border\\\":\\\"#3c3c3c\\\",\\\"input.foreground\\\":\\\"#cccccc\\\",\\\"inputOption.activeBackground\\\":\\\"#2489db82\\\",\\\"inputOption.activeBorder\\\":\\\"#2488db\\\",\\\"keybindingLabel.foreground\\\":\\\"#cccccc\\\",\\\"notificationCenterHeader.background\\\":\\\"#1f1f1f\\\",\\\"notificationCenterHeader.foreground\\\":\\\"#cccccc\\\",\\\"notifications.background\\\":\\\"#1f1f1f\\\",\\\"notifications.border\\\":\\\"#2b2b2b\\\",\\\"notifications.foreground\\\":\\\"#cccccc\\\",\\\"panel.background\\\":\\\"#181818\\\",\\\"panel.border\\\":\\\"#2b2b2b\\\",\\\"panelInput.border\\\":\\\"#2b2b2b\\\",\\\"panelTitle.activeBorder\\\":\\\"#0078d4\\\",\\\"panelTitle.activeForeground\\\":\\\"#cccccc\\\",\\\"panelTitle.inactiveForeground\\\":\\\"#9d9d9d\\\",\\\"peekViewEditor.background\\\":\\\"#1f1f1f\\\",\\\"peekViewEditor.matchHighlightBackground\\\":\\\"#bb800966\\\",\\\"peekViewResult.background\\\":\\\"#1f1f1f\\\",\\\"peekViewResult.matchHighlightBackground\\\":\\\"#bb800966\\\",\\\"pickerGroup.border\\\":\\\"#3c3c3c\\\",\\\"progressBar.background\\\":\\\"#0078d4\\\",\\\"quickInput.background\\\":\\\"#222222\\\",\\\"quickInput.foreground\\\":\\\"#cccccc\\\",\\\"settings.dropdownBackground\\\":\\\"#313131\\\",\\\"settings.dropdownBorder\\\":\\\"#3c3c3c\\\",\\\"settings.headerForeground\\\":\\\"#ffffff\\\",\\\"settings.modifiedItemIndicator\\\":\\\"#bb800966\\\",\\\"sideBar.background\\\":\\\"#181818\\\",\\\"sideBar.border\\\":\\\"#2b2b2b\\\",\\\"sideBar.foreground\\\":\\\"#cccccc\\\",\\\"sideBarSectionHeader.foreground\\\":\\\"#cccccc\\\",\\\"statusBar.background\\\":\\\"#181818\\\",\\\"statusBar.border\\\":\\\"#2b2b2b\\\",\\\"statusBar.debuggingBackground\\\":\\\"#0078d4\\\",\\\"statusBar.debuggingForeground\\\":\\\"#ffffff\\\",\\\"statusBar.focusBorder\\\":\\\"#0078d4\\\",\\\"statusBar.foreground\\\":\\\"#cccccc\\\",\\\"statusBar.noFolderBackground\\\":\\\"#1f1f1f\\\",\\\"statusBarItem.focusBorder\\\":\\\"#0078d4\\\",\\\"statusBarItem.prominentBackground\\\":\\\"#6e768166\\\",\\\"tab.activeBackground\\\":\\\"#1f1f1f\\\",\\\"tab.activeBorder\\\":\\\"#1f1f1f\\\",\\\"tab.activeBorderTop\\\":\\\"#0078d4\\\",\\\"tab.activeForeground\\\":\\\"#ffffff\\\",\\\"tab.selectedBorderTop\\\":\\\"#6caddf\\\",\\\"tab.border\\\":\\\"#2b2b2b\\\",\\\"tab.hoverBackground\\\":\\\"#1f1f1f\\\",\\\"tab.inactiveBackground\\\":\\\"#181818\\\",\\\"tab.inactiveForeground\\\":\\\"#9d9d9d\\\",\\\"tab.unfocusedActiveBorder\\\":\\\"#1f1f1f\\\",\\\"tab.unfocusedActiveBorderTop\\\":\\\"#2b2b2b\\\",\\\"tab.unfocusedHoverBackground\\\":\\\"#1f1f1f\\\",\\\"terminal.foreground\\\":\\\"#cccccc\\\",\\\"terminal.tab.activeBorder\\\":\\\"#0078d4\\\",\\\"textBlockQuote.background\\\":\\\"#2b2b2b\\\",\\\"textBlockQuote.border\\\":\\\"#616161\\\",\\\"textCodeBlock.background\\\":\\\"#2b2b2b\\\",\\\"textLink.activeForeground\\\":\\\"#4daafc\\\",\\\"textLink.foreground\\\":\\\"#4daafc\\\",\\\"textPreformat.foreground\\\":\\\"#d0d0d0\\\",\\\"textPreformat.background\\\":\\\"#3c3c3c\\\",\\\"textSeparator.foreground\\\":\\\"#21262d\\\",\\\"titleBar.activeBackground\\\":\\\"#181818\\\",\\\"titleBar.activeForeground\\\":\\\"#cccccc\\\",\\\"titleBar.border\\\":\\\"#2b2b2b\\\",\\\"titleBar.inactiveBackground\\\":\\\"#1f1f1f\\\",\\\"titleBar.inactiveForeground\\\":\\\"#9d9d9d\\\",\\\"welcomePage.tileBackground\\\":\\\"#2b2b2b\\\",\\\"welcomePage.progress.foreground\\\":\\\"#0078d4\\\"},\\\"watch\\\":false}\",\"workbench.view.extensions.state.hidden\":\"[{\\\"id\\\":\\\"workbench.views.extensions.installed\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.views.extensions.searchOutdated\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.views.extensions.workspaceRecommendations\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.views.extensions.popular\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.views.extensions.searchRecentlyUpdated\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.views.extensions.otherRecommendations\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"extensions.recommendedList\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.views.extensions.enabled\\\",\\\"isHidden\\\":true},{\\\"id\\\":\\\"workbench.views.extensions.disabled\\\",\\\"isHidden\\\":true},{\\\"id\\\":\\\"workbench.views.extensions.marketplace\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.views.extensions.searchInstalled\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.views.extensions.searchEnabled\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.views.extensions.searchDisabled\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.views.extensions.searchBuiltin\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.views.extensions.searchWorkspaceUnsupported\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.views.extensions.builtinFeatureExtensions\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.views.extensions.builtinThemeExtensions\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.views.extensions.builtinProgrammingLanguageExtensions\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.views.extensions.untrustedUnsupportedExtensions\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.views.extensions.untrustedPartiallySupportedExtensions\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.views.extensions.virtualUnsupportedExtensions\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.views.extensions.virtualPartiallySupportedExtensions\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.views.extensions.deprecatedExtensions\\\",\\\"isHidden\\\":false}]\",\"workbench.panel.alignment\":\"center\",\"terminal.hidden\":\"[{\\\"id\\\":\\\"terminal\\\",\\\"isHidden\\\":false}]\"}}"} \ No newline at end of file diff --git a/test/lsptoolshost/integrationTests/buildDiagnostics.integration.test.ts b/test/lsptoolshost/integrationTests/buildDiagnostics.integration.test.ts index c94481110..cc915e429 100644 --- a/test/lsptoolshost/integrationTests/buildDiagnostics.integration.test.ts +++ b/test/lsptoolshost/integrationTests/buildDiagnostics.integration.test.ts @@ -9,7 +9,7 @@ import testAssetWorkspace from './testAssets/testAssetWorkspace'; import { AnalysisSetting, BuildDiagnosticsService } from '../../../src/lsptoolshost/buildDiagnosticsService'; import * as integrationHelpers from './integrationHelpers'; import path = require('path'); -describe(`Build and live diagnostics dedupe ${testAssetWorkspace.description}`, () => { +describe(`Build and live diagnostics dedupe`, () => { beforeAll(async () => { await integrationHelpers.activateCSharpExtension(); }); diff --git a/test/lsptoolshost/integrationTests/classification.integration.test.ts b/test/lsptoolshost/integrationTests/classification.integration.test.ts index 173cb48f5..eeb454deb 100644 --- a/test/lsptoolshost/integrationTests/classification.integration.test.ts +++ b/test/lsptoolshost/integrationTests/classification.integration.test.ts @@ -9,7 +9,7 @@ import testAssetWorkspace from './testAssets/testAssetWorkspace'; import { activateCSharpExtension, closeAllEditorsAsync, openFileInWorkspaceAsync } from './integrationHelpers'; import { describe, beforeAll, beforeEach, afterAll, test, expect, afterEach } from '@jest/globals'; -describe(`[${testAssetWorkspace.description}] Classification Tests`, () => { +describe(`Classification Tests`, () => { beforeAll(async () => { await activateCSharpExtension(); }); diff --git a/test/lsptoolshost/integrationTests/codeactions.integration.test.ts b/test/lsptoolshost/integrationTests/codeactions.integration.test.ts index 371b1732f..0c82b08ca 100644 --- a/test/lsptoolshost/integrationTests/codeactions.integration.test.ts +++ b/test/lsptoolshost/integrationTests/codeactions.integration.test.ts @@ -14,7 +14,7 @@ import { openFileInWorkspaceAsync, } from './integrationHelpers'; -describe(`[${testAssetWorkspace.description}] Test Code Actions`, () => { +describe(`Code Actions Tests`, () => { beforeAll(async () => { await activateCSharpExtension(); }); diff --git a/test/lsptoolshost/integrationTests/codelens.integration.test.ts b/test/lsptoolshost/integrationTests/codelens.integration.test.ts index 23689a13d..26435533f 100644 --- a/test/lsptoolshost/integrationTests/codelens.integration.test.ts +++ b/test/lsptoolshost/integrationTests/codelens.integration.test.ts @@ -15,7 +15,7 @@ import { openFileInWorkspaceAsync, } from './integrationHelpers'; -describe(`[${testAssetWorkspace.description}] Test CodeLens`, () => { +describe(`CodeLens Tests`, () => { beforeAll(async () => { await activateCSharpExtension(); }); diff --git a/test/lsptoolshost/integrationTests/commandEnablement.integration.test.ts b/test/lsptoolshost/integrationTests/commandEnablement.integration.test.ts index 7b85c4f21..167f59aba 100644 --- a/test/lsptoolshost/integrationTests/commandEnablement.integration.test.ts +++ b/test/lsptoolshost/integrationTests/commandEnablement.integration.test.ts @@ -9,7 +9,7 @@ import { activateCSharpExtension } from './integrationHelpers'; import testAssetWorkspace from './testAssets/testAssetWorkspace'; import { CommonCommands, OmniSharpCommands, RoslynCommands } from './expectedCommands'; -describe(`Command Enablement: ${testAssetWorkspace.description}`, () => { +describe(`Command Enablement Tests`, () => { beforeAll(async () => { await activateCSharpExtension(); }); diff --git a/test/lsptoolshost/integrationTests/completion.integration.test.ts b/test/lsptoolshost/integrationTests/completion.integration.test.ts index 6ed3b93f2..fa3a15008 100644 --- a/test/lsptoolshost/integrationTests/completion.integration.test.ts +++ b/test/lsptoolshost/integrationTests/completion.integration.test.ts @@ -9,7 +9,7 @@ import { describe, beforeAll, beforeEach, afterAll, test, expect, afterEach } fr import testAssetWorkspace from './testAssets/testAssetWorkspace'; import { activateCSharpExtension, closeAllEditorsAsync, openFileInWorkspaceAsync } from './integrationHelpers'; -describe(`[${testAssetWorkspace.description}] Test Completion`, () => { +describe(`Completion Tests`, () => { beforeAll(async () => { await activateCSharpExtension(); }); diff --git a/test/lsptoolshost/integrationTests/documentDiagnostics.integration.test.ts b/test/lsptoolshost/integrationTests/documentDiagnostics.integration.test.ts index 502a8c553..6c8549ac3 100644 --- a/test/lsptoolshost/integrationTests/documentDiagnostics.integration.test.ts +++ b/test/lsptoolshost/integrationTests/documentDiagnostics.integration.test.ts @@ -7,13 +7,19 @@ import * as vscode from 'vscode'; import { describe, test, beforeAll, afterAll, expect, beforeEach, afterEach } from '@jest/globals'; import testAssetWorkspace from './testAssets/testAssetWorkspace'; import { AnalysisSetting } from '../../../src/lsptoolshost/buildDiagnosticsService'; -import * as integrationHelpers from './integrationHelpers'; import path = require('path'); import { getCode, setBackgroundAnalysisScopes, waitForExpectedDiagnostics } from './diagnosticsHelpers'; - -describe(`[${testAssetWorkspace.description}] Test diagnostics`, () => { +import { + activateCSharpExtension, + closeAllEditorsAsync, + describeIfCSharp, + openFileInWorkspaceAsync, +} from './integrationHelpers'; + +// Restarting the server is required for these tests, but not supported with C# Dev Kit. +describeIfCSharp(`Document Diagnostics Tests`, () => { beforeAll(async () => { - await integrationHelpers.activateCSharpExtension(); + await activateCSharpExtension(); }); afterAll(async () => { @@ -23,11 +29,11 @@ describe(`[${testAssetWorkspace.description}] Test diagnostics`, () => { describe('Open document diagnostics', () => { let file: vscode.Uri; beforeEach(async () => { - file = await integrationHelpers.openFileInWorkspaceAsync(path.join('src', 'app', 'diagnostics.cs')); + file = await openFileInWorkspaceAsync(path.join('src', 'app', 'diagnostics.cs')); }); afterEach(async () => { - await integrationHelpers.closeAllEditorsAsync(); + await closeAllEditorsAsync(); }); test('Compiler and analyzer diagnostics reported for open file when set to OpenFiles', async () => { diff --git a/test/lsptoolshost/integrationTests/documentSymbolProvider.integration.test.ts b/test/lsptoolshost/integrationTests/documentSymbolProvider.integration.test.ts index 404eaf11c..9e489bed9 100644 --- a/test/lsptoolshost/integrationTests/documentSymbolProvider.integration.test.ts +++ b/test/lsptoolshost/integrationTests/documentSymbolProvider.integration.test.ts @@ -9,7 +9,7 @@ import * as path from 'path'; import testAssetWorkspace from './testAssets/testAssetWorkspace'; import { activateCSharpExtension, closeAllEditorsAsync, openFileInWorkspaceAsync } from './integrationHelpers'; -describe(`DocumentSymbolProvider: ${testAssetWorkspace.description}`, () => { +describe(`Document Symbol Tests`, () => { let fileUri: vscode.Uri; beforeAll(async () => { diff --git a/test/lsptoolshost/integrationTests/formatting.integration.test.ts b/test/lsptoolshost/integrationTests/formatting.integration.test.ts index 654cdd48a..7e7f228ad 100644 --- a/test/lsptoolshost/integrationTests/formatting.integration.test.ts +++ b/test/lsptoolshost/integrationTests/formatting.integration.test.ts @@ -15,7 +15,7 @@ import { import { describe, beforeAll, beforeEach, afterAll, test, afterEach } from '@jest/globals'; import { formatDocumentAsync, formatOnTypeAsync, formatRangeAsync } from './formattingTestHelpers'; -describe(`[${testAssetWorkspace.description}] Formatting Tests`, () => { +describe(`Formatting Tests`, () => { beforeAll(async () => { await activateCSharpExtension(); }); diff --git a/test/lsptoolshost/integrationTests/formattingEditorConfig.integration.test.ts b/test/lsptoolshost/integrationTests/formattingEditorConfig.integration.test.ts index 998b1268f..70945a9e6 100644 --- a/test/lsptoolshost/integrationTests/formattingEditorConfig.integration.test.ts +++ b/test/lsptoolshost/integrationTests/formattingEditorConfig.integration.test.ts @@ -15,7 +15,7 @@ import { import { describe, beforeAll, beforeEach, afterAll, test, afterEach } from '@jest/globals'; import { formatDocumentAsync, formatOnTypeAsync, formatRangeAsync } from './formattingTestHelpers'; -describe(`[${testAssetWorkspace.description}] Formatting With EditorConfig Tests`, () => { +describe(`Formatting With EditorConfig Tests`, () => { beforeAll(async () => { await activateCSharpExtension(); }); diff --git a/test/lsptoolshost/integrationTests/gotoDefinition.integration.test.ts b/test/lsptoolshost/integrationTests/gotoDefinition.integration.test.ts index 348e714c9..0cf5fc6b2 100644 --- a/test/lsptoolshost/integrationTests/gotoDefinition.integration.test.ts +++ b/test/lsptoolshost/integrationTests/gotoDefinition.integration.test.ts @@ -11,10 +11,12 @@ import { closeAllEditorsAsync, findRangeOfString, openFileInWorkspaceAsync, + testIfCSharp, + testIfDevKit, } from './integrationHelpers'; import { describe, beforeAll, beforeEach, afterAll, test, expect, afterEach } from '@jest/globals'; -describe(`[${testAssetWorkspace.description}] Test Go To Definition`, () => { +describe(`Go To Definition Tests`, () => { beforeAll(async () => { await activateCSharpExtension(); }); @@ -61,7 +63,7 @@ describe(`[${testAssetWorkspace.description}] Test Go To Definition`, () => { await navigate(requestPosition, definitionList, 'diagnostics.cs'); }); - test('Navigates to definition in decompiled source', async () => { + testIfCSharp('Navigates to definition in decompiled source', async () => { await openFileInWorkspaceAsync(path.join('test', 'UnitTest1.cs')); // Get definitions @@ -84,7 +86,7 @@ describe(`[${testAssetWorkspace.description}] Test Go To Definition`, () => { ); }); - test('Navigates from definition in decompiled source goes to decompiled source', async () => { + testIfCSharp('Navigates from definition in decompiled source goes to decompiled source', async () => { await openFileInWorkspaceAsync(path.join('test', 'UnitTest1.cs')); // Get definitions @@ -209,6 +211,80 @@ describe(`[${testAssetWorkspace.description}] Test Go To Definition`, () => { new vscode.Range(new vscode.Position(14, 25), new vscode.Position(14, 35)) ); }); + + testIfDevKit('Navigates to definition in source link', async () => { + await openFileInWorkspaceAsync(path.join('test', 'UnitTest1.cs')); + + // Get definitions + const requestPosition = new vscode.Position(13, 9); + const definitionList = ( + await vscode.commands.executeCommand( + 'vscode.executeDefinitionProvider', + vscode.window.activeTextEditor!.document.uri, + requestPosition + ) + ); + expect(definitionList.length).toEqual(1); + const definitionPath = definitionList[0].uri; + expect(definitionPath.fsPath).toContain('FactAttribute.cs'); + + // Navigate + await navigate(requestPosition, definitionList, 'FactAttribute.cs'); + + // File should not be decompiled and should come from the symbol cache + expect(vscode.window.activeTextEditor?.document.getText()).not.toContain( + '// Decompiled with ICSharpCode.Decompiler' + ); + expect(vscode.window.activeTextEditor?.document.uri.path.toLowerCase()).toContain('symbolcache'); + }); + + testIfDevKit('Navigates from definition in source link source goes to source link', async () => { + await openFileInWorkspaceAsync(path.join('test', 'UnitTest1.cs')); + + // Get definitions + const requestPosition = new vscode.Position(13, 9); + const definitionList = ( + await vscode.commands.executeCommand( + 'vscode.executeDefinitionProvider', + vscode.window.activeTextEditor!.document.uri, + requestPosition + ) + ); + expect(definitionList.length).toEqual(1); + const definitionPath = definitionList[0].uri; + expect(definitionPath.fsPath).toContain('FactAttribute.cs'); + + // Navigate + await navigate(requestPosition, definitionList, 'FactAttribute.cs'); + // File should not be decompiled and should come from the symbol cache + expect(vscode.window.activeTextEditor?.document.getText()).not.toContain( + '// Decompiled with ICSharpCode.Decompiler' + ); + expect(vscode.window.activeTextEditor?.document.uri.path.toLowerCase()).toContain('symbolcache'); + + // Get definitions from inside FactAttribute.cs + // Rather than hardcoding a location, we find the location by searching the document as different SDKs may have different versions of the source. + const rangeOfDefinition = findRangeOfString(vscode.window.activeTextEditor!, 'XunitTestCaseDiscoverer')[0]; + const attributeUsageDefinition = ( + await vscode.commands.executeCommand( + 'vscode.executeDefinitionProvider', + vscode.window.activeTextEditor!.document.uri, + rangeOfDefinition.start + ) + ); + + expect(attributeUsageDefinition.length).toEqual(1); + const attributeDefinitionPath = attributeUsageDefinition[0].uri; + expect(attributeDefinitionPath.fsPath).toContain('XunitTestCaseDiscovererAttribute.cs'); + + // Navigate + await navigate(rangeOfDefinition.start, attributeUsageDefinition, 'XunitTestCaseDiscovererAttribute.cs'); + // File should not be decompiled and should come from the symbol cache + expect(vscode.window.activeTextEditor?.document.getText()).not.toContain( + '// Decompiled with ICSharpCode.Decompiler' + ); + expect(vscode.window.activeTextEditor?.document.uri.path.toLowerCase()).toContain('symbolcache'); + }); }); async function navigate( diff --git a/test/lsptoolshost/integrationTests/gotoImplementation.integration.test.ts b/test/lsptoolshost/integrationTests/gotoImplementation.integration.test.ts index 51a3c4400..f077b290b 100644 --- a/test/lsptoolshost/integrationTests/gotoImplementation.integration.test.ts +++ b/test/lsptoolshost/integrationTests/gotoImplementation.integration.test.ts @@ -14,7 +14,7 @@ import { } from './integrationHelpers'; import { describe, beforeAll, beforeEach, afterAll, test, expect, afterEach } from '@jest/globals'; -describe(`[${testAssetWorkspace.description}] Test Go To Implementation`, () => { +describe(`Go To Implementation Tests`, () => { beforeAll(async () => { await activateCSharpExtension(); }); diff --git a/test/lsptoolshost/integrationTests/hover.integration.test.ts b/test/lsptoolshost/integrationTests/hover.integration.test.ts index 46bbe7fac..ff9a3a318 100644 --- a/test/lsptoolshost/integrationTests/hover.integration.test.ts +++ b/test/lsptoolshost/integrationTests/hover.integration.test.ts @@ -10,7 +10,7 @@ import testAssetWorkspace from './testAssets/testAssetWorkspace'; import { activateCSharpExtension, closeAllEditorsAsync, openFileInWorkspaceAsync } from './integrationHelpers'; import { describe, beforeAll, beforeEach, afterAll, test, expect, afterEach } from '@jest/globals'; -describe(`[${testAssetWorkspace.description}] Hover Tests`, () => { +describe(`Hover Tests`, () => { beforeAll(async () => { await activateCSharpExtension(); }); diff --git a/test/lsptoolshost/integrationTests/integrationHelpers.ts b/test/lsptoolshost/integrationTests/integrationHelpers.ts index 6bf5a5273..4513f8b4d 100644 --- a/test/lsptoolshost/integrationTests/integrationHelpers.ts +++ b/test/lsptoolshost/integrationTests/integrationHelpers.ts @@ -5,12 +5,13 @@ import * as vscode from 'vscode'; import * as path from 'path'; +import * as semver from 'semver'; import { CSharpExtensionExports } from '../../../src/csharpExtensionExports'; import { existsSync } from 'fs'; import { ServerState } from '../../../src/lsptoolshost/serverStateChange'; import testAssetWorkspace from './testAssets/testAssetWorkspace'; import { EOL } from 'os'; -import { expect } from '@jest/globals'; +import { describe, expect, test } from '@jest/globals'; export async function activateCSharpExtension(): Promise { const csharpExtension = vscode.extensions.getExtension('ms-dotnettools.csharp'); @@ -18,14 +19,29 @@ export async function activateCSharpExtension(): Promise { throw new Error('Failed to find installation of ms-dotnettools.csharp'); } - // Run a restore manually to make sure the project is up to date since we don't have automatic restore. - await testAssetWorkspace.restoreLspToolsHostAsync(); - - // If the extension is already active, we need to restart it to ensure we start with a clean server state. - // For example, a previous test may have changed configs, deleted restored packages or made other changes that would put it in an invalid state. let shouldRestart = false; - if (csharpExtension.isActive) { - shouldRestart = true; + + const csDevKitExtension = vscode.extensions.getExtension('ms-dotnettools.csdevkit'); + if (usingDevKit()) { + if (!csDevKitExtension) { + throw new Error('Failed to find installation of ms-dotnettools.csdevkit'); + } + + // Ensure C# Dev Kit has a minimum version. + const version = csDevKitExtension.packageJSON.version; + const minimumVersion = '1.10.18'; + if (semver.lt(version, minimumVersion)) { + throw new Error(`C# Dev Kit version ${version} is below required minimum of ${minimumVersion}`); + } + } else { + // Run a restore manually to make sure the project is up to date since we don't have automatic restore. + await testAssetWorkspace.restoreLspToolsHostAsync(); + + // If the extension is already active, we need to restart it to ensure we start with a clean server state. + // For example, a previous test may have changed configs, deleted restored packages or made other changes that would put it in an invalid state. + if (csharpExtension.isActive) { + shouldRestart = true; + } } // Explicitly await the extension activation even if completed so that we capture any errors it threw during activation. @@ -39,6 +55,10 @@ export async function activateCSharpExtension(): Promise { } } +export function usingDevKit(): boolean { + return vscode.workspace.getConfiguration().get('dotnet.preferCSharpExtension') !== true; +} + export async function openFileInWorkspaceAsync(relativeFilePath: string): Promise { const root = vscode.workspace.workspaceFolders![0].uri.fsPath; const filePath = path.join(root, relativeFilePath); @@ -64,6 +84,10 @@ export async function revertActiveFile(): Promise { } export async function restartLanguageServer(): Promise { + if (usingDevKit()) { + // Restarting the server will cause us to lose all project information when using C# Dev Kit. + throw new Error('Cannot restart language server when using the C# Dev Kit'); + } const csharpExtension = vscode.extensions.getExtension('ms-dotnettools.csharp'); // Register to wait for initialization events and restart the server. const waitForInitialProjectLoad = new Promise((resolve, _) => { @@ -174,3 +198,16 @@ export async function expectText(document: vscode.TextDocument, expectedLines: s const expectedText = expectedLines.join(EOL); expect(document.getText()).toBe(expectedText); } + +export const describeIfCSharp = describeIf(!usingDevKit()); +export const describeIfDevKit = describeIf(usingDevKit()); +export const testIfCSharp = testIf(!usingDevKit()); +export const testIfDevKit = testIf(usingDevKit()); + +function describeIf(condition: boolean) { + return condition ? describe : describe.skip; +} + +function testIf(condition: boolean) { + return condition ? test : test.skip; +} diff --git a/test/lsptoolshost/integrationTests/lspInlayHints.integration.test.ts b/test/lsptoolshost/integrationTests/lspInlayHints.integration.test.ts index b3281667a..a85c1df20 100644 --- a/test/lsptoolshost/integrationTests/lspInlayHints.integration.test.ts +++ b/test/lsptoolshost/integrationTests/lspInlayHints.integration.test.ts @@ -10,7 +10,7 @@ import testAssetWorkspace from './testAssets/testAssetWorkspace'; import * as integrationHelpers from './integrationHelpers'; import { InlayHint, InlayHintKind, Position } from 'vscode-languageserver-protocol'; -describe(`[${testAssetWorkspace.description}] Test LSP Inlay Hints `, () => { +describe(`Inlay Hints Tests`, () => { beforeAll(async () => { const editorConfig = vscode.workspace.getConfiguration('editor'); await editorConfig.update('inlayHints.enabled', true); diff --git a/test/lsptoolshost/integrationTests/onAutoInsert.integration.test.ts b/test/lsptoolshost/integrationTests/onAutoInsert.integration.test.ts index 19eb9ecfa..8a91c10f8 100644 --- a/test/lsptoolshost/integrationTests/onAutoInsert.integration.test.ts +++ b/test/lsptoolshost/integrationTests/onAutoInsert.integration.test.ts @@ -16,7 +16,7 @@ import { } from './integrationHelpers'; import { describe, beforeAll, beforeEach, afterAll, test, expect, afterEach } from '@jest/globals'; -describe(`[${testAssetWorkspace.description}] Test OnAutoInsert`, () => { +describe(`OnAutoInsert Tests`, () => { beforeAll(async () => { await activateCSharpExtension(); }); diff --git a/test/lsptoolshost/integrationTests/references.integration.test.ts b/test/lsptoolshost/integrationTests/references.integration.test.ts index 7b9042e25..f17706c7e 100644 --- a/test/lsptoolshost/integrationTests/references.integration.test.ts +++ b/test/lsptoolshost/integrationTests/references.integration.test.ts @@ -14,7 +14,7 @@ import { } from './integrationHelpers'; import { describe, beforeAll, beforeEach, afterAll, test, expect, afterEach } from '@jest/globals'; -describe(`[${testAssetWorkspace.description}] Test Find References`, () => { +describe(`Find References Tests`, () => { beforeAll(async () => { await activateCSharpExtension(); }); diff --git a/test/lsptoolshost/integrationTests/signatureHelp.integration.test.ts b/test/lsptoolshost/integrationTests/signatureHelp.integration.test.ts index 6ac5f7aa0..92d0f4111 100644 --- a/test/lsptoolshost/integrationTests/signatureHelp.integration.test.ts +++ b/test/lsptoolshost/integrationTests/signatureHelp.integration.test.ts @@ -9,7 +9,7 @@ import testAssetWorkspace from './testAssets/testAssetWorkspace'; import { activateCSharpExtension, closeAllEditorsAsync, openFileInWorkspaceAsync } from './integrationHelpers'; import { describe, beforeAll, beforeEach, afterAll, test, expect, afterEach } from '@jest/globals'; -describe(`[${testAssetWorkspace.description}] Signature Help Tests`, () => { +describe(`Signature Help Tests`, () => { beforeAll(async () => { await activateCSharpExtension(); }); diff --git a/test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/.vscode/devkit_slnWithCsproj.code-workspace b/test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/.vscode/devkit_slnWithCsproj.code-workspace new file mode 100644 index 000000000..cb1af05bd --- /dev/null +++ b/test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/.vscode/devkit_slnWithCsproj.code-workspace @@ -0,0 +1,13 @@ +{ + "folders": [ + { + "path": ".." + } + ], + "settings": { + "dotnet.defaultSolution": "b_SecondInOrder_SlnFile.sln", + "dotnet.server.trace": "Trace", + "dotnet.server.useOmnisharp": false, + "dotnet.preferCSharpExtension": false, + } +} \ No newline at end of file diff --git a/test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/.vscode/omnisharp_lsp_slnWithCsproj.code-workspace b/test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/.vscode/omnisharp_lsp_slnWithCsproj.code-workspace deleted file mode 100644 index a2db107ff..000000000 --- a/test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/.vscode/omnisharp_lsp_slnWithCsproj.code-workspace +++ /dev/null @@ -1,14 +0,0 @@ -{ - "folders": [ - { - "path": ".." - } - ], - "settings": { - "omnisharp.path": "latest", - "omnisharp.enableRoslynAnalyzers": true, - "dotnet.server.useOmnisharp": true, - "omnisharp.enableLspDriver": true, - "dotnet.defaultSolution": "b_SecondInOrder_SlnFile.sln" - } -} \ No newline at end of file diff --git a/test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/.vscode/omnisharp_slnWithCsproj.code-workspace b/test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/.vscode/omnisharp_slnWithCsproj.code-workspace deleted file mode 100644 index 02f5acaa6..000000000 --- a/test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/.vscode/omnisharp_slnWithCsproj.code-workspace +++ /dev/null @@ -1,14 +0,0 @@ -{ - "folders": [ - { - "path": ".." - } - ], - "settings": { - "omnisharp.path": "latest", - "omnisharp.enableRoslynAnalyzers": true, - "dotnet.server.useOmnisharp": true, - "omnisharp.enableLspDriver": false, - "dotnet.defaultSolution": "b_SecondInOrder_SlnFile.sln", - } -} \ No newline at end of file diff --git a/test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/.vscode/lsp_tools_host_slnWithCsproj.code-workspace b/test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/.vscode/slnWithCsproj.code-workspace similarity index 84% rename from test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/.vscode/lsp_tools_host_slnWithCsproj.code-workspace rename to test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/.vscode/slnWithCsproj.code-workspace index cef8ba814..6da609d8b 100644 --- a/test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/.vscode/lsp_tools_host_slnWithCsproj.code-workspace +++ b/test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/.vscode/slnWithCsproj.code-workspace @@ -8,6 +8,6 @@ "dotnet.defaultSolution": "b_SecondInOrder_SlnFile.sln", "dotnet.server.trace": "Trace", "dotnet.server.useOmnisharp": false, - "omnisharp.enableLspDriver": false, + "dotnet.preferCSharpExtension": true, } } \ No newline at end of file diff --git a/test/lsptoolshost/integrationTests/testAssets/testAssets.ts b/test/lsptoolshost/integrationTests/testAssets/testAssets.ts index 965204fca..8e9b8d405 100644 --- a/test/lsptoolshost/integrationTests/testAssets/testAssets.ts +++ b/test/lsptoolshost/integrationTests/testAssets/testAssets.ts @@ -59,7 +59,7 @@ export class TestAssetWorkspace { try { await cleanUpRoutine(); - } catch (error) { + } catch (_error) { // Its possible that cleanup fails for locked files etc, for this reason retry is added. await sleep(); await cleanUpRoutine(); diff --git a/test/lsptoolshost/integrationTests/unitTests.integration.test.ts b/test/lsptoolshost/integrationTests/unitTests.integration.test.ts index 11e9fcd48..50d41afb6 100644 --- a/test/lsptoolshost/integrationTests/unitTests.integration.test.ts +++ b/test/lsptoolshost/integrationTests/unitTests.integration.test.ts @@ -5,17 +5,18 @@ import * as vscode from 'vscode'; import * as path from 'path'; -import { describe, beforeAll, beforeEach, afterAll, test, expect, afterEach } from '@jest/globals'; +import { beforeAll, beforeEach, afterAll, test, expect, afterEach } from '@jest/globals'; import testAssetWorkspace from './testAssets/testAssetWorkspace'; import { activateCSharpExtension, closeAllEditorsAsync, + describeIfCSharp, getCodeLensesAsync, openFileInWorkspaceAsync, } from './integrationHelpers'; import { TestProgress } from '../../../src/lsptoolshost/roslynProtocol'; -describe(`[${testAssetWorkspace.description}] Test Unit Testing`, () => { +describeIfCSharp(`Unit Testing Tests`, () => { beforeAll(async () => { await activateCSharpExtension(); }); diff --git a/test/lsptoolshost/integrationTests/workspaceDiagnostics.integration.test.ts b/test/lsptoolshost/integrationTests/workspaceDiagnostics.integration.test.ts index 47803daa4..234f87a4c 100644 --- a/test/lsptoolshost/integrationTests/workspaceDiagnostics.integration.test.ts +++ b/test/lsptoolshost/integrationTests/workspaceDiagnostics.integration.test.ts @@ -7,11 +7,13 @@ import * as vscode from 'vscode'; import { describe, test, expect, beforeAll, afterAll } from '@jest/globals'; import testAssetWorkspace from './testAssets/testAssetWorkspace'; import { AnalysisSetting } from '../../../src/lsptoolshost/buildDiagnosticsService'; -import * as integrationHelpers from './integrationHelpers'; import { getCode, setBackgroundAnalysisScopes, waitForExpectedDiagnostics } from './diagnosticsHelpers'; -describe(`[${testAssetWorkspace.description}] Test diagnostics`, () => { +import { activateCSharpExtension, describeIfCSharp } from './integrationHelpers'; + +// Restarting the server is required for these tests, but not supported with C# Dev Kit. +describeIfCSharp(`Workspace Diagnostic Tests`, () => { beforeAll(async () => { - await integrationHelpers.activateCSharpExtension(); + await activateCSharpExtension(); }); afterAll(async () => { diff --git a/test/lsptoolshost/unitTests/packageNlsJson.test.ts b/test/lsptoolshost/unitTests/packageNlsJson.test.ts index b4dd49fdc..dc3725ea6 100644 --- a/test/lsptoolshost/unitTests/packageNlsJson.test.ts +++ b/test/lsptoolshost/unitTests/packageNlsJson.test.ts @@ -21,7 +21,7 @@ describe('package.nls.json validation tests', () => { for (const key of keysWithURLExamples) { try { expect(packageNLSJson[key]).toContain('\u200b'); - } catch (e) { + } catch (_) { throw "Missing \\u200b in example urls, please run 'gulp fixLocURLs' and check in those changes."; } } diff --git a/test/omnisharp/omnisharpIntegrationTests/testAssets/BasicRazorApp2_1/.vscode/omnisharp_BasicRazorApp2_1.code-workspace b/test/omnisharp/omnisharpIntegrationTests/testAssets/BasicRazorApp2_1/.vscode/omnisharp_BasicRazorApp2_1.code-workspace index 52264bf4f..2803e626d 100644 --- a/test/omnisharp/omnisharpIntegrationTests/testAssets/BasicRazorApp2_1/.vscode/omnisharp_BasicRazorApp2_1.code-workspace +++ b/test/omnisharp/omnisharpIntegrationTests/testAssets/BasicRazorApp2_1/.vscode/omnisharp_BasicRazorApp2_1.code-workspace @@ -6,6 +6,7 @@ ], "settings": { "dotnet.server.useOmnisharp": true, - "omnisharp.enableLspDriver": false + "omnisharp.enableLspDriver": false, + "dotnet.preferCSharpExtension": true, } } \ No newline at end of file diff --git a/test/omnisharp/omnisharpIntegrationTests/testAssets/BasicRazorApp2_1/.vscode/omnisharp_lsp_BasicRazorApp2_1.code-workspace b/test/omnisharp/omnisharpIntegrationTests/testAssets/BasicRazorApp2_1/.vscode/omnisharp_lsp_BasicRazorApp2_1.code-workspace index 93e63a168..91aed1b9b 100644 --- a/test/omnisharp/omnisharpIntegrationTests/testAssets/BasicRazorApp2_1/.vscode/omnisharp_lsp_BasicRazorApp2_1.code-workspace +++ b/test/omnisharp/omnisharpIntegrationTests/testAssets/BasicRazorApp2_1/.vscode/omnisharp_lsp_BasicRazorApp2_1.code-workspace @@ -6,6 +6,7 @@ ], "settings": { "dotnet.server.useOmnisharp": true, - "omnisharp.enableLspDriver": true + "omnisharp.enableLspDriver": true, + "dotnet.preferCSharpExtension": true, } } \ No newline at end of file diff --git a/test/omnisharp/omnisharpIntegrationTests/testAssets/singleCsproj/.vscode/omnisharp_lsp_singleCsproj.code-workspace b/test/omnisharp/omnisharpIntegrationTests/testAssets/singleCsproj/.vscode/omnisharp_lsp_singleCsproj.code-workspace index d2bbe1696..c8bcfca06 100644 --- a/test/omnisharp/omnisharpIntegrationTests/testAssets/singleCsproj/.vscode/omnisharp_lsp_singleCsproj.code-workspace +++ b/test/omnisharp/omnisharpIntegrationTests/testAssets/singleCsproj/.vscode/omnisharp_lsp_singleCsproj.code-workspace @@ -8,6 +8,7 @@ "omnisharp.path": "latest", "omnisharp.enableRoslynAnalyzers": true, "omnisharp.enableLspDriver": true, - "dotnet.server.useOmnisharp": true + "dotnet.server.useOmnisharp": true, + "dotnet.preferCSharpExtension": true, } } \ No newline at end of file diff --git a/test/omnisharp/omnisharpIntegrationTests/testAssets/singleCsproj/.vscode/omnisharp_singleCsproj.code-workspace b/test/omnisharp/omnisharpIntegrationTests/testAssets/singleCsproj/.vscode/omnisharp_singleCsproj.code-workspace index 8bce15410..047b8152a 100644 --- a/test/omnisharp/omnisharpIntegrationTests/testAssets/singleCsproj/.vscode/omnisharp_singleCsproj.code-workspace +++ b/test/omnisharp/omnisharpIntegrationTests/testAssets/singleCsproj/.vscode/omnisharp_singleCsproj.code-workspace @@ -8,6 +8,7 @@ "omnisharp.path": "latest", "omnisharp.enableRoslynAnalyzers": true, "omnisharp.enableLspDriver": false, - "dotnet.server.useOmnisharp": true + "dotnet.server.useOmnisharp": true, + "dotnet.preferCSharpExtension": true, } } \ No newline at end of file diff --git a/test/omnisharp/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/.vscode/omnisharp_lsp_slnFilterWithCsproj.code-workspace b/test/omnisharp/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/.vscode/omnisharp_lsp_slnFilterWithCsproj.code-workspace index 3b81724d7..804fdce25 100644 --- a/test/omnisharp/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/.vscode/omnisharp_lsp_slnFilterWithCsproj.code-workspace +++ b/test/omnisharp/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/.vscode/omnisharp_lsp_slnFilterWithCsproj.code-workspace @@ -10,5 +10,6 @@ "omnisharp.enableRoslynAnalyzers": true, "dotnet.server.useOmnisharp": true, "omnisharp.enableLspDriver": true, + "dotnet.preferCSharpExtension": true, } } diff --git a/test/omnisharp/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/.vscode/omnisharp_slnFilterWithCsproj.code-workspace b/test/omnisharp/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/.vscode/omnisharp_slnFilterWithCsproj.code-workspace index 2b4d5a258..33ee62602 100644 --- a/test/omnisharp/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/.vscode/omnisharp_slnFilterWithCsproj.code-workspace +++ b/test/omnisharp/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/.vscode/omnisharp_slnFilterWithCsproj.code-workspace @@ -9,6 +9,7 @@ "omnisharp.path": "latest", "omnisharp.enableRoslynAnalyzers": true, "dotnet.server.useOmnisharp": true, - "omnisharp.enableLspDriver": false + "omnisharp.enableLspDriver": false, + "dotnet.preferCSharpExtension": true, } } diff --git a/test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithCsproj/.vscode/lsp_tools_host_slnWithCsproj.code-workspace b/test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithCsproj/.vscode/lsp_tools_host_slnWithCsproj.code-workspace index cef8ba814..46ef8b6ed 100644 --- a/test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithCsproj/.vscode/lsp_tools_host_slnWithCsproj.code-workspace +++ b/test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithCsproj/.vscode/lsp_tools_host_slnWithCsproj.code-workspace @@ -8,6 +8,7 @@ "dotnet.defaultSolution": "b_SecondInOrder_SlnFile.sln", "dotnet.server.trace": "Trace", "dotnet.server.useOmnisharp": false, - "omnisharp.enableLspDriver": false, + "omnisharp.enableLspDriver": false, + "dotnet.preferCSharpExtension": true, } } \ No newline at end of file diff --git a/test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithCsproj/.vscode/omnisharp_lsp_slnWithCsproj.code-workspace b/test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithCsproj/.vscode/omnisharp_lsp_slnWithCsproj.code-workspace index a2db107ff..bd81a9ff7 100644 --- a/test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithCsproj/.vscode/omnisharp_lsp_slnWithCsproj.code-workspace +++ b/test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithCsproj/.vscode/omnisharp_lsp_slnWithCsproj.code-workspace @@ -9,6 +9,7 @@ "omnisharp.enableRoslynAnalyzers": true, "dotnet.server.useOmnisharp": true, "omnisharp.enableLspDriver": true, - "dotnet.defaultSolution": "b_SecondInOrder_SlnFile.sln" + "dotnet.defaultSolution": "b_SecondInOrder_SlnFile.sln", + "dotnet.preferCSharpExtension": true, } } \ No newline at end of file diff --git a/test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithCsproj/.vscode/omnisharp_slnWithCsproj.code-workspace b/test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithCsproj/.vscode/omnisharp_slnWithCsproj.code-workspace index 02f5acaa6..3fa872aa9 100644 --- a/test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithCsproj/.vscode/omnisharp_slnWithCsproj.code-workspace +++ b/test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithCsproj/.vscode/omnisharp_slnWithCsproj.code-workspace @@ -10,5 +10,6 @@ "dotnet.server.useOmnisharp": true, "omnisharp.enableLspDriver": false, "dotnet.defaultSolution": "b_SecondInOrder_SlnFile.sln", + "dotnet.preferCSharpExtension": true, } } \ No newline at end of file diff --git a/test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithGenerator/.vscode/settings.json b/test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithGenerator/.vscode/settings.json index 16163b0cf..5ad5ec910 100644 --- a/test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithGenerator/.vscode/settings.json +++ b/test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithGenerator/.vscode/settings.json @@ -1,3 +1,4 @@ { - "dotnet.server.useOmnisharp": true + "dotnet.server.useOmnisharp": true, + "dotnet.preferCSharpExtension": true, } \ No newline at end of file diff --git a/test/omnisharp/omnisharpIntegrationTests/typeDefinitionProvider.test.ts b/test/omnisharp/omnisharpIntegrationTests/typeDefinitionProvider.test.ts index 3b4bb74dd..f0b450560 100644 --- a/test/omnisharp/omnisharpIntegrationTests/typeDefinitionProvider.test.ts +++ b/test/omnisharp/omnisharpIntegrationTests/typeDefinitionProvider.test.ts @@ -68,9 +68,9 @@ describeIfNotRazorOrGenerator(`${OmniSharpDefinitionProvider.name}: ${testAssetW ) ); expect(definitionList.length).toEqual(2); - expect(definitionList[0]).toBeDefined; + expect(definitionList[0]).toBeDefined(); expect(definitionList[0].uri.path).toContain('typeDefinition.cs'); - expect(definitionList[1]).toBeDefined; + expect(definitionList[1]).toBeDefined(); expect(definitionList[1].uri.path).toContain('typeDefinition.cs'); }); diff --git a/test/omnisharp/omnisharpUnitTests/logging/dotnetTestLoggerObserver.test.ts b/test/omnisharp/omnisharpUnitTests/logging/dotnetTestLoggerObserver.test.ts index dc01fc6bc..4de7ae08c 100644 --- a/test/omnisharp/omnisharpUnitTests/logging/dotnetTestLoggerObserver.test.ts +++ b/test/omnisharp/omnisharpUnitTests/logging/dotnetTestLoggerObserver.test.ts @@ -63,7 +63,7 @@ describe(`${DotNetTestLoggerObserver.name}`, () => { [new DotNetTestRunInContextStart('foo', 1, 2), new DotNetTestDebugInContextStart('foo', 1, 2)].forEach( (event: BaseEvent) => { test(`${event.constructor.name}: File name and line/column are logged`, () => { - expect(appendedMessage).toBeFalsy; + expect(appendedMessage).toBeFalsy(); observer.post(event); expect(appendedMessage).toContain('foo'); expect(appendedMessage).toContain('2'); diff --git a/test/omnisharp/omnisharpUnitTests/packages/fileDownloader.test.ts b/test/omnisharp/omnisharpUnitTests/packages/fileDownloader.test.ts index 73719d77e..15c4102d9 100644 --- a/test/omnisharp/omnisharpUnitTests/packages/fileDownloader.test.ts +++ b/test/omnisharp/omnisharpUnitTests/packages/fileDownloader.test.ts @@ -135,7 +135,7 @@ describe('FileDownloader', () => { ]; try { await DownloadFile(fileDescription, eventStream, networkSettingsProvider, getURL(errorUrlPath)); - } catch (error) { + } catch (_) { expect(eventBus.getEvents()).toStrictEqual(eventsSequence); } }); diff --git a/test/razor/razorIntegrationTests/testAssets/BasicRazorApp2_1/.vscode/lsp_tools_host_BasicRazorApp2_1.code-workspace b/test/razor/razorIntegrationTests/testAssets/BasicRazorApp2_1/.vscode/BasicRazorApp2_1.code-workspace similarity index 76% rename from test/razor/razorIntegrationTests/testAssets/BasicRazorApp2_1/.vscode/lsp_tools_host_BasicRazorApp2_1.code-workspace rename to test/razor/razorIntegrationTests/testAssets/BasicRazorApp2_1/.vscode/BasicRazorApp2_1.code-workspace index 18b2ef247..805d62e7e 100644 --- a/test/razor/razorIntegrationTests/testAssets/BasicRazorApp2_1/.vscode/lsp_tools_host_BasicRazorApp2_1.code-workspace +++ b/test/razor/razorIntegrationTests/testAssets/BasicRazorApp2_1/.vscode/BasicRazorApp2_1.code-workspace @@ -9,6 +9,7 @@ "dotnet.server.trace": "Trace", "dotnet.server.useOmnisharp": false, "omnisharp.enableLspDriver": false, - "razor.server.trace": "Trace" + "razor.server.trace": "Trace", + "dotnet.preferCSharpExtension": true, } } diff --git a/test/vscodeLauncher.ts b/test/vscodeLauncher.ts index 1b51df03a..13e6798aa 100644 --- a/test/vscodeLauncher.ts +++ b/test/vscodeLauncher.ts @@ -8,91 +8,85 @@ import * as path from 'path'; import { downloadAndUnzipVSCode, resolveCliArgsFromVSCodeExecutablePath, runTests } from '@vscode/test-electron'; import { execChildProcess } from '../src/common'; -function getSln(workspacePath: string): string | undefined { - if (workspacePath.endsWith('slnWithGenerator')) { - return 'slnWithGenerator.sln'; - } - return undefined; -} - -async function main() { - try { - const vscodeExecutablePath = await downloadAndUnzipVSCode('stable'); - const [cli, ...args] = resolveCliArgsFromVSCodeExecutablePath(vscodeExecutablePath); - - console.log('Display: ' + process.env.DISPLAY); - - const fullArgs = [...args, '--install-extension', 'ms-dotnettools.vscode-dotnet-runtime']; - - // Since we're using shell execute, spaces in the CLI path will get interpeted as args - // Therefore we wrap the CLI path in quotes as on MacOS the path can contain spaces. - const cliWrapped = `"${cli}"`; - console.log(`${cliWrapped} ${fullArgs}`); - - const result = cp.spawnSync(cliWrapped, fullArgs, { - encoding: 'utf-8', - stdio: 'inherit', - // Workaround as described in https://github.com/nodejs/node/issues/52554 - shell: true, - }); - if (result.error || result.status !== 0) { - throw new Error(`Failed to install the runtime extension: ${JSON.stringify(result)}`); - } - - // The folder containing the Extension Manifest package.json - // Passed to `--extensionDevelopmentPath` - const extensionDevelopmentPath = process.env.CODE_EXTENSIONS_PATH; - if (!extensionDevelopmentPath) { - throw new Error('Environment variable CODE_EXTENSIONS_PATH is empty'); - } - - // The path to the extension test runner script - // Passed to --extensionTestsPath - const extensionTestsPath = process.env.EXTENSIONS_TESTS_PATH; - - if (!extensionTestsPath) { - console.error('Empty extension tests path'); - process.exit(-1); +export async function prepareVSCodeAndExecuteTests( + extensionDevelopmentPath: string, + extensionTestsPath: string, + workspacePath: string, + userDataDir: string, + env: NodeJS.ProcessEnv +): Promise { + const vscodeExecutablePath = await downloadAndUnzipVSCode('stable'); + const [cli, ...args] = resolveCliArgsFromVSCodeExecutablePath(vscodeExecutablePath); + + console.log('Display: ' + env.DISPLAY); + + // Different test runs may want to have Dev Kit be active or in-active. + // Rather than having to uninstall Dev Kit between different test runs, we use workspace settings + // to control which extensions are active - and we always install Dev Kit. + const extensionsToInstall = [ + 'ms-dotnettools.vscode-dotnet-runtime', + 'ms-dotnettools.csharp', + 'ms-dotnettools.csdevkit', + ]; + + await installExtensions(extensionsToInstall, cli, args); + + // The folder containing the Extension Manifest package.json + // Passed to `--extensionDevelopmentPath` + env.CODE_EXTENSIONS_PATH = extensionDevelopmentPath; + + console.log(`workspace path = '${workspacePath}'`); + + const sln = getSln(workspacePath); + if (sln) { + // Run a build before the tests, to ensure that source generators are set up correctly + if (!process.env.DOTNET_ROOT) { + throw new Error('Environment variable DOTNET_ROOT is not set'); } - // The integration tests expect that the workspace to run the - // tests against is set in an environment variable. - const workspacePath = process.env.CODE_TESTS_WORKSPACE; + const dotnetPath = path.join(process.env.DOTNET_ROOT, 'dotnet'); + await execChildProcess(`${dotnetPath} build ${sln}`, workspacePath, process.env); + } - if (!workspacePath) { - console.error(`Empty workspace path`); - process.exit(-1); - } + // Download VS Code, unzip it and run the integration test + const exitCode = await runTests({ + vscodeExecutablePath: vscodeExecutablePath, + extensionDevelopmentPath: extensionDevelopmentPath, + extensionTestsPath: extensionTestsPath, + // Launch with info logging as anything else is way too verbose and will hide test results. + launchArgs: [workspacePath, '-n', '--log', 'info', '--user-data-dir', userDataDir], + extensionTestsEnv: env, + }); + + return exitCode; +} - console.log(`workspace path = '${workspacePath}'`); +async function installExtensions(extensionIds: string[], vscodeCli: string, vscodeArgs: string[]): Promise { + for (const extensionId of extensionIds) { + vscodeArgs.push('--install-extension', extensionId); + } - const sln = getSln(workspacePath); - if (sln) { - // Run a build before the tests, to ensure that source generators are set up correctly - if (!process.env.DOTNET_ROOT) { - throw new Error('Environment variable DOTNET_ROOT is not set'); - } + // Since we're using shell execute, spaces in the CLI path will get interpeted as args + // Therefore we wrap the CLI path in quotes as on MacOS the path can contain spaces. + const cliWrapped = `"${vscodeCli}"`; + console.log(`${cliWrapped} ${vscodeArgs}`); + + const result = cp.spawnSync(cliWrapped, vscodeArgs, { + encoding: 'utf-8', + stdio: 'inherit', + // Workaround as described in https://github.com/nodejs/node/issues/52554 + shell: true, + }); + if (result.error || result.status !== 0) { + throw new Error(`Failed to install the runtime extension: ${JSON.stringify(result)}`); + } - const dotnetPath = path.join(process.env.DOTNET_ROOT, 'dotnet'); - await execChildProcess(`${dotnetPath} build ${sln}`, workspacePath, process.env); - } + console.log(); +} - // Download VS Code, unzip it and run the integration test - const exitCode = await runTests({ - vscodeExecutablePath: vscodeExecutablePath, - extensionDevelopmentPath: extensionDevelopmentPath, - extensionTestsPath: extensionTestsPath, - // Launch with info logging as anything else is way too verbose and will hide test results. - launchArgs: [workspacePath, '-n', '--log', 'info'], - extensionTestsEnv: process.env, - }); - - process.exit(exitCode); - } catch (err) { - console.error(err); - console.error('Failed to run tests'); - process.exit(1); +function getSln(workspacePath: string): string | undefined { + if (workspacePath.endsWith('slnWithGenerator')) { + return 'slnWithGenerator.sln'; } + return undefined; } - -main();