From a0af7c58546b7ea933dd5819cf0d880cacf48795 Mon Sep 17 00:00:00 2001 From: bschnurr Date: Tue, 6 Jan 2026 15:48:31 -0800 Subject: [PATCH 01/59] add custom feeds --- build/NuGet.config | 11 ++++ build/azure-devdiv-pipeline.pre-release.yml | 21 +------- build/azure-devdiv-pipeline.stable.yml | 13 +---- build/sign.proj | 59 +++++++++++++++++++++ build/templates/publish.yml | 14 ++--- build/templates/setup.yml | 26 +++++++++ build/templates/sign.yml | 37 +++++++++---- 7 files changed, 130 insertions(+), 51 deletions(-) create mode 100644 build/NuGet.config create mode 100644 build/sign.proj create mode 100644 build/templates/setup.yml diff --git a/build/NuGet.config b/build/NuGet.config new file mode 100644 index 00000000..a3a2e4f4 --- /dev/null +++ b/build/NuGet.config @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/build/azure-devdiv-pipeline.pre-release.yml b/build/azure-devdiv-pipeline.pre-release.yml index 3ec92340..f409d31b 100644 --- a/build/azure-devdiv-pipeline.pre-release.yml +++ b/build/azure-devdiv-pipeline.pre-release.yml @@ -66,25 +66,7 @@ extends: artifactName: drop sbomEnabled: true steps: - - task: npmAuthenticate@0 - inputs: - workingFile: .npmrc - - - script: npm config get registry - displayName: Verify NPM Registry - - - task: NodeTool@0 - inputs: - versionSpec: '22.x' - checkLatest: true - displayName: Select Node 22 LTS - - - task: UsePythonVersion@0 - inputs: - versionSpec: '3.9' # note Install Python dependencies step below relies on Python 3.9 - addToPath: true - architecture: 'x64' - displayName: Select Python version + - template: build/templates/setup.yml@self - script: npm ci displayName: Install NPM dependencies @@ -113,6 +95,7 @@ extends: workingDirectory: $(Build.StagingDirectory)\drop signType: real verifySignature: true + teamName: $(TeamName) - ${{ if eq(parameters.publishExtension, true) }}: - template: build/templates/publish.yml@self diff --git a/build/azure-devdiv-pipeline.stable.yml b/build/azure-devdiv-pipeline.stable.yml index c60fdc0f..6c3ae0a2 100644 --- a/build/azure-devdiv-pipeline.stable.yml +++ b/build/azure-devdiv-pipeline.stable.yml @@ -59,17 +59,7 @@ extends: artifactName: drop sbomEnabled: true steps: - - task: NodeTool@0 - inputs: - versionSpec: '22.x' - checkLatest: true - displayName: Select Node 22 LTS - - task: UsePythonVersion@0 - inputs: - versionSpec: '3.9' # note Install Python dependencies step below relies on Python 3.9 - addToPath: true - architecture: 'x64' - displayName: Select Python version + - template: build/templates/setup.yml@self - script: npm ci displayName: Install NPM dependencies @@ -98,6 +88,7 @@ extends: workingDirectory: $(Build.StagingDirectory)\drop signType: real verifySignature: true + teamName: $(TeamName) - ${{ if eq(parameters.publishExtension, true) }}: - template: build/templates/publish.yml@self diff --git a/build/sign.proj b/build/sign.proj new file mode 100644 index 00000000..95ccd155 --- /dev/null +++ b/build/sign.proj @@ -0,0 +1,59 @@ + + + + + + + + + Debug + + .\ + + $(BaseOutputDirectory)/intermediate + $(BaseOutputDirectory) + + + + + + + + + + + + + + + + + + + + + + + + + + + VSCodePublisher + + + + + + + + + + + This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. + + + + + + + diff --git a/build/templates/publish.yml b/build/templates/publish.yml index 41672f3e..2e4764b7 100644 --- a/build/templates/publish.yml +++ b/build/templates/publish.yml @@ -39,9 +39,6 @@ parameters: - name: preRelease type: boolean default: false - - name: noVerify - type: boolean - default: true steps: # Node & vsce expected to be prepared by parent pipeline; omit local installation. @@ -89,17 +86,14 @@ steps: Write-Host "Listing publish folder contents: $root" Get-ChildItem -Recurse $root | Select-Object FullName,Length | Format-Table -AutoSize - $extraFlags = '' - if ('${{ parameters.noVerify }}' -eq 'True') { $extraFlags = "$extraFlags --noVerify" } - if ('${{ parameters.preRelease }}' -eq 'True') { Write-Host 'Publishing as pre-release' - # disabled for now; uncomment when ready - npx vsce publish --pat $aadToken --packagePath $vsixPath --manifestPath $manifestPath --signaturePath $signaturePath $extraFlags --pre-release + Write-Host "Executing: npx vsce publish --pat *** --packagePath $vsixPath --manifestPath $manifestPath --signaturePath $signaturePath --pre-release" + npx vsce publish --pat $aadToken --packagePath $vsixPath --manifestPath $manifestPath --signaturePath $signaturePath --pre-release } else { Write-Host 'Publishing as stable release' - # disabled for now; uncomment when ready - npx vsce publish --pat $aadToken --packagePath $vsixPath --manifestPath $manifestPath --signaturePath $signaturePath $extraFlags + Write-Host "Executing: npx vsce publish --pat *** --packagePath $vsixPath --manifestPath $manifestPath --signaturePath $signaturePath" + npx vsce publish --pat $aadToken --packagePath $vsixPath --manifestPath $manifestPath --signaturePath $signaturePath } if ($LASTEXITCODE -ne 0) { diff --git a/build/templates/setup.yml b/build/templates/setup.yml new file mode 100644 index 00000000..694218b0 --- /dev/null +++ b/build/templates/setup.yml @@ -0,0 +1,26 @@ +# DevDiv pipeline setup steps (no parameters) +steps: + - task: npmAuthenticate@0 + inputs: + workingFile: .npmrc + + - script: npm config get registry + displayName: Verify NPM Registry + + - task: NodeTool@0 + inputs: + versionSpec: '22.17.0' + checkLatest: true + displayName: Select Node 22 LTS + + - task: PipAuthenticate@1 + displayName: 'Pip Authenticate' + inputs: + artifactFeeds: 'DevDiv/debugpy' + + - task: UsePythonVersion@0 + inputs: + versionSpec: '3.9' # note Install Python dependencies step below relies on Python 3.9 + addToPath: true + architecture: 'x64' + displayName: Select Python version diff --git a/build/templates/sign.yml b/build/templates/sign.yml index 9122f3c1..6a139af3 100644 --- a/build/templates/sign.yml +++ b/build/templates/sign.yml @@ -2,11 +2,9 @@ # Usage Example: # - template: build/templates/sign.yml@self # parameters: -# vsixName: autopep8.vsix +# vsixName: black-formatter.vsix # workingDirectory: $(Build.SourcesDirectory) # signType: real -# Note: vsce CLI is invoked via 'npx vsce' (devDependency), no global install required. - parameters: - name: vsixName type: string @@ -29,11 +27,11 @@ parameters: - name: prepareRoot type: boolean default: true - # vsceVersion parameter removed; rely on pinned devDependency version via npx. + - name: teamName + type: string + default: VSCode-autopep8 steps: - # vsce CLI expected to be installed by parent pipeline; no local install here. - - task: NuGetToolInstaller@1 displayName: Install NuGet @@ -41,8 +39,10 @@ steps: displayName: Restore signing packages inputs: command: restore + feedsToUse: config restoreSolution: '$(Build.SourcesDirectory)/packages.config' restoreDirectory: '$(Build.SourcesDirectory)/packages' + nugetConfigPath: '$(Build.SourcesDirectory)/build/NuGet.config' - powershell: | New-Item -ItemType Directory -Path "$(Build.StagingDirectory)\drop" -Force | Out-Null; Copy-Item "$(Build.SourcesDirectory)\$(VsixName)" "$(Build.StagingDirectory)\drop\$(VsixName)" -Force; if (!(Test-Path "$(Build.StagingDirectory)\drop\$(VsixName)")) { Write-Error 'VSIX copy failed'; exit 1 }; Get-Item "$(Build.StagingDirectory)\drop\$(VsixName)" | Format-Table Name,Length,LastWriteTime -AutoSize @@ -69,15 +69,30 @@ steps: $sig = Join-Path $wd $signatureName if (!(Test-Path $sig)) { Write-Warning "Signature placeholder missing (will attempt signing anyway)." } - # Deprecated prepareRoot step removed: we now sign directly in workingDirectory by overriding BaseOutputDirectory. + # ✅ Added MicroBuildSigningPlugin for PME enforcement + - task: MicroBuildSigningPlugin@4 + displayName: Enable MicroBuild Signing + inputs: + signType: ${{ parameters.signType }} # 'real' or 'test' + zipSources: false + feedSource: 'https://devdiv.pkgs.visualstudio.com/DefaultCollection/_packaging/MicroBuildToolset/nuget/v3/index.json' + ConnectedServiceName: 'MicroBuild Signing Task (DevDiv)' + ConnectedPMEServiceName: 6cc74545-d7b9-4050-9dfa-ebefcc8961ea + env: + SYSTEM_ACCESSTOKEN: $(System.AccessToken) + TeamName: ${{ parameters.teamName }} - task: MSBuild@1 displayName: Run signing (MSBuild) inputs: solution: '$(Build.SourcesDirectory)/build/sign.proj' - msbuildArguments: '/verbosity:detailed /bl:"${{ parameters.workingDirectory }}\\signing.binlog" /p:SignType=${{ parameters.signType }} /p:BaseOutputDirectory=${{ parameters.workingDirectory }} /p:OutDir=${{ parameters.workingDirectory }} /p:IntermediateOutputPath=${{ parameters.workingDirectory }}\\intermediate' - - # No copy-back needed; signing outputs now land directly in workingDirectory. + msbuildArguments: > + /verbosity:detailed + /bl:"${{ parameters.workingDirectory }}\\signing.binlog" + /p:SignType=${{ parameters.signType }} + /p:BaseOutputDirectory=${{ parameters.workingDirectory }} + /p:OutDir=${{ parameters.workingDirectory }} + /p:IntermediateOutputPath=${{ parameters.workingDirectory }}\\intermediate - task: PowerShell@2 displayName: Post-sign inspection @@ -132,7 +147,7 @@ steps: if (!(Test-Path $vsix)) { Write-Error "Missing VSIX: $vsix"; exit 1 } if (!(Test-Path $manifest)) { Write-Error "Missing manifest: $manifest"; exit 1 } if (!(Test-Path $signature)) { Write-Error "Missing signature file: $signature"; exit 1 } - npx vsce verify-signature --packagePath "$vsix" --manifestPath "$manifest" --signaturePath "$signature" + npx @vscode/vsce verify-signature --packagePath "$vsix" --manifestPath "$manifest" --signaturePath "$signature" if ($LASTEXITCODE -ne 0) { Write-Error "vsce verify-signature failed with exit code $LASTEXITCODE" exit $LASTEXITCODE From c6c018b66a47c2a60bb706c6ede2e0f35eeed75c Mon Sep 17 00:00:00 2001 From: bschnurr Date: Wed, 7 Jan 2026 09:45:20 -0800 Subject: [PATCH 02/59] add back loc and telemetry files --- l10n/bundle.l10n.cs.json | 1 + l10n/bundle.l10n.de.json | 1 + l10n/bundle.l10n.es.json | 1 + l10n/bundle.l10n.fr.json | 1 + l10n/bundle.l10n.it.json | 1 + l10n/bundle.l10n.ja.json | 1 + l10n/bundle.l10n.ko.json | 1 + l10n/bundle.l10n.pl.json | 1 + l10n/bundle.l10n.pt-br.json | 1 + l10n/bundle.l10n.qps-ploc.json | 1 + l10n/bundle.l10n.ru.json | 1 + l10n/bundle.l10n.tr.json | 1 + l10n/bundle.l10n.zh-cn.json | 1 + l10n/bundle.l10n.zh-tw.json | 1 + package.nls.cs.json | 1 + package.nls.de.json | 1 + package.nls.es.json | 1 + package.nls.fr.json | 1 + package.nls.it.json | 1 + package.nls.ja.json | 1 + package.nls.ko.json | 1 + package.nls.pl.json | 1 + package.nls.pt-br.json | 1 + package.nls.qps-ploc.json | 1 + package.nls.ru.json | 1 + package.nls.tr.json | 1 + package.nls.zh-cn.json | 1 + package.nls.zh-tw.json | 1 + telemetry.json | 1 + 29 files changed, 29 insertions(+) create mode 100644 l10n/bundle.l10n.cs.json create mode 100644 l10n/bundle.l10n.de.json create mode 100644 l10n/bundle.l10n.es.json create mode 100644 l10n/bundle.l10n.fr.json create mode 100644 l10n/bundle.l10n.it.json create mode 100644 l10n/bundle.l10n.ja.json create mode 100644 l10n/bundle.l10n.ko.json create mode 100644 l10n/bundle.l10n.pl.json create mode 100644 l10n/bundle.l10n.pt-br.json create mode 100644 l10n/bundle.l10n.qps-ploc.json create mode 100644 l10n/bundle.l10n.ru.json create mode 100644 l10n/bundle.l10n.tr.json create mode 100644 l10n/bundle.l10n.zh-cn.json create mode 100644 l10n/bundle.l10n.zh-tw.json create mode 100644 package.nls.cs.json create mode 100644 package.nls.de.json create mode 100644 package.nls.es.json create mode 100644 package.nls.fr.json create mode 100644 package.nls.it.json create mode 100644 package.nls.ja.json create mode 100644 package.nls.ko.json create mode 100644 package.nls.pl.json create mode 100644 package.nls.pt-br.json create mode 100644 package.nls.qps-ploc.json create mode 100644 package.nls.ru.json create mode 100644 package.nls.tr.json create mode 100644 package.nls.zh-cn.json create mode 100644 package.nls.zh-tw.json create mode 100644 telemetry.json diff --git a/l10n/bundle.l10n.cs.json b/l10n/bundle.l10n.cs.json new file mode 100644 index 00000000..1d912032 --- /dev/null +++ b/l10n/bundle.l10n.cs.json @@ -0,0 +1 @@ +{"Attach to a local process":"Připojit k místnímu procesu","Attach to a remote debug server":"Připojit ke vzdálenému ladicímu serveru","Attach to process":"Připojit k procesu","Attach using Process ID":"Připojit přes ID procesu","Browse Files...":"Procházet soubory...","Browse your file system to find a Python file.":"Vyhledejte soubor Pythonu procházením systému souborů.","Change Python Interpreter":"Změnit interpret Pythonu","Command Line Arguments":"Argumenty příkazového řádku","Debug Configuration":"Ladit konfiguraci","Debug Django":"Ladění Django","Debug FastAPI":"Ladit FastAPI","Debug Flask":"Ladit Flask","Debug Module":"Ladící modul","Debug Pyramid":"Ladit Pyramid","Debug Stopped":"Ladění zastaveno","Debug a Python module by invoking it with '-m'":"Ladit modul Python jeho vyvoláním přes '-m'","Debug the currently active Python file":"Ladit aktuálně aktivní soubor Python","Debug the currently active Python file with arguments":"Ladění aktuálně aktivního souboru Pythonu s argumenty","Django":"Django","Do not show again":"Už nezobrazovat","Enables use of [no-config debugging](https://github.com/microsoft/vscode-python-debugger/wiki/No%E2%80%90Config-Debugging), `debugpy `, in the terminal.":"Povolí použití [no-config debugging](https://github.com/microsoft/vscode-python-debugger/wiki/No%E2%80%90Config-Debugging), `debugpy `, na terminálu.","Enter a Python module/package name":"Zadejte název modulu/balíčku Python","Enter a valid file path":"Zadejte platnou cestu k souboru","Enter a valid host name or IP address":"Zadejte platný název hostitele nebo IP adresu.","Enter a valid module name":"Zadejte platný název modulu","Enter a valid name":"Vložte platné jméno.","Enter a valid port number":"Zadejte platné číslo portu","Enter the command line arguments you want to pass to the program":"Zadejte argumenty příkazového řádku, které chcete programu předat.","Enter the path to app.py or select a file from the list.":"Zadejte cestu k app.py nebo vyberte soubor ze seznamu.","Enter the path to development.ini ({0} points to the root of the current workspace folder)":"Zadejte cestu k development.ini ({0} odkazuje na kořen aktuální složky pracovního prostoru).","Enter the path to manage.py or select a file from the list.":"Zadejte cestu k manage.py nebo vyberte soubor ze seznamu.","Enter the path to the application, e.g. 'main.py' or 'main'":"Zadejte cestu k aplikaci, např. main.py nebo main","Enter the port number that the debug server is listening on":"Zadejte číslo portu, ve kterém naslouchá ladící server","Failed to launch debugger for child process {0}":"Spouštění ladicího programu pro podřízený proces {0} se nezdařilo","FastAPI":"FastAPI","Flask":"Flask","Launch and debug a Django web application":"Spustit a ladit webovou aplikaci Django","Launch and debug a FastAPI web application":"Spustit a ladit webovou aplikaci FastAPI","Launch and debug a Flask web application":"Spustit a ladit webovou aplikaci Flask","Launch and debug a Pyramid web application":"Spustit a ladit webovou aplikaci Pyramid","Module":"Modul","More Info":"Další informace","No process selected":"Nevybral se žádný proces.","No, I will do it later":"Ano, chci upozornit","Open launch.json":"Otevřít soubor launch.json","Operating system '{0}' not supported.":"Operační systém {0} se nepodporuje.","Pyramid":"Pyramida","Python Debugger":"Ladicí program Pythonu","Python Debugger extension loading...":"Načítá se rozšíření Ladicího programu Python...","Python Debugger: Attach using Process Id":"Ladicí program Pythonu: Připojit přes ID procesu","Python Debugger: Current File":"Ladicí program Pythonu: Aktuální soubor","Python Debugger: Current File with Arguments":"Ladicí program Pythonu: Aktuální soubor s argumenty","Python Debugger: Django":"Ladicí program Pythonu: Django","Python Debugger: FastAPI":"Ladicí program Pythonu: FastAPI","Python Debugger: Flask":"Ladicí program Pythonu: Flask","Python Debugger: Module":"Ladicí program Pythonu: Modul","Python Debugger: Pyramid Application":"Ladicí program Pythonu: Aplikace Pyramid","Python Debugger: Remote Attach":"Ladicí program Pythonu: Vzdálené připojení","Python File":"Soubor Python","Python File with Arguments":"Soubor Pythonu s argumenty","Refresh process list":"Aktualizovat seznam procesů","Remote Attach":"Vzdálené připojení","Remote Debugging":"Vzdálené ladění","Select File":"Vybrat soubor","Select Python File":"Vybrat soubor Pythonu","Select Python Interpreter":"Vybrat interpret Pythonu","Select a Python Debugger debug configuration":"Vyberte konfiguraci ladění pro ladicí program Pythonu","Select a debug configuration":"Vyberte konfiguraci ladění","Select the process to attach to":"Vyberte proces, ke kterému se má program připojit.","Show as Hex":"Zobrazit jako šestnáctkovou hodnotu","The minimum supported Python version for the debugger extension is 3.9.":"Minimální podporovaná verze Pythonu pro rozšíření ladicího programu je 3.9.","We noticed you are attaching to ptvsd (Python debugger), which was deprecated on May 1st, 2020. Please switch to [debugpy](https://aka.ms/migrateToDebugpy).":"Všimli jsme si, že se připojujete k ptvsd (ladicí program Python), který je od 1. května 2020 zastaralý. Přejděte prosím na [debugpy](https://aka.ms/migrateToDebugpy).","You need to select a Python interpreter before you start debugging.\n\nTip: click on \"Select Interpreter\" in the status bar.":"Než spustíte ladění, musíte vybrat interpret Pythonu.\n\nTip: Klikněte na „Vybrat interpret“ ve stavovém řádku.","cwd:":"cwd:","enter-your-module-name":"zadejte-svůj-název-modulu"} diff --git a/l10n/bundle.l10n.de.json b/l10n/bundle.l10n.de.json new file mode 100644 index 00000000..ed0fd8b6 --- /dev/null +++ b/l10n/bundle.l10n.de.json @@ -0,0 +1 @@ +{"Attach to a local process":"An einen lokalen Prozess anhängen","Attach to a remote debug server":"An einen Remote-Debug-Server anhängen","Attach to process":"An Prozess anhängen","Attach using Process ID":"Mit Prozess-ID anhängen","Browse Files...":"Dateien durchsuchen...","Browse your file system to find a Python file.":"Durchsuchen Sie Ihr Dateisystem nach einer Python-Datei.","Change Python Interpreter":"Python-Interpreter ändern","Command Line Arguments":"Befehlszeilenargumente","Debug Configuration":"Konfiguration debuggen","Debug Django":"Django debuggen","Debug FastAPI":"FastAPI debuggen","Debug Flask":"Flask debuggen","Debug Module":"Debuggen-Modul","Debug Pyramid":"Pyramide debuggen","Debug Stopped":"Debuggen beendet","Debug a Python module by invoking it with '-m'":"Debuggen Sie ein Python-Modul, indem Sie es mit „-m“ aufrufen.","Debug the currently active Python file":"Debuggen Sie die derzeit aktive Python-Datei","Debug the currently active Python file with arguments":"Debuggen Sie die derzeit aktive Python-Datei mit Argumenten.","Django":"Django","Do not show again":"Nicht mehr anzeigen","Enables use of [no-config debugging](https://github.com/microsoft/vscode-python-debugger/wiki/No%E2%80%90Config-Debugging), `debugpy `, in the terminal.":"Aktiviert die Verwendung von [no-config debugging](https://github.com/microsoft/vscode-python-debugger/wiki/No%E2%80%90Config-Debugging), \"debugpy \" im Terminal.","Enter a Python module/package name":"Geben Sie einen Python-Modul-/Paketnamen ein","Enter a valid file path":"Geben Sie einen gültigen Dateipfad ein","Enter a valid host name or IP address":"Geben Sie einen gültigen Hostnamen oder eine gültige IP-Adresse ein.","Enter a valid module name":"Geben Sie einen gültigen Modulnamen ein","Enter a valid name":"Geben Sie einen gültigen Namen ein","Enter a valid port number":"Geben Sie eine gültige Portnummer ein","Enter the command line arguments you want to pass to the program":"Geben Sie die Befehlszeilenargumente ein, die an das Programm übergeben werden.","Enter the path to app.py or select a file from the list.":"Geben Sie den Pfad zum app.py ein, oder wählen Sie eine Datei aus der Liste aus.","Enter the path to development.ini ({0} points to the root of the current workspace folder)":"Geben Sie den Pfad zu development.ini ein ({0} zeigt auf das Stammverzeichnis des aktuellen Arbeitsbereichsordners)","Enter the path to manage.py or select a file from the list.":"Geben Sie den Pfad zum manage.py ein, oder wählen Sie eine Datei aus der Liste aus.","Enter the path to the application, e.g. 'main.py' or 'main'":"Geben Sie den Pfad zur Anwendung ein, z. 'main.py' oder 'main'","Enter the port number that the debug server is listening on":"Geben Sie die Portnummer ein, die der Debug-Server überwacht","Failed to launch debugger for child process {0}":"Fehler beim Starten des Debuggers für den untergeordneten Prozess {0}","FastAPI":"FastAPI","Flask":"Flask","Launch and debug a Django web application":"Starten und debuggen Sie eine Django-Webanwendung","Launch and debug a FastAPI web application":"Starten und debuggen Sie eine FastAPI-Webanwendung","Launch and debug a Flask web application":"Starten und debuggen Sie eine Flask-Webanwendung","Launch and debug a Pyramid web application":"Starten und debuggen Sie eine Pyramid-Webanwendung","Module":"Modul","More Info":"Weitere Info","No process selected":"Kein Prozess ausgewählt","No, I will do it later":"Nein, mache ich später","Open launch.json":"launch.json öffnen","Operating system '{0}' not supported.":"Betriebssystem '{0}' wird nicht unterstützt.","Pyramid":"Pyramide","Python Debugger":"Python-Debugger","Python Debugger extension loading...":"Python-Debuggererweiterung wird geladen...","Python Debugger: Attach using Process Id":"Python-Debugger: Über Prozess-ID anfügen","Python Debugger: Current File":"Python-Debugger: Aktuelle Datei","Python Debugger: Current File with Arguments":"Python-Debugger: Aktuelle Datei mit Argumenten","Python Debugger: Django":"Python-Debugger: Django","Python Debugger: FastAPI":"Python-Debugger: FastAPI","Python Debugger: Flask":"Python-Debugger: Flask","Python Debugger: Module":"Python-Debugger: Modul","Python Debugger: Pyramid Application":"Python-Debugger: Pyramid-Anwendung","Python Debugger: Remote Attach":"Python-Debugger: Remoteanfügung","Python File":"Python-Datei","Python File with Arguments":"Python-Datei mit Argumenten","Refresh process list":"Prozessliste aktualisieren","Remote Attach":"Remoteanfügung","Remote Debugging":"Remotedebuggen","Select File":"Datei auswählen","Select Python File":"Python-Datei auswählen","Select Python Interpreter":"Python-Interpreter auswählen","Select a Python Debugger debug configuration":"Debugkonfiguration für Python-Debugger auswählen","Select a debug configuration":"Debugkonfiguration auswählen","Select the process to attach to":"Prozess auswählen, an den angefügt werden soll","Show as Hex":"Als Hex anzeigen","The minimum supported Python version for the debugger extension is 3.9.":"Die minimale unterstützte Python-Version für die Debuggererweiterung ist 3.9.","We noticed you are attaching to ptvsd (Python debugger), which was deprecated on May 1st, 2020. Please switch to [debugpy](https://aka.ms/migrateToDebugpy).":"Wir haben festgestellt, dass Sie ptvsd (Python-Debugger) anhängen, das am 1. Mai 2020 veraltet ist. Bitte wechseln Sie zu [debugpy](https://aka.ms/migrateToDebugpy).","You need to select a Python interpreter before you start debugging.\n\nTip: click on \"Select Interpreter\" in the status bar.":"Sie müssen einen Python-Interpreter auswählen, bevor Sie mit dem Debuggen beginnen.\n\nTipp: Klicken Sie in der Statusleiste auf „Interpreter auswählen“.","cwd:":"сwd:","enter-your-module-name":"Geben Sie Ihren Modulnamen ein"} diff --git a/l10n/bundle.l10n.es.json b/l10n/bundle.l10n.es.json new file mode 100644 index 00000000..90592111 --- /dev/null +++ b/l10n/bundle.l10n.es.json @@ -0,0 +1 @@ +{"Attach to a local process":"Asociar a un proceso emulador local","Attach to a remote debug server":"Asociar a un servidor de depuración remoto","Attach to process":"Asociar al proceso","Attach using Process ID":"Adjuntar mediante un id. de proceso","Browse Files...":"Examinar archivos...","Browse your file system to find a Python file.":"Examine el sistema de archivos para buscar un archivo de Python.","Change Python Interpreter":"Cambiar intérprete de Python","Command Line Arguments":"Argumentos de la línea de comandos","Debug Configuration":"Configuración de depuración","Debug Django":"Depurar Django","Debug FastAPI":"Depurar FastAPI","Debug Flask":"Depurar Flask","Debug Module":"Módulo de depuración","Debug Pyramid":"Depurar Pyramid","Debug Stopped":"Depuración detenida","Debug a Python module by invoking it with '-m'":"Depuración de un módulo de Python invocándolo con \\\"-m\\\"","Debug the currently active Python file":"Depurar el archivo de Python activo actualmente","Debug the currently active Python file with arguments":"Depurar el archivo de Python activo actualmente con argumentos","Django":"Django","Do not show again":"No volver a mostrar","Enables use of [no-config debugging](https://github.com/microsoft/vscode-python-debugger/wiki/No%E2%80%90Config-Debugging), `debugpy `, in the terminal.":"Habilita el uso de [no-config debugging](https://github.com/microsoft/vscode-python-debugger/wiki/No%E2%80%90Config-Debugging), 'debugpy ', en el terminal.","Enter a Python module/package name":"Escriba un nombre de módulo o paquete de Python","Enter a valid file path":"Escriba una ruta de acceso de archivo válida","Enter a valid host name or IP address":"Escribir un nombre o dirección IP de host válidos","Enter a valid module name":"Escriba un nombre de módulo válido","Enter a valid name":"Especifique un nombre válido","Enter a valid port number":"Escriba un número de puerto válido.","Enter the command line arguments you want to pass to the program":"Escriba los argumentos de la línea de comandos que desea pasar al programa","Enter the path to app.py or select a file from the list.":"Escriba la ruta de acceso a app.py o seleccione un archivo de la lista.","Enter the path to development.ini ({0} points to the root of the current workspace folder)":"Escriba la ruta de acceso a development.ini ({0} apunta a la raíz de la carpeta del área de trabajo actual)","Enter the path to manage.py or select a file from the list.":"Escriba la ruta de acceso a manage.py o seleccione un archivo de la lista.","Enter the path to the application, e.g. 'main.py' or 'main'":"Escriba la ruta de acceso a la aplicación; por ejemplo, \\\"main.py\\\" o \\\"main\\\".","Enter the port number that the debug server is listening on":"Escriba el número de puerto en el que escucha el servidor de depuración.","Failed to launch debugger for child process {0}":"No se pudo iniciar el depurador para el {0} de procesos secundarios","FastAPI":"FastAPI","Flask":"Flask","Launch and debug a Django web application":"Inicio y depuración de una aplicación web Django","Launch and debug a FastAPI web application":"Iniciar y depurar una aplicación web FastAPI","Launch and debug a Flask web application":"Inicio y depuración de una aplicación web de Flask","Launch and debug a Pyramid web application":"Inicio y depuración de una aplicación web Pyramid","Module":"Módulo","More Info":"Más información","No process selected":"No se ha seleccionado ningún proceso","No, I will do it later":"No, lo haré más tarde","Open launch.json":"Abrir launch.json","Operating system '{0}' not supported.":"No se admite el sistema operativo \\\"{0}\\\".","Pyramid":"Pyramid","Python Debugger":"Depurador de Python","Python Debugger extension loading...":"Cargando la extensión del depurador de Python...","Python Debugger: Attach using Process Id":"Depurador de Python: Adjuntar mediante un id. de proceso","Python Debugger: Current File":"Depurador de Python: Archivo actual","Python Debugger: Current File with Arguments":"Depurador de Python: Archivo actual con argumentos","Python Debugger: Django":"Depurador de Python: Django","Python Debugger: FastAPI":"Depurador de Python: FastAPI","Python Debugger: Flask":"Depurador de Python: Flask","Python Debugger: Module":"Depurador de Python: Módulo","Python Debugger: Pyramid Application":"Depurador de Python: Aplicación Pyramid","Python Debugger: Remote Attach":"Depurador de Python: Conexión remota","Python File":"Archivo de Python","Python File with Arguments":"Archivo de Python con argumentos","Refresh process list":"Actualizar la lista de procesos","Remote Attach":"Conexión remota","Remote Debugging":"Depuración remota","Select File":"Seleccionar archivo","Select Python File":"Seleccionar archivo de Python","Select Python Interpreter":"Seleccionar un intérprete de Python","Select a Python Debugger debug configuration":"Seleccionar una configuración de depuración del depurador de Python","Select a debug configuration":"Seleccione una configuración de depuración","Select the process to attach to":"Seleccione el proceso al que debe asociarse","Show as Hex":"Mostrar como hexadecimal","The minimum supported Python version for the debugger extension is 3.9.":"La versión mínima admitida de Python para la extensión del depurador es la 3.9.","We noticed you are attaching to ptvsd (Python debugger), which was deprecated on May 1st, 2020. Please switch to [debugpy](https://aka.ms/migrateToDebugpy).":"Hemos observado que está adjuntando a ptvsd (depurador de Python), que quedó en desuso el 1 de mayo de 2020. Cambie a [debugpy](https://aka.ms/migrateToDebugpy).","You need to select a Python interpreter before you start debugging.\n\nTip: click on \"Select Interpreter\" in the status bar.":"Debe seleccionar un intérprete de Python antes de iniciar la depuración.\n\nSugerencia: haga clic en \"Seleccionar intérprete\" en la barra de estado.","cwd:":"cwd:","enter-your-module-name":"escriba-el-nombre-de-su-módulo"} diff --git a/l10n/bundle.l10n.fr.json b/l10n/bundle.l10n.fr.json new file mode 100644 index 00000000..e89fbea8 --- /dev/null +++ b/l10n/bundle.l10n.fr.json @@ -0,0 +1 @@ +{"Attach to a local process":"Attacher à un processus local","Attach to a remote debug server":"Attacher à un serveur de débogage distant","Attach to process":"Attacher au processus","Attach using Process ID":"Attacher à l’aide de l’ID de processus","Browse Files...":"Parcourir les fichiers...","Browse your file system to find a Python file.":"Parcourez votre système de fichiers pour trouver un fichier Python.","Change Python Interpreter":"Modifier l’interpréteur Python","Command Line Arguments":"Arguments de la ligne de commande","Debug Configuration":"Configuration du débogage","Debug Django":"Déboguer l'application Django","Debug FastAPI":"Déboguer FastAPI","Debug Flask":"Déboguer Flask","Debug Module":"Déboguer le module","Debug Pyramid":"Déboguer Pyramid","Debug Stopped":"Débogage arrêté","Debug a Python module by invoking it with '-m'":"Déboguer un module Python en l’appelant avec '-m'","Debug the currently active Python file":"Déboguer le fichier Python actuellement actif","Debug the currently active Python file with arguments":"Déboguer le fichier Python actuellement actif avec des arguments","Django":"Django","Do not show again":"Ne plus afficher","Enables use of [no-config debugging](https://github.com/microsoft/vscode-python-debugger/wiki/No%E2%80%90Config-Debugging), `debugpy `, in the terminal.":"Permet d’activer l’utilisation du [débogage sans configuration](https://github.com/microsoft/vscode-python-debugger/wiki/No%E2%80%90Config-Debugging), `debugpy `, dans le terminal.","Enter a Python module/package name":"Entrer un nom de module/package Python","Enter a valid file path":"Entrez un chemin de fichier valide","Enter a valid host name or IP address":"Entrer un nom d’hôte ou une adresse IP valide","Enter a valid module name":"Entrez un nom de module valide","Enter a valid name":"Entrez un nom valide.","Enter a valid port number":"Entrez un numéro de port valide.","Enter the command line arguments you want to pass to the program":"Entrez les arguments de ligne de commande que vous souhaitez transmettre au programme","Enter the path to app.py or select a file from the list.":"Entrez le chemin d’accès à app.py ou sélectionnez un fichier dans la liste.","Enter the path to development.ini ({0} points to the root of the current workspace folder)":"Entrez le chemin d’accès au fichier development.ini ({0} pointe vers la racine du dossier d’espace de travail actuel)","Enter the path to manage.py or select a file from the list.":"Entrez le chemin d’accès à manage.py ou sélectionnez un fichier dans la liste.","Enter the path to the application, e.g. 'main.py' or 'main'":"Entrez le chemin d’accès à l’application, par ex., « main.py » ou « main »","Enter the port number that the debug server is listening on":"Entrez le numéro de port sur lequel le serveur de débogage écoute","Failed to launch debugger for child process {0}":"Échec du lancement du débogueur pour le processus enfant {0}","FastAPI":"FastAPI","Flask":"Flask","Launch and debug a Django web application":"Lancer et déboguer une application web Django","Launch and debug a FastAPI web application":"Lancer et déboguer une application web FastAPI","Launch and debug a Flask web application":"Lancer et déboguer une application web Flask","Launch and debug a Pyramid web application":"Lancer et déboguer une application web Pyramid","Module":"Module","More Info":"Informations supplémentaires","No process selected":"Aucun processus sélectionné","No, I will do it later":"Non, je le fais plus tard","Open launch.json":"Ouvrir launch.json","Operating system '{0}' not supported.":"Le système d’exploitation «{0}» n’est pas pris en charge.","Pyramid":"Pyramide","Python Debugger":"Débogueur Python","Python Debugger extension loading...":"Chargement de l’extension du débogueur Python...","Python Debugger: Attach using Process Id":"Débogueur Python : Joindre à l'aide de l'ID de processus","Python Debugger: Current File":"Débogueur Python : Fichier actuel","Python Debugger: Current File with Arguments":"Débogueur Python : Fichier actuel avec arguments","Python Debugger: Django":"Débogueur Python : Django","Python Debugger: FastAPI":"Débogueur Python : FastAPI","Python Debugger: Flask":"Débogueur Python : Flask","Python Debugger: Module":"Débogueur Python : Module","Python Debugger: Pyramid Application":"Débogueur Python : Application Pyramide","Python Debugger: Remote Attach":"Débogueur Python : Attachement à distance","Python File":"Fichier Python","Python File with Arguments":"Fichier Python avec arguments","Refresh process list":"Actualiser la liste des processus","Remote Attach":"Attachement distant","Remote Debugging":"Débogage distant","Select File":"Sélectionner un fichier","Select Python File":"Sélectionner un fichier Python","Select Python Interpreter":"Sélectionner l’interpréteur Python","Select a Python Debugger debug configuration":"Sélectionnez une configuration de débogage du débogueur Python","Select a debug configuration":"Sélectionnez une configuration de débogage","Select the process to attach to":"Sélectionner le processus à attacher","Show as Hex":"Afficher en tant que hexadécimal","The minimum supported Python version for the debugger extension is 3.9.":"La version minimale prise en charge par Python pour l’extension du débogueur est la 3.9.","We noticed you are attaching to ptvsd (Python debugger), which was deprecated on May 1st, 2020. Please switch to [debugpy](https://aka.ms/migrateToDebugpy).":"Nous avons remarqué que vous vous attachiez à ptvsd (débogueur Python), qui a été déprécié le 1er mai 2020. Basculez vers [debugpy](https://aka.ms/migrateToDebugpy).","You need to select a Python interpreter before you start debugging.\n\nTip: click on \"Select Interpreter\" in the status bar.":"Vous devez sélectionner un interpréteur Python avant de commencer le débogage. \n\nConseil : cliquez sur « Sélectionner un Interpréteur » dans la barre d’état.","cwd:":"cwd :","enter-your-module-name":"enter-your-module-name"} diff --git a/l10n/bundle.l10n.it.json b/l10n/bundle.l10n.it.json new file mode 100644 index 00000000..01d9e925 --- /dev/null +++ b/l10n/bundle.l10n.it.json @@ -0,0 +1 @@ +{"Attach to a local process":"Consente il collegamento a un processo locale","Attach to a remote debug server":"Consente il collegamento a un server di debug remoto","Attach to process":"Collega a processo","Attach using Process ID":"Collegare tramite ID processo","Browse Files...":"Sfoglia file...","Browse your file system to find a Python file.":"Esplora il file system per individuare un file Python.","Change Python Interpreter":"Modifica interprete Python","Command Line Arguments":"Argomenti della riga di comando","Debug Configuration":"Configurazione di debug","Debug Django":"Eseguire il debug di Django","Debug FastAPI":"Eseguire il debug di FastAPI","Debug Flask":"Esegui il debug di Flask","Debug Module":"Modulo di debug","Debug Pyramid":"Esegui il debug di Pyramid","Debug Stopped":"Debug interrotto","Debug a Python module by invoking it with '-m'":"Eseguire il debug di un modulo Python richiamandolo con '-m'","Debug the currently active Python file":"Eseguire il debug del file Python attivo al momento","Debug the currently active Python file with arguments":"Esegui il debug del file Python attualmente attivo con argomenti","Django":"Django","Do not show again":"Non visualizzare più","Enables use of [no-config debugging](https://github.com/microsoft/vscode-python-debugger/wiki/No%E2%80%90Config-Debugging), `debugpy `, in the terminal.":"Abilita l'uso di [debug senza configurazione](https://github.com/microsoft/vscode-python-debugger/wiki/No%E2%80%90Config-Debugging), 'debugpy ' nel terminale.","Enter a Python module/package name":"Immettere un nome del modulo/pacchetto Python","Enter a valid file path":"Immettere un percorso di file valido","Enter a valid host name or IP address":"Immettere un nome host o un indirizzo IP valido","Enter a valid module name":"Immettere un nome del modulo valido","Enter a valid name":"Immettere un nome valido.","Enter a valid port number":"Immettere un numero di porta valido","Enter the command line arguments you want to pass to the program":"Immettere gli argomenti della riga di comando da passare al programma","Enter the path to app.py or select a file from the list.":"Immettere il percorso ad app.py o selezionare un file dall'elenco.","Enter the path to development.ini ({0} points to the root of the current workspace folder)":"`Immettere il percorso di development.ini ({0} punta alla radice della cartella dell'area di lavoro corrente)","Enter the path to manage.py or select a file from the list.":"Immettere il percorso a manage.py o selezionare un file dall'elenco.","Enter the path to the application, e.g. 'main.py' or 'main'":"Immettere il percorso dell'applicazione, ad esempio 'main.py' o 'main'","Enter the port number that the debug server is listening on":"Immettere il numero di porta di cui il server di debug è in ascolto","Failed to launch debugger for child process {0}":"Non è stato possibile avviare il debugger per il processo figlio {0}","FastAPI":"FastAPI","Flask":"Flask","Launch and debug a Django web application":"Avviare ed eseguire il debug di un'applicazione Web Django","Launch and debug a FastAPI web application":"Avviare ed eseguire il debug di un'applicazione Web FastAPI","Launch and debug a Flask web application":"Avviare ed eseguire il debug di un'applicazione Web Flask","Launch and debug a Pyramid web application":"Avviare ed eseguire il debug di un'applicazione Web Pyramid","Module":"Modulo","More Info":"Altre informazioni","No process selected":"Non è stato selezionato alcun processo","No, I will do it later":"No, lo farò in seguito","Open launch.json":"Apri launch.json","Operating system '{0}' not supported.":"Il sistema operativo '{0}' non è supportato.","Pyramid":"Pyramid","Python Debugger":"Debugger Python","Python Debugger extension loading...":"Caricamento dell'estensione del debugger Python in corso...","Python Debugger: Attach using Process Id":"Debugger Python: Collegare tramite ID processo","Python Debugger: Current File":"Debugger Python: File corrente","Python Debugger: Current File with Arguments":"Debugger Python: File corrente con argomenti","Python Debugger: Django":"Debugger Python: Django","Python Debugger: FastAPI":"Debugger Python: FastAPI","Python Debugger: Flask":"Debugger Python: Flask","Python Debugger: Module":"Debugger Python: Modulo","Python Debugger: Pyramid Application":"Debugger Python: Applicazione Pyramid","Python Debugger: Remote Attach":"Debugger Python: Collegamento remoto","Python File":"File Python","Python File with Arguments":"File Python con argomenti","Refresh process list":"Aggiornare l'elenco dei processi","Remote Attach":"Collegamento remoto","Remote Debugging":"Debug remoto","Select File":"Seleziona file","Select Python File":"Seleziona file Python","Select Python Interpreter":"È possibile selezionare l'interprete Python","Select a Python Debugger debug configuration":"Selezionare una configurazione di debug per il debugger Python","Select a debug configuration":"Selezionare una configurazione di debug","Select the process to attach to":"Selezionare il processo a cui collegarsi","Show as Hex":"Mostra come valore esadecimale","The minimum supported Python version for the debugger extension is 3.9.":"La versione minima supportata di Python per l'estensione del debugger è la 3.9.","We noticed you are attaching to ptvsd (Python debugger), which was deprecated on May 1st, 2020. Please switch to [debugpy](https://aka.ms/migrateToDebugpy).":"Abbiamo rilevato che si sta tentando il collegamento a ptvsd (debugger Python) che è stato deprecato il 1° maggio 2020. È consigliabile passare a [debugpy](https://aka.ms/migrateToDebugpy).","You need to select a Python interpreter before you start debugging.\n\nTip: click on \"Select Interpreter\" in the status bar.":"È necessario selezionare un interprete Python prima di avviare il debug.\n\nSuggerimento: fai clic su \"Seleziona interprete Python\" nella barra di stato.","cwd:":"cwd:","enter-your-module-name":"enter-your-module-name"} diff --git a/l10n/bundle.l10n.ja.json b/l10n/bundle.l10n.ja.json new file mode 100644 index 00000000..1c57c5e2 --- /dev/null +++ b/l10n/bundle.l10n.ja.json @@ -0,0 +1 @@ +{"Attach to a local process":"ローカル プロセスに接続する","Attach to a remote debug server":"リモート デバッグ サーバーに接続する","Attach to process":"プロセスに接続","Attach using Process ID":"プロセス ID を使用して接続する","Browse Files...":"ファイルの参照...","Browse your file system to find a Python file.":"ファイル システムを参照して Python ファイルを検索します。","Change Python Interpreter":"Python インタープリターの変更","Command Line Arguments":"コマンド ライン引数","Debug Configuration":"デバッグ構成","Debug Django":"Django をデバッグする","Debug FastAPI":"FastAPI をデバッグする","Debug Flask":"Flask をデバッグする","Debug Module":"モジュールをデバッグする","Debug Pyramid":"ピラミッドをデバッグ","Debug Stopped":"デバッグが停止しました","Debug a Python module by invoking it with '-m'":"Python モジュールを '-m' で呼び出してデバッグする","Debug the currently active Python file":"現在アクティブな Python ファイルをデバッグする","Debug the currently active Python file with arguments":"現在アクティブな引数を含む Python ファイルをデバッグします","Django":"Django","Do not show again":"今後表示しない","Enables use of [no-config debugging](https://github.com/microsoft/vscode-python-debugger/wiki/No%E2%80%90Config-Debugging), `debugpy `, in the terminal.":"ターミナルで [no-config debugging](https://github.com/microsoft/vscode-python-debugger/wiki/No%E2%80%90Config-Debugging), 'debugpy ' の使用を有効にします。","Enter a Python module/package name":"Python モジュール/パッケージ名を入力する","Enter a valid file path":"有効なファイル パスを入力する","Enter a valid host name or IP address":"有効なホスト名または IP アドレスを入力する","Enter a valid module name":"有効なモジュール名を入力する","Enter a valid name":"有効な名前を入力してください。","Enter a valid port number":"有効なポート番号を入力してください。","Enter the command line arguments you want to pass to the program":"プログラムに渡すコマンド ライン引数を入力します","Enter the path to app.py or select a file from the list.":"app.py へのパスを入力するか、一覧からファイルを選択します。","Enter the path to development.ini ({0} points to the root of the current workspace folder)":"development.ini へのパスを入力します ({0} は現在のワークスペース フォルダーのルートを指しています)","Enter the path to manage.py or select a file from the list.":"manage.py へのパスを入力するか、一覧からファイルを選択します。","Enter the path to the application, e.g. 'main.py' or 'main'":"アプリケーションへのパスを入力する (例: 'main.py'、'main')","Enter the port number that the debug server is listening on":"デバッグ サーバーがリッスンしているポート番号を入力する","Failed to launch debugger for child process {0}":"子プロセス {0} のデバッガーを起動できませんでした","FastAPI":"FastAPI","Flask":"Flask","Launch and debug a Django web application":"Django Web アプリケーションの起動とデバッグ","Launch and debug a FastAPI web application":"FastAPI Web アプリケーションの起動とデバッグ","Launch and debug a Flask web application":"Flask Web アプリケーションの起動とデバッグ","Launch and debug a Pyramid web application":"Pyramid Web アプリケーションの起動とデバッグ","Module":"モジュール","More Info":"詳細情報","No process selected":"プロセスが選択されていません","No, I will do it later":"いいえ。後で行います。","Open launch.json":"launch.json を開く","Operating system '{0}' not supported.":"オペレーティング システム '{0}' はサポートされていません。","Pyramid":"ピラミッド","Python Debugger":"Python デバッガー","Python Debugger extension loading...":"Python デバッガー拡張機能の読み込み中...","Python Debugger: Attach using Process Id":"Python デバッガー: プロセス ID を使用してアタッチする","Python Debugger: Current File":"Python デバッガー: 現在のファイル","Python Debugger: Current File with Arguments":"Python デバッガー: 引数を含む現在のファイル","Python Debugger: Django":"Python デバッガー: Django","Python Debugger: FastAPI":"Python デバッガー: FastAPI","Python Debugger: Flask":"Python デバッガー: Flask","Python Debugger: Module":"Python デバッガー: モジュール","Python Debugger: Pyramid Application":"Python デバッガー: ピラミッド アプリケーション","Python Debugger: Remote Attach":"Python デバッガー: リモートアタッチ","Python File":"Python ファイル","Python File with Arguments":"引数を含む Python ファイル","Refresh process list":"プロセスの一覧の更新","Remote Attach":"リモート接続","Remote Debugging":"リモート デバッグ","Select File":"ファイルの選択","Select Python File":"Python ファイルの選択","Select Python Interpreter":"Python インタープリターの選択","Select a Python Debugger debug configuration":"Python デバッグ構成を選択する","Select a debug configuration":"デバッグ構成を選択する","Select the process to attach to":"アタッチするプロセスを選択する","Show as Hex":"16 進数で表示","The minimum supported Python version for the debugger extension is 3.9.":"デバッガー拡張機能でサポートされている Python の最小バージョンは 3.9 です。","We noticed you are attaching to ptvsd (Python debugger), which was deprecated on May 1st, 2020. Please switch to [debugpy](https://aka.ms/migrateToDebugpy).":"2020 年 5 月 1 日に非推奨となった ptvsd (Python デバッガー) に接続されていることをお知らせします。[debugpy](https://aka.ms/migrateToDebugpy) に切り替えてください。","You need to select a Python interpreter before you start debugging.\n\nTip: click on \"Select Interpreter\" in the status bar.":"デバッグを開始する前に Python インタープリターを選択する必要があります。\n\nヒント: ステータス バーの [インタープリターの選択] をクリックします。","cwd:":"cwd:","enter-your-module-name":"enter-your-module-name"} diff --git a/l10n/bundle.l10n.ko.json b/l10n/bundle.l10n.ko.json new file mode 100644 index 00000000..835df7d9 --- /dev/null +++ b/l10n/bundle.l10n.ko.json @@ -0,0 +1 @@ +{"Attach to a local process":"로컬 프로세스에 연결","Attach to a remote debug server":"원격 디버그 서버에 연결","Attach to process":"프로세스에 연결","Attach using Process ID":"프로세스 ID를 사용하여 연결","Browse Files...":"파일 찾아보기...","Browse your file system to find a Python file.":"파일 시스템을 찾아 Python 파일을 찾습니다.","Change Python Interpreter":"Python 인터프리터 변경","Command Line Arguments":"명령줄 인수","Debug Configuration":"디버그 구성","Debug Django":"Django 디버그","Debug FastAPI":"FastAPI 디버그","Debug Flask":"Flask 디버그","Debug Module":"디버그 모듈","Debug Pyramid":"Pyramid 디버그","Debug Stopped":"디버그 중지됨","Debug a Python module by invoking it with '-m'":"'-m'을 사용하여 Python 모듈을 호출하여 디버그","Debug the currently active Python file":"현재 활성 Python 파일 디버그","Debug the currently active Python file with arguments":"인수를 사용하는 현재 활성 Python 파일 디버그","Django":"Django","Do not show again":"다시 표시 안 함","Enables use of [no-config debugging](https://github.com/microsoft/vscode-python-debugger/wiki/No%E2%80%90Config-Debugging), `debugpy `, in the terminal.":"터미널에서 [no-config debugging](https://github.com/microsoft/vscode-python-debugger/wiki/No%E2%80%90Config-Debugging), 'debugpy '을 사용하도록 설정합니다.","Enter a Python module/package name":"Python 모듈/패키지 이름 입력","Enter a valid file path":"올바른 파일 경로를 입력하세요.","Enter a valid host name or IP address":"올바른 호스트 이름 또는 IP 주소 입력","Enter a valid module name":"올바른 모듈 이름 입력","Enter a valid name":"올바른 이름을 입력하세요.","Enter a valid port number":"올바른 포트 번호를 입력하세요.","Enter the command line arguments you want to pass to the program":"프로그램에 전달하려는 명령줄 인수 입력","Enter the path to app.py or select a file from the list.":"app.py 경로를 입력하거나 목록에서 파일을 선택하세요.","Enter the path to development.ini ({0} points to the root of the current workspace folder)":"development.ini의 경로를 입력하세요({0}은(는) 현재 작업 영역 폴더의 루트를 가리킴)","Enter the path to manage.py or select a file from the list.":"manage.py 경로를 입력하거나 목록에서 파일을 선택하세요.","Enter the path to the application, e.g. 'main.py' or 'main'":"애플리케이션의 경로(예: 'main.py' 또는 'main')를 입력합니다.","Enter the port number that the debug server is listening on":"디버그 서버가 수신 대기 중인 포트 번호를 입력합니다.","Failed to launch debugger for child process {0}":"하위 프로세스 {0}에 대한 디버거를 시작하지 못했습니다.","FastAPI":"FastAPI","Flask":"Flask","Launch and debug a Django web application":"Django 웹 애플리케이션 시작 및 디버그","Launch and debug a FastAPI web application":"FastAPI 웹 애플리케이션 시작 및 디버그","Launch and debug a Flask web application":"Flask 웹 애플리케이션 시작 및 디버그","Launch and debug a Pyramid web application":"피라미드 웹 애플리케이션 시작 및 디버그","Module":"모듈","More Info":"추가 정보","No process selected":"선택한 프로세스가 없음","No, I will do it later":"아니요, 나중에 수행하겠습니다.","Open launch.json":"launch.json 열기","Operating system '{0}' not supported.":"운영 체제 '{0}'은(는) 지원되지 않습니다.","Pyramid":"피라미드형","Python Debugger":"Python 디버거","Python Debugger extension loading...":"Python 디버거 확장 로드 중...","Python Debugger: Attach using Process Id":"Python 디버거: 프로세스 ID를 사용하여 연결","Python Debugger: Current File":"Python 디버거: 현재 파일","Python Debugger: Current File with Arguments":"Python 디버거: 인수가 있는 현재 파일","Python Debugger: Django":"Python 디버거: Django","Python Debugger: FastAPI":"Python 디버거: FastAPI","Python Debugger: Flask":"Python 디버거: Flask","Python Debugger: Module":"Python 디버거: 모듈","Python Debugger: Pyramid Application":"Python 디버거: 피라미드형 애플리케이션","Python Debugger: Remote Attach":"Python 디버거: 원격 연결","Python File":"Python 파일","Python File with Arguments":"인수를 사용하는 Python 파일","Refresh process list":"프로세스 목록형 새로 고침","Remote Attach":"원격 연결","Remote Debugging":"원격 디버깅","Select File":"파일 선택","Select Python File":"Python 파일 선택","Select Python Interpreter":"Python 인터프리터 선택","Select a Python Debugger debug configuration":"Python 디버거 디버그 구성 선택","Select a debug configuration":"디버그 구성 선택","Select the process to attach to":"연결할 프로세스 선택","Show as Hex":"16진수로 표시","The minimum supported Python version for the debugger extension is 3.9.":"디버거 확장에 대한 최소 지원 Python 버전은 3.9입니다.","We noticed you are attaching to ptvsd (Python debugger), which was deprecated on May 1st, 2020. Please switch to [debugpy](https://aka.ms/migrateToDebugpy).":"2020년 5월 1일자로 더 이상 사용되지 않는 ptvsd(Python 디버거)에 연결하고 있는 것으로 나타났습니다. [debugpy](https://aka.ms/migrateToDebugpy)로 전환하세요.","You need to select a Python interpreter before you start debugging.\n\nTip: click on \"Select Interpreter\" in the status bar.":"디버깅을 시작하기 전에 Python 인터프리터를 선택해야 합니다.\n\n팁: 상태 표시줄에서 \"인터프리터 선택\"을 클릭하세요.","cwd:":"cwd:","enter-your-module-name":"enter-your-module-name"} diff --git a/l10n/bundle.l10n.pl.json b/l10n/bundle.l10n.pl.json new file mode 100644 index 00000000..2a89fc28 --- /dev/null +++ b/l10n/bundle.l10n.pl.json @@ -0,0 +1 @@ +{"Attach to a local process":"Dołącz do procesu lokalnego","Attach to a remote debug server":"Dołączanie do zdalnego serwera debugowania","Attach to process":"Dołącz do procesu","Attach using Process ID":"Dołącz przy użyciu identyfikatora procesu","Browse Files...":"Przeglądaj pliki...","Browse your file system to find a Python file.":"Przeglądaj system plików, aby znaleźć plik w języku Python.","Change Python Interpreter":"Zmień interpreter języka Python","Command Line Arguments":"Argumenty wiersza polecenia","Debug Configuration":"Konfiguracja debugowania","Debug Django":"Debugowanie struktury Django","Debug FastAPI":"Debuguj FastAPI","Debug Flask":"Debuguj strukturę Flask","Debug Module":"Moduł debugowania","Debug Pyramid":"Debuguj aplikację Piramida","Debug Stopped":"Zatrzymano debugowanie","Debug a Python module by invoking it with '-m'":"Debugowanie modułu języka Python przez wywołanie go za pomocą polecenia „-m”","Debug the currently active Python file":"Debugowanie aktualnie aktywnego pliku języka Python","Debug the currently active Python file with arguments":"Debugowanie aktualnie aktywnego pliku języka Python z argumentami","Django":"Django","Do not show again":"Nie pokazuj ponownie","Enables use of [no-config debugging](https://github.com/microsoft/vscode-python-debugger/wiki/No%E2%80%90Config-Debugging), `debugpy `, in the terminal.":"Umożliwia korzystanie z [debugowania bez konfiguracji](https://github.com/microsoft/vscode-python-debugger/wiki/No%E2%80%90Config-Debugging), `debugpy ` w terminalu.","Enter a Python module/package name":"Wprowadź nazwę modułu/pakietu języka Python","Enter a valid file path":"Wprowadź prawidłową ścieżkę pliku","Enter a valid host name or IP address":"Wprowadź prawidłową nazwę hosta lub prawidłowy adres IP","Enter a valid module name":"Wprowadź prawidłową nazwę modułu","Enter a valid name":"Wprowadź prawidłową nazwę","Enter a valid port number":"Wprowadź prawidłowy numer portu","Enter the command line arguments you want to pass to the program":"Wprowadź argumenty wiersza polecenia, które chcesz przekazać do programu","Enter the path to app.py or select a file from the list.":"Wprowadź ścieżkę do app.py lub wybierz plik z listy.","Enter the path to development.ini ({0} points to the root of the current workspace folder)":"Wprowadź ścieżkę do pliku development.ini ({0} wskazuje katalog główny bieżącego folderu obszaru roboczego)","Enter the path to manage.py or select a file from the list.":"Wprowadź ścieżkę do manage.py lub wybierz plik z listy.","Enter the path to the application, e.g. 'main.py' or 'main'":"Wprowadź ścieżkę do aplikacji, np. „main.py” lub „main”","Enter the port number that the debug server is listening on":"Wprowadź numer portu, na który nasłuchuje serwer debugowania","Failed to launch debugger for child process {0}":"Nie można uruchomić debugera dla procesu podrzędnego {0}","FastAPI":"FastAPI","Flask":"Flask","Launch and debug a Django web application":"Uruchamianie i debugowanie aplikacji internetowej Django","Launch and debug a FastAPI web application":"Uruchamianie i debugowanie aplikacji internetowej FastAPI","Launch and debug a Flask web application":"Uruchom i debuguj aplikację internetową Flask","Launch and debug a Pyramid web application":"Uruchamianie i debugowanie aplikacji internetowej Pyramid","Module":"Moduł","More Info":"Więcej informacji","No process selected":"Nie wybrano żadnego procesu","No, I will do it later":"Nie, zrobię to później","Open launch.json":"Otwórz plik launch.json","Operating system '{0}' not supported.":"System operacyjny „{0}” nie jest obsługiwany.","Pyramid":"Piramida","Python Debugger":"Debuger języka Python","Python Debugger extension loading...":"Ładowanie rozszerzenia debuggera języka Python...","Python Debugger: Attach using Process Id":"Debuger języka Python: Dołącz przy użyciu identyfikatora procesu","Python Debugger: Current File":"Debuger języka Python: Current File","Python Debugger: Current File with Arguments":"Debuger języka Python: Debugpy: bieżący plik z argumentami","Python Debugger: Django":"Debuger języka Python: Django","Python Debugger: FastAPI":"Debuger języka Python: FastAPI","Python Debugger: Flask":"Debuger języka Python: Flask","Python Debugger: Module":"Debuger języka Python: Moduł","Python Debugger: Pyramid Application":"Debuger języka Python: Aplikacja Piramida","Python Debugger: Remote Attach":"Debuger języka Python: Dołączanie zdalne","Python File":"Plik języka Python","Python File with Arguments":"Plik języka Python z argumentami","Refresh process list":"Odśwież listę procesów","Remote Attach":"Dołączanie zdalne","Remote Debugging":"Debugowanie zdalne","Select File":"Wybierz plik","Select Python File":"Wybierz plik języka Python","Select Python Interpreter":"Wybierz interpreter języka Python","Select a Python Debugger debug configuration":"Wybierz konfigurację debugowania dla debugera języka Python","Select a debug configuration":"Wybierz konfigurację debugowania","Select the process to attach to":"Wybierz docelowy proces dołączania","Show as Hex":"Pokaż jako szesnastkowy","The minimum supported Python version for the debugger extension is 3.9.":"Minimalna wersja języka Python obsługiwana przez rozszerzenie debugera to 3.9.","We noticed you are attaching to ptvsd (Python debugger), which was deprecated on May 1st, 2020. Please switch to [debugpy](https://aka.ms/migrateToDebugpy).":"Zauważyliśmy, że dołączasz do narzędzia ptvsd (debuger języka Python), który został wycofany 1 maja 2020 r. Przełącz się na [debugpy](https://aka.ms/migrateToDebugpy).","You need to select a Python interpreter before you start debugging.\n\nTip: click on \"Select Interpreter\" in the status bar.":"Przed rozpoczęciem debugowania musisz wybrać interpreter języka Python.\n\nPorada: kliknij pozycję „Select Interpreter” (Wybierz interpreter) na pasku stanu.","cwd:":"Cwd:","enter-your-module-name":"wprowadź nazwę modułu"} diff --git a/l10n/bundle.l10n.pt-br.json b/l10n/bundle.l10n.pt-br.json new file mode 100644 index 00000000..6893bdd9 --- /dev/null +++ b/l10n/bundle.l10n.pt-br.json @@ -0,0 +1 @@ +{"Attach to a local process":"Anexar a um processo local","Attach to a remote debug server":"Anexar a um servidor de depuração remoto","Attach to process":"Anexar ao processo","Attach using Process ID":"Anexar usando a ID do Processo","Browse Files...":"Procurar arquivos...","Browse your file system to find a Python file.":"Navegue pelo sistema de arquivos para localizar um arquivo Python.","Change Python Interpreter":"Alterar o Interpretador Python","Command Line Arguments":"Argumentos de Linha de Comando","Debug Configuration":"Configuração da Depuração","Debug Django":"Depurar Django","Debug FastAPI":"Depurar FastAPI","Debug Flask":"Depurar Flask","Debug Module":"Módulo de Depuração","Debug Pyramid":"Depurar Pyramid","Debug Stopped":"Depuração Interrompida","Debug a Python module by invoking it with '-m'":"Depurar um módulo Python invocando-o com '-m'","Debug the currently active Python file":"Depurar o arquivo Python ativo no momento","Debug the currently active Python file with arguments":"Depurar o arquivo Python ativo no momento com argumentos","Django":"Django","Do not show again":"Não mostrar novamente","Enables use of [no-config debugging](https://github.com/microsoft/vscode-python-debugger/wiki/No%E2%80%90Config-Debugging), `debugpy `, in the terminal.":"Habilita o uso de [depuração sem configuração](https://github.com/microsoft/vscode-python-debugger/wiki/No%E2%80%90Config-Debugging), `debugpy `, no terminal.","Enter a Python module/package name":"Insira um nome para o módulo/pacote Python","Enter a valid file path":"Insira um caminho do arquivo válido.","Enter a valid host name or IP address":"Insira um nome de host válido ou endereço IP","Enter a valid module name":"Insira um nome de módulo válido","Enter a valid name":"Insira um nome válido.","Enter a valid port number":"Insira um número de porta válido.","Enter the command line arguments you want to pass to the program":"Insira os argumentos de linha de comando que você deseja passar para o programa","Enter the path to app.py or select a file from the list.":"Insira o caminho para app.py ou selecione um arquivo da lista.","Enter the path to development.ini ({0} points to the root of the current workspace folder)":"Digite o caminho para development.ini ({0} aponta para a raiz da pasta do espaço de trabalho atual)","Enter the path to manage.py or select a file from the list.":"Insira o caminho para manage.py ou selecione um arquivo da lista.","Enter the path to the application, e.g. 'main.py' or 'main'":"Insira o caminho para o aplicativo, por exemplo, 'main.py' ou 'main'","Enter the port number that the debug server is listening on":"Insira o número da porta que o servidor de depuração está escutando","Failed to launch debugger for child process {0}":"Falha ao iniciar o depurador para o processo filho {0}","FastAPI":"FastAPI","Flask":"Flask","Launch and debug a Django web application":"Iniciar e depurar um aplicativo Web Django","Launch and debug a FastAPI web application":"Iniciar e depurar um aplicativo Web FastAPI","Launch and debug a Flask web application":"Iniciar e depurar um aplicativo Web Flask","Launch and debug a Pyramid web application":"Iniciar e depurar um aplicativo Web Pyramid","Module":"Módulo","More Info":"Mais Informações","No process selected":"Nenhum processo selecionado","No, I will do it later":"Não, farei isso mais tarde","Open launch.json":"Abrir launch.json","Operating system '{0}' not supported.":"O sistema operacional '{0}' não é suportado.","Pyramid":"Pyramid","Python Debugger":"Depurador do Python","Python Debugger extension loading...":"Carregando a extensão do Depurador do Python...","Python Debugger: Attach using Process Id":"Depurador do Python: Anexar usando o ID do Processo","Python Debugger: Current File":"Depurador do Python: Arquivo Atual","Python Debugger: Current File with Arguments":"Depurador do Python: Arquivo atual com argumentos","Python Debugger: Django":"Depurador do Python: Django","Python Debugger: FastAPI":"Depurador do Python: FastAPI","Python Debugger: Flask":"Depurador do Python: Flask","Python Debugger: Module":"Depurador do Python: Módulo","Python Debugger: Pyramid Application":"Depurador do Python: Aplicativo Pyramid","Python Debugger: Remote Attach":"Depurador do Python: Anexação Remota","Python File":"Arquivo Python","Python File with Arguments":"Arquivo Python com Argumentos","Refresh process list":"Atualizar a lista de processos","Remote Attach":"Anexação Remota","Remote Debugging":"Depuração Remota","Select File":"Selecionar Arquivo","Select Python File":"Selecionar Arquivo Python","Select Python Interpreter":"Selecionar Interpretador do Python","Select a Python Debugger debug configuration":"Selecione uma configuração de depuração do Python Debugger","Select a debug configuration":"Selecionar uma configuração de depuração","Select the process to attach to":"Selecione o processo ao qual anexar","Show as Hex":"Mostrar como Hexadecimal","The minimum supported Python version for the debugger extension is 3.9.":"A versão mínima suportada do Python para a extensão do depurador é 3.9.","We noticed you are attaching to ptvsd (Python debugger), which was deprecated on May 1st, 2020. Please switch to [debugpy](https://aka.ms/migrateToDebugpy).":"Notamos que você está anexando ao ptvsd (depurador do Python), que foi preterido em 1º de maio de 2020. Mude para [debugpy](https://aka.ms/migrateToDebugpy).","You need to select a Python interpreter before you start debugging.\n\nTip: click on \"Select Interpreter\" in the status bar.":"Você precisa selecionar um interpretador Python antes de iniciar a depuração.\n\nDica: clique em “Selecionar Interpretador” na barra de status.","cwd:":"cwd:","enter-your-module-name":"enter-your-module-name"} diff --git a/l10n/bundle.l10n.qps-ploc.json b/l10n/bundle.l10n.qps-ploc.json new file mode 100644 index 00000000..ae0001bd --- /dev/null +++ b/l10n/bundle.l10n.qps-ploc.json @@ -0,0 +1 @@ +{"Attach to a local process":"Ættæçh tø æ løçæl prøçëss","Attach to a remote debug server":"Ættæçh tø æ rëmøtë ðëþµg sërvër","Attach to process":"Ættæçh tø prøçëss","Attach using Process ID":"Ættæçh µsïñg Prøçëss ÏÐ","Browse Files...":"ßrøwsë Fïlës...","Browse your file system to find a Python file.":"ßrøwsë ÿøµr fïlë sÿstëm tø fïñð æ Pÿthøñ fïlë.","Change Python Interpreter":"Çhæñgë Pÿthøñ Ïñtërprëtër","Command Line Arguments":"Çømmæñð £ïñë Ærgµmëñts","Debug Configuration":"Ðëþµg Çøñfïgµrætïøñ","Debug Django":"Ðëþµg Ðjæñgø","Debug FastAPI":"Ðëþµg FæstÆPÏ","Debug Flask":"Ðëþµg Flæsk","Debug Module":"Ðëþµg Møðµlë","Debug Pyramid":"Ðëþµg Pÿræmïð","Debug Stopped":"Ðëþµg §tøppëð","Debug a Python module by invoking it with '-m'":"Ðëþµg æ Pÿthøñ møðµlë þÿ ïñvøkïñg ït wïth '-m'","Debug the currently active Python file":"Ðëþµg thë çµrrëñtlÿ æçtïvë Pÿthøñ fïlë","Debug the currently active Python file with arguments":"Ðëþµg thë çµrrëñtlÿ æçtïvë Pÿthøñ fïlë wïth ærgµmëñts","Django":"Ðjæñgø","Do not show again":"Ðø ñøt shøw ægæïñ","Enables use of [no-config debugging](https://github.com/microsoft/vscode-python-debugger/wiki/No%E2%80%90Config-Debugging), `debugpy `, in the terminal.":"Ëñæþlës µsë øf [ñø-çøñfïg ðëþµggïñg](https://gïthµþ.çøm/mïçrøsøft/vsçøðë-pÿthøñ-ðëþµggër/wïkï/Ñø%Ë2%80%90Çøñfïg-Ðëþµggïñg), `ðëþµgpÿ `, ïñ thë tërmïñæl.","Enter a Python module/package name":"Ëñtër æ Pÿthøñ møðµlë/pæçkægë ñæmë","Enter a valid file path":"Ëñtër æ vælïð fïlë pæth","Enter a valid host name or IP address":"Ëñtër æ vælïð høst ñæmë ør ÏP æððrëss","Enter a valid module name":"Ëñtër æ vælïð møðµlë ñæmë","Enter a valid name":"Ëñtër æ vælïð ñæmë","Enter a valid port number":"Ëñtër æ vælïð pørt ñµmþër","Enter the command line arguments you want to pass to the program":"Ëñtër thë çømmæñð lïñë ærgµmëñts ÿøµ wæñt tø pæss tø thë prøgræm","Enter the path to app.py or select a file from the list.":"Ëñtër thë pæth tø æpp.pÿ ør sëlëçt æ fïlë frøm thë lïst.","Enter the path to development.ini ({0} points to the root of the current workspace folder)":"Ëñtër thë pæth tø ðëvëløpmëñt.ïñï ({0} pøïñts tø thë røøt øf thë çµrrëñt wørkspæçë følðër)","Enter the path to manage.py or select a file from the list.":"Ëñtër thë pæth tø mæñægë.pÿ ør sëlëçt æ fïlë frøm thë lïst.","Enter the path to the application, e.g. 'main.py' or 'main'":"Ëñtër thë pæth tø thë æpplïçætïøñ, ë.g. 'mæïñ.pÿ' ør 'mæïñ'","Enter the port number that the debug server is listening on":"Ëñtër thë pørt ñµmþër thæt thë ðëþµg sërvër ïs lïstëñïñg øñ","Failed to launch debugger for child process {0}":"Fæïlëð tø læµñçh ðëþµggër før çhïlð prøçëss {0}","FastAPI":"FæstÆPÏ","Flask":"Flæsk","Launch and debug a Django web application":"£æµñçh æñð ðëþµg æ Ðjæñgø wëþ æpplïçætïøñ","Launch and debug a FastAPI web application":"£æµñçh æñð ðëþµg æ FæstÆPÏ wëþ æpplïçætïøñ","Launch and debug a Flask web application":"£æµñçh æñð ðëþµg æ Flæsk wëþ æpplïçætïøñ","Launch and debug a Pyramid web application":"£æµñçh æñð ðëþµg æ Pÿræmïð wëþ æpplïçætïøñ","Module":"Møðµlë","More Info":"Mørë Ïñfø","No process selected":"Ñø prøçëss sëlëçtëð","No, I will do it later":"Ñø, Ï wïll ðø ït lætër","Open launch.json":"Øpëñ læµñçh.jsøñ","Operating system '{0}' not supported.":"Øpërætïñg sÿstëm '{0}' ñøt sµppørtëð.","Pyramid":"Pÿræmïð","Python Debugger":"Pÿthøñ Ðëþµggër","Python Debugger extension loading...":"Pÿthøñ Ðëþµggër ëxtëñsïøñ løæðïñg...","Python Debugger: Attach using Process Id":"Pÿthøñ Ðëþµggër: Ættæçh µsïñg Prøçëss Ïð","Python Debugger: Current File":"Pÿthøñ Ðëþµggër: ǵrrëñt Fïlë","Python Debugger: Current File with Arguments":"Pÿthøñ Ðëþµggër: ǵrrëñt Fïlë wïth Ærgµmëñts","Python Debugger: Django":"Pÿthøñ Ðëþµggër: Ðjæñgø","Python Debugger: FastAPI":"Pÿthøñ Ðëþµggër: FæstÆPÏ","Python Debugger: Flask":"Pÿthøñ Ðëþµggër: Flæsk","Python Debugger: Module":"Pÿthøñ Ðëþµggër: Møðµlë","Python Debugger: Pyramid Application":"Pÿthøñ Ðëþµggër: Pÿræmïð Æpplïçætïøñ","Python Debugger: Remote Attach":"Pÿthøñ Ðëþµggër: Rëmøtë Ættæçh","Python File":"Pÿthøñ Fïlë","Python File with Arguments":"Pÿthøñ Fïlë wïth Ærgµmëñts","Refresh process list":"Rëfrësh prøçëss lïst","Remote Attach":"Rëmøtë Ættæçh","Remote Debugging":"Rëmøtë Ðëþµggïñg","Select File":"§ëlëçt Fïlë","Select Python File":"§ëlëçt Pÿthøñ Fïlë","Select Python Interpreter":"§ëlëçt Pÿthøñ Ïñtërprëtër","Select a Python Debugger debug configuration":"§ëlëçt æ Pÿthøñ Ðëþµggër ðëþµg çøñfïgµrætïøñ","Select a debug configuration":"§ëlëçt æ ðëþµg çøñfïgµrætïøñ","Select the process to attach to":"§ëlëçt thë prøçëss tø ættæçh tø","Show as Hex":"§høw æs Hëx","The minimum supported Python version for the debugger extension is 3.9.":"Thë mïñïmµm sµppørtëð Pÿthøñ vërsïøñ før thë ðëþµggër ëxtëñsïøñ ïs 3.9.","We noticed you are attaching to ptvsd (Python debugger), which was deprecated on May 1st, 2020. Please switch to [debugpy](https://aka.ms/migrateToDebugpy).":"Wë ñøtïçëð ÿøµ ærë ættæçhïñg tø ptvsð (Pÿthøñ ðëþµggër), whïçh wæs ðëprëçætëð øñ Mæÿ 1st, 2020. Plëæsë swïtçh tø [ðëþµgpÿ](https://ækæ.ms/mïgrætëTøÐëþµgpÿ).","You need to select a Python interpreter before you start debugging.\n\nTip: click on \"Select Interpreter\" in the status bar.":"Ýøµ ñëëð tø sëlëçt æ Pÿthøñ ïñtërprëtër þëførë ÿøµ stært ðëþµggïñg.\n\nTïp: çlïçk øñ \"§ëlëçt Ïñtërprëtër\" ïñ thë stætµs þær.","cwd:":"çwð:","enter-your-module-name":"ëñtër-ÿøµr-møðµlë-ñæmë"} diff --git a/l10n/bundle.l10n.ru.json b/l10n/bundle.l10n.ru.json new file mode 100644 index 00000000..6960c0c3 --- /dev/null +++ b/l10n/bundle.l10n.ru.json @@ -0,0 +1 @@ +{"Attach to a local process":"Подключить к локальному процессу","Attach to a remote debug server":"Присоединение к удаленному серверу отладки","Attach to process":"Присоединиться к процессу","Attach using Process ID":"Подключить с помощью идентификатора процесса","Browse Files...":"Обзор файлов...","Browse your file system to find a Python file.":"Просмотрите файловую систему, чтобы найти файл Python.","Change Python Interpreter":"Изменить интерпретатор Python","Command Line Arguments":"Аргументы командной строки","Debug Configuration":"Конфигурация отладки","Debug Django":"Отладка Django","Debug FastAPI":"Отладка FastAPI","Debug Flask":"Отладка Flask","Debug Module":"Модуль отладки","Debug Pyramid":"Пирамида отладки","Debug Stopped":"Отладка остановлена","Debug a Python module by invoking it with '-m'":"Отладка модуля Python путем его вызова с помощью «-m»","Debug the currently active Python file":"Отладка текущего активного файла Python","Debug the currently active Python file with arguments":"Отладка текущего активного файла Python с аргументами","Django":"Django","Do not show again":"Больше не показывать","Enables use of [no-config debugging](https://github.com/microsoft/vscode-python-debugger/wiki/No%E2%80%90Config-Debugging), `debugpy `, in the terminal.":"Включает использование [отладки без конфигурации](https://github.com/microsoft/vscode-python-debugger/wiki/No%E2%80%90Config-Debugging) \"debugpy \" в терминале.","Enter a Python module/package name":"Введите имя модуля или пакета Python","Enter a valid file path":"Введите допустимый путь к файлу","Enter a valid host name or IP address":"Ввод допустимого имени или IP-адреса узла","Enter a valid module name":"Введите допустимое имя модуля","Enter a valid name":"Введите допустимое имя","Enter a valid port number":"Введите допустимый номер порта","Enter the command line arguments you want to pass to the program":"Введите аргументы командной строки, которые вы хотите передать программе.","Enter the path to app.py or select a file from the list.":"Введите путь к app.py или выберите файл из списка.","Enter the path to development.ini ({0} points to the root of the current workspace folder)":"Введите путь к development.ini ({0}указывает на корень папки текущей рабочей области)","Enter the path to manage.py or select a file from the list.":"Введите путь к manage.py или выберите файл из списка.","Enter the path to the application, e.g. 'main.py' or 'main'":"Введите путь к приложению, например «main.py» или «main»","Enter the port number that the debug server is listening on":"Введите номер порта, который прослушивает сервер отладки","Failed to launch debugger for child process {0}":"Не удалось запустить отладчик для дочернего процесса {0}","FastAPI":"FastAPI","Flask":"Flask","Launch and debug a Django web application":"Запуск и отладка веб-приложения Django","Launch and debug a FastAPI web application":"Запуск и отладка веб-приложения FastAPI","Launch and debug a Flask web application":"Запуск и отладка веб-приложения Flask","Launch and debug a Pyramid web application":"Запуск и отладка веб-приложения Pyramid","Module":"Модуль","More Info":"Дополнительные сведения","No process selected":"Процесс не выбран","No, I will do it later":"Нет, выполню позже","Open launch.json":"Открыть launch.json","Operating system '{0}' not supported.":"Операционная система «{0}» не поддерживается.","Pyramid":"Пирамида","Python Debugger":"Отладчик Python","Python Debugger extension loading...":"Загрузка расширения отладчика Python...","Python Debugger: Attach using Process Id":"Отладчик Python: Подключить с помощью идентификатора процесса","Python Debugger: Current File":"Отладчик Python: Текущий файл","Python Debugger: Current File with Arguments":"Отладчик Python: Текущий файл с аргументами","Python Debugger: Django":"Отладчик Python: Django","Python Debugger: FastAPI":"Отладчик Python: FastAPI","Python Debugger: Flask":"Отладчик Python: Flask","Python Debugger: Module":"Отладчик Python: Модуль","Python Debugger: Pyramid Application":"Отладчик Python: Приложение Pyramid","Python Debugger: Remote Attach":"Отладчик Python: Удаленное подключение","Python File":"Файл Python","Python File with Arguments":"Файл Python с аргументами","Refresh process list":"Обновить список процессов","Remote Attach":"Удаленное подключение","Remote Debugging":"Удаленная отладка","Select File":"Выберите файл","Select Python File":"Выбор файла Python","Select Python Interpreter":"Выбор интерпретатора Python","Select a Python Debugger debug configuration":"Выберите конфигурацию отладки отладчика Python","Select a debug configuration":"Выбрать конфигурацию отладки","Select the process to attach to":"Выберите процесс, к которому нужно выполнить подключение","Show as Hex":"Показать как шестнадцатеричный","The minimum supported Python version for the debugger extension is 3.9.":"Минимально поддерживаемая версия Python для расширения отладчика — 3.9.","We noticed you are attaching to ptvsd (Python debugger), which was deprecated on May 1st, 2020. Please switch to [debugpy](https://aka.ms/migrateToDebugpy).":"Мы заметили, что вы подключаетесь к ptvsd (отладчику Python), который устарел 1 мая 2020 года. Переключитесь на [debugpy](https://aka.ms/migrateToDebugpy).","You need to select a Python interpreter before you start debugging.\n\nTip: click on \"Select Interpreter\" in the status bar.":"Перед началом отладки необходимо выбрать интерпретатор Python.\n\nСовет: нажмите \"Выбор интерпретатора\" в строке состояния.","cwd:":"Cwd:","enter-your-module-name":"enter-your-module-name"} diff --git a/l10n/bundle.l10n.tr.json b/l10n/bundle.l10n.tr.json new file mode 100644 index 00000000..adcdd2ad --- /dev/null +++ b/l10n/bundle.l10n.tr.json @@ -0,0 +1 @@ +{"Attach to a local process":"Yerel işleme ekle","Attach to a remote debug server":"Uzaktan hata ayıklama sunucusuna ekle","Attach to process":"İşleme ekle","Attach using Process ID":"İşlem Kimliği kullanarak ekle","Browse Files...":"Dosyalara Göz At...","Browse your file system to find a Python file.":"Python dosyasını bulmak için dosya sisteminize göz atın.","Change Python Interpreter":"Python Yorumlayıcısını Değiştir","Command Line Arguments":"Komut Satırı Bağımsız Değişkenleri","Debug Configuration":"Hata Ayıklama Yapılandırması","Debug Django":"Django’da Hata Ayıkla","Debug FastAPI":"FastAPI'da Hata Ayıkla","Debug Flask":"Flask'te Hata Ayıkla","Debug Module":"Hata Ayıklama Modülü","Debug Pyramid":"Pyramid’de Hata Ayıklama","Debug Stopped":"Hata Ayıklama Durduruldu","Debug a Python module by invoking it with '-m'":"Python modülünü '-m' ile çağırarak hata ayıklayın","Debug the currently active Python file":"Şu anda etkin olan Python dosyasında hata ayıkla","Debug the currently active Python file with arguments":"Şu anda etkin olan ve bağımsız değişkenler içeren Python dosyasında hata ayıklayın","Django":"Django","Do not show again":"Tekrar gösterme","Enables use of [no-config debugging](https://github.com/microsoft/vscode-python-debugger/wiki/No%E2%80%90Config-Debugging), `debugpy `, in the terminal.":"Terminalde [no-config debugging](https://github.com/microsoft/vscode-python-debugger/wiki/No%E2%80%90Config-Debugging), 'debugpy ' kullanımına izin ver.","Enter a Python module/package name":"Python modülü/paketi adını girin","Enter a valid file path":"Geçerli bir dosya yolu girin","Enter a valid host name or IP address":"Geçerli bir ana bilgisayar adı veya IP adresi girin","Enter a valid module name":"Geçerli bir modül adı girin","Enter a valid name":"Geçerli bir ad girin","Enter a valid port number":"Geçerli bir bağlantı noktası numarası girin","Enter the command line arguments you want to pass to the program":"Programa geçirmek istediğiniz komut satırı bağımsız değişkenlerini girin","Enter the path to app.py or select a file from the list.":"app.py dosyasının yolunu girin veya listeden bir dosya seçin.","Enter the path to development.ini ({0} points to the root of the current workspace folder)":"Development.ini yolunu girin ({0}, geçerli çalışma alanı klasörünün kökünü belirtir)","Enter the path to manage.py or select a file from the list.":"manage.py dosyasının yolunu girin veya listeden bir dosya seçin.","Enter the path to the application, e.g. 'main.py' or 'main'":"Uygulamanın yolunu girin, örneğin 'main.py' veya 'main'","Enter the port number that the debug server is listening on":"Hata ayıklama sunucusunun dinlediği bağlantı noktasının numarasını girin","Failed to launch debugger for child process {0}":"Alt işlem {0} için hata ayıklayıcısı başlatılamadı","FastAPI":"FastAPI","Flask":"Flask","Launch and debug a Django web application":"Django web uygulamasını başlat ve hata ayıkla","Launch and debug a FastAPI web application":"FastAPI web uygulamasını başlat ve hata ayıkla","Launch and debug a Flask web application":"Flask web uygulamasını başlat ve hata ayıkla","Launch and debug a Pyramid web application":"Pyramid web uygulamasını başlat ve hata ayıkla","Module":"Modül","More Info":"Daha Fazla Bilgi","No process selected":"İşlem seçilmedi","No, I will do it later":"Hayır, daha sonra yapacağım","Open launch.json":"launch.json dosyasını aç","Operating system '{0}' not supported.":"‘{0}’ işletim sistemi desteklenmiyor.","Pyramid":"Piramit","Python Debugger":"Python Hata Ayıklayıcısı","Python Debugger extension loading...":"Python Hata Ayıklayıcı uzantısı yükleniyor...","Python Debugger: Attach using Process Id":"Python Hata Ayıklayıcısı: İşlem Kimliği kullanarak ekle","Python Debugger: Current File":"Python Hata Ayıklayıcısı: Geçerli Dosya","Python Debugger: Current File with Arguments":"Python Hata Ayıklayıcısı: Bağımsız Değişkenler içeren Geçerli Dosya","Python Debugger: Django":"Python Hata Ayıklayıcısı: Django","Python Debugger: FastAPI":"Python Hata Ayıklayıcısı: FastAPI","Python Debugger: Flask":"Python Hata Ayıklayıcısı: Flask","Python Debugger: Module":"Python Hata Ayıklayıcısı: Modül","Python Debugger: Pyramid Application":"Python Hata Ayıklayıcısı: Piramit Uygulaması","Python Debugger: Remote Attach":"Python Hata Ayıklayıcısı: Uzaktan Ekleme","Python File":"Python Dosyası","Python File with Arguments":"Bağımsız Değişkenler içeren Python Dosyası","Refresh process list":"İşlem listesini yenile","Remote Attach":"Uzaktan Ekleme","Remote Debugging":"Uzaktan Hata Ayıklama","Select File":"Dosya Seç","Select Python File":"Python Dosyası Seç","Select Python Interpreter":"Python Yorumlayıcısını seçin","Select a Python Debugger debug configuration":"Python Hata Ayıklayıcısı hata ayıklama yapılandırması seçin","Select a debug configuration":"Bir hata ayıklama yapılandırması seçin","Select the process to attach to":"Eklenilecek işlemi seçin","Show as Hex":"Onaltılık olarak göster","The minimum supported Python version for the debugger extension is 3.9.":"Hata ayıklayıcı uzantısı için desteklenen en düşük Python sürümü 3.9'dur.","We noticed you are attaching to ptvsd (Python debugger), which was deprecated on May 1st, 2020. Please switch to [debugpy](https://aka.ms/migrateToDebugpy).":"1 Mayıs 2020'de kullanım dışı bırakılan ptvsd'ye (Python hata ayıklayıcısı) eklediğinizi algıladık. Lütfen [debugpy](https://aka.ms/migrateToDebugpy)’a geçiş yapın.","You need to select a Python interpreter before you start debugging.\n\nTip: click on \"Select Interpreter\" in the status bar.":"Hata ayıklamaya başlamadan önce bir Python yorumlayıcısı seçmeniz gerekir.\n\nİpucu: durum çubuğunda \"Yorumlayıcı Seç\"e tıklayın.","cwd:":"cwd:","enter-your-module-name":"modül adınızı girin"} diff --git a/l10n/bundle.l10n.zh-cn.json b/l10n/bundle.l10n.zh-cn.json new file mode 100644 index 00000000..63361be2 --- /dev/null +++ b/l10n/bundle.l10n.zh-cn.json @@ -0,0 +1 @@ +{"Attach to a local process":"附加到本地进程","Attach to a remote debug server":"附加到远程调试服务器","Attach to process":"附加到进程","Attach using Process ID":"使用进程 ID 进行附加","Browse Files...":"浏览文件...","Browse your file system to find a Python file.":"浏览文件系统以查找 Python 文件。","Change Python Interpreter":"更改 Python 解释器","Command Line Arguments":"命令行参数","Debug Configuration":"调试配置","Debug Django":"调试 Django 应用程序","Debug FastAPI":"调试 FastAPI","Debug Flask":"调试 Flask","Debug Module":"调试模块","Debug Pyramid":"调试 Pyramid","Debug Stopped":"调试已停止","Debug a Python module by invoking it with '-m'":"通过使用 \\\"-m\\\" 调用 Python 模块来调试它","Debug the currently active Python file":"调试当前正在运行的 Python 文件","Debug the currently active Python file with arguments":"使用参数调试当前活动的 Python 文件","Django":"Django","Do not show again":"不再显示","Enables use of [no-config debugging](https://github.com/microsoft/vscode-python-debugger/wiki/No%E2%80%90Config-Debugging), `debugpy `, in the terminal.":"允许在终端中使用 [no-config debugging](https://github.com/microsoft/vscode-python-debugger/wiki/No%E2%80%90Config-Debugging), “debugpy ”。","Enter a Python module/package name":"输入 Python 模块/包名称","Enter a valid file path":"输入有效的文件路径","Enter a valid host name or IP address":"输入有效主机名或 IP 地址","Enter a valid module name":"输入有效的模块名称","Enter a valid name":"输入有效名称","Enter a valid port number":"请输入一个有效的端口号。","Enter the command line arguments you want to pass to the program":"输入要传递给程序的命令行参数","Enter the path to app.py or select a file from the list.":"输入 app.py 的路径或从列表中选择文件。","Enter the path to development.ini ({0} points to the root of the current workspace folder)":"输入 development.ini 的路径({0} 指向当前工作区文件夹的根目录)","Enter the path to manage.py or select a file from the list.":"输入 manage.py 的路径或从列表中选择文件。","Enter the path to the application, e.g. 'main.py' or 'main'":"请输入应用程序的路径,例如 \\\"main.py\\\" 或 \\\"main\\\"","Enter the port number that the debug server is listening on":"输入调试服务器正在侦听的端口号","Failed to launch debugger for child process {0}":"无法为子进程 {0} 启动调试器","FastAPI":"FastAPI","Flask":"Flask","Launch and debug a Django web application":"启动和调试 Django Web 应用程序","Launch and debug a FastAPI web application":"启动和调试 FastAPI Web 应用程序","Launch and debug a Flask web application":"启动和调试 Flask Web 应用程序","Launch and debug a Pyramid web application":"启动和调试 Pyramid Web 应用程序","Module":"模块","More Info":"详细信息","No process selected":"未选择进程","No, I will do it later":"否,我将稍后执行此操作","Open launch.json":"打开 launch.json","Operating system '{0}' not supported.":"不支持操作系统“{0}”。","Pyramid":"Pyramid","Python Debugger":"Python 调试程序","Python Debugger extension loading...":"正在加载 Python 调试器扩展...","Python Debugger: Attach using Process Id":"Python 调试程序: 使用进程 ID 附加","Python Debugger: Current File":"Python 调试程序: 当前文件","Python Debugger: Current File with Arguments":"Python 调试程序: 包含参数的当前文件","Python Debugger: Django":"Python 调试程序: Django","Python Debugger: FastAPI":"Python 调试程序: FastAPI","Python Debugger: Flask":"Python 调试程序: Flask","Python Debugger: Module":"Python 调试程序: 模块","Python Debugger: Pyramid Application":"Python 调试程序: Pyramid 应用程序","Python Debugger: Remote Attach":"Python 调试程序: 远程附加","Python File":"Python 文件","Python File with Arguments":"带有参数的 Python 文件","Refresh process list":"刷新进程列表","Remote Attach":"远程附加","Remote Debugging":"远程调试","Select File":"选择文件","Select Python File":"选择 Python 文件","Select Python Interpreter":"选择 Python 解释器","Select a Python Debugger debug configuration":"选择 Python 调试程序调试配置","Select a debug configuration":"选择调试配置","Select the process to attach to":"选择要附加到的进程","Show as Hex":"显示为十六进制","The minimum supported Python version for the debugger extension is 3.9.":"调试器扩展支持的最低 Python 版本是 3.9。","We noticed you are attaching to ptvsd (Python debugger), which was deprecated on May 1st, 2020. Please switch to [debugpy](https://aka.ms/migrateToDebugpy).":"我们注意到你正在连接已于 2020 年 5 月 1 日被弃用的 ptvsd (Python 调试器)。请切换到 [debugpy](https://aka.ms/migrateToDebugpy)。","You need to select a Python interpreter before you start debugging.\n\nTip: click on \"Select Interpreter\" in the status bar.":"在开始调试之前,需要选择 Python 解释器。\n\n提示: 单击状态栏中的“选择解释器”。","cwd:":"cwd:","enter-your-module-name":"enter-your-module-name"} diff --git a/l10n/bundle.l10n.zh-tw.json b/l10n/bundle.l10n.zh-tw.json new file mode 100644 index 00000000..bde1a0ba --- /dev/null +++ b/l10n/bundle.l10n.zh-tw.json @@ -0,0 +1 @@ +{"Attach to a local process":"附加到本機處理序","Attach to a remote debug server":"連結到遠端偵錯伺服器","Attach to process":"附加至處理序","Attach using Process ID":"使用處理程式識別碼附加","Browse Files...":"瀏覽檔案...","Browse your file system to find a Python file.":"瀏覽您的檔案系統以尋找 Python 檔案。","Change Python Interpreter":"變更 Python 解譯器","Command Line Arguments":"命令列的引數","Debug Configuration":"偵錯設定","Debug Django":"為 Django 進行偵錯","Debug FastAPI":"為 FastAPI 進行偵錯","Debug Flask":"為 Flask 進行偵錯","Debug Module":"為模組進行偵錯","Debug Pyramid":"為 Pyramid 進行偵錯","Debug Stopped":"偵錯已停止","Debug a Python module by invoking it with '-m'":"使用 '-m' 叫用 Python 模組來對其偵錯","Debug the currently active Python file":"偵錯目前使用中的 Python 檔案","Debug the currently active Python file with arguments":"使用引數對目前使用中的 Python 檔案進行偵錯","Django":"Django","Do not show again":"不要再顯示","Enables use of [no-config debugging](https://github.com/microsoft/vscode-python-debugger/wiki/No%E2%80%90Config-Debugging), `debugpy `, in the terminal.":"啟用在終端機中使用 [no-config debugging](https://github.com/microsoft/vscode-python-debugger/wiki/No%E2%80%90Config-Debugging)、`debugpy `。","Enter a Python module/package name":"輸入 Python 模組/套件名稱","Enter a valid file path":"輸入有效的檔案路徑","Enter a valid host name or IP address":"輸入有效的主機名稱或 IP 位址","Enter a valid module name":"輸入有效的模組名稱","Enter a valid name":"請輸入有效的名稱。","Enter a valid port number":"請輸入有效的連接埠號碼。","Enter the command line arguments you want to pass to the program":"輸入您要傳遞給程式的命令列引數","Enter the path to app.py or select a file from the list.":"輸入要 app.py 的路徑,或從清單中選取檔案。","Enter the path to development.ini ({0} points to the root of the current workspace folder)":"輸入 development.ini 的路徑 ({0} 指向目前工作區資料夾的根目錄)","Enter the path to manage.py or select a file from the list.":"輸入要 manage.py 的路徑,或從清單中選取檔案。","Enter the path to the application, e.g. 'main.py' or 'main'":"輸入應用程式的路徑,例如 'main.py' 或 'main'","Enter the port number that the debug server is listening on":"輸入偵錯伺服器正在接聽的連接埠號碼","Failed to launch debugger for child process {0}":"無法為子處理序 {0} 啟動偵錯工具","FastAPI":"FastAPI","Flask":"Flask","Launch and debug a Django web application":"啟動 Django Web 應用程式並對其偵錯","Launch and debug a FastAPI web application":"啟動 FastAPI Web 應用程式並對其偵錯","Launch and debug a Flask web application":"啟動 Flask Web 應用程式並對其偵錯","Launch and debug a Pyramid web application":"啟動 Pyramid Web 應用程式並對其偵錯","Module":"模組","More Info":"更多資訊","No process selected":"未選取任何處理序","No, I will do it later":"否,我稍後會執行","Open launch.json":"開啟 launch.json","Operating system '{0}' not supported.":"不支援作業系統 '{0}'。","Pyramid":"Pyramid","Python Debugger":"Python 偵錯工具","Python Debugger extension loading...":"Python 偵錯工具延伸模載入中...","Python Debugger: Attach using Process Id":"Python 偵錯工具: 使用處理程式識別碼附加","Python Debugger: Current File":"Python 偵錯工具: 目前檔案","Python Debugger: Current File with Arguments":"Python 偵錯工具: 帶引數的目前檔案","Python Debugger: Django":"Python 偵錯工具: Django","Python Debugger: FastAPI":"Python 偵錯工具: FastAPI","Python Debugger: Flask":"Python 偵錯工具: Flask","Python Debugger: Module":"Python 偵錯工具: 模組","Python Debugger: Pyramid Application":"Python 偵錯工具: Pyramid Application","Python Debugger: Remote Attach":"Python 偵錯工具: 遠端附加","Python File":"Python 檔案","Python File with Arguments":"具有引數的 Python 檔案","Refresh process list":"重新整理處理序清單","Remote Attach":"遠端附加","Remote Debugging":"遠端偵錯","Select File":"選取檔案","Select Python File":"選取 Python 檔案","Select Python Interpreter":"選取 Python 解譯器","Select a Python Debugger debug configuration":"選取 Python 偵錯工具偵錯設定","Select a debug configuration":"選取偵錯設定","Select the process to attach to":"選取要附加至的目標處理序","Show as Hex":"顯示為十六進位","The minimum supported Python version for the debugger extension is 3.9.":"偵測工具擴充功能的最低支援 Python 版本為 3.9。","We noticed you are attaching to ptvsd (Python debugger), which was deprecated on May 1st, 2020. Please switch to [debugpy](https://aka.ms/migrateToDebugpy).":"我們注意到您正在附加到 ptvsd (Python 偵錯工具),已於 2020 年 5 月 1 日淘汰。請切換到 [debugpy](https://aka.ms/migrateToDebugpy).","You need to select a Python interpreter before you start debugging.\n\nTip: click on \"Select Interpreter\" in the status bar.":"您必須先選取 Python 解譯器,才能開始偵錯。\n\n提示: 按一下狀態列中的 [選取解譯器]。","cwd:":"cwd:","enter-your-module-name":"enter-your-module-name"} diff --git a/package.nls.cs.json b/package.nls.cs.json new file mode 100644 index 00000000..6c8ba379 --- /dev/null +++ b/package.nls.cs.json @@ -0,0 +1 @@ +{"debugpy.command.clearCacheAndReload.title":"Vymazat okno Mezipaměti a Znovu načíst","debugpy.command.debugInTerminal.title":"Ladicí program Pythonu: Ladit soubor Pythonu","debugpy.command.debugUsingLaunchConfig.title":"Ladicí program Pythonu: Ladit pomocí souboru launch.json","debugpy.command.reportIssue.title":"Nahlásit problém…","debugpy.command.viewOutput.title":"Zobrazit výstup","debugpy.debugJustMyCode.description":"Při ladění proveďte krokování s vnořením pouze do uživatelem napsaného kódu. Pokud chcete povolit krokování s vnořením do kódu knihovny, tuto možnost zakažte.","debugpy.showPythonInlineValues.description":"Určuje, jestli se mají při ladění zobrazovat vložené hodnoty v editoru."} diff --git a/package.nls.de.json b/package.nls.de.json new file mode 100644 index 00000000..6efd1a65 --- /dev/null +++ b/package.nls.de.json @@ -0,0 +1 @@ +{"debugpy.command.clearCacheAndReload.title":"Fenster \"Cache löschen und neu laden\"","debugpy.command.debugInTerminal.title":"Python-Debugger: Python-Datei debuggen","debugpy.command.debugUsingLaunchConfig.title":"Python-Debugger: Debuggen mithilfe von launch.json","debugpy.command.reportIssue.title":"Problem melden...","debugpy.command.viewOutput.title":"Ausgabe Anzeigen","debugpy.debugJustMyCode.description":"Beim Debuggen nur vom Benutzer geschriebenen Code durchlaufen. Deaktivieren Sie diese Option, um das Durchlaufen von Bibliothekscode zuzulassen.","debugpy.showPythonInlineValues.description":"Gibt an, ob beim Debuggen Inlinewerte im Editor angezeigt werden sollen."} diff --git a/package.nls.es.json b/package.nls.es.json new file mode 100644 index 00000000..eba8a457 --- /dev/null +++ b/package.nls.es.json @@ -0,0 +1 @@ +{"debugpy.command.clearCacheAndReload.title":"Borrar la caché y volver a cargar la ventana","debugpy.command.debugInTerminal.title":"Depurador de Python: depurar archivo de Python","debugpy.command.debugUsingLaunchConfig.title":"Depurador de Python: depurar mediante launch.json","debugpy.command.reportIssue.title":"Notificar problema...","debugpy.command.viewOutput.title":"Mostrar salida","debugpy.debugJustMyCode.description":"Al depurar, solo recorrer el código escrito por el usuario. Deshabilite esta opción para permitir recorrer el código de biblioteca.","debugpy.showPythonInlineValues.description":"Si se desean mostrar los valores en línea en el editor durante la depuración."} diff --git a/package.nls.fr.json b/package.nls.fr.json new file mode 100644 index 00000000..dbf12b8e --- /dev/null +++ b/package.nls.fr.json @@ -0,0 +1 @@ +{"debugpy.command.clearCacheAndReload.title":"Effacer le cache et recharger la fenêtre","debugpy.command.debugInTerminal.title":"Débogueur Python : déboguer un fichier Python","debugpy.command.debugUsingLaunchConfig.title":"Débogueur Python : déboguer à l’aide de launch.json","debugpy.command.reportIssue.title":"Signaler un problème...","debugpy.command.viewOutput.title":"Afficher la sortie","debugpy.debugJustMyCode.description":"Lors du débogage, parcourez uniquement le code écrit par l'utilisateur. Désactivez cette option pour permettre d'accéder au code de la bibliothèque.","debugpy.showPythonInlineValues.description":"Indique s’il faut afficher les valeurs inline dans l’éditeur pendant le débogage."} diff --git a/package.nls.it.json b/package.nls.it.json new file mode 100644 index 00000000..e8b6ffca --- /dev/null +++ b/package.nls.it.json @@ -0,0 +1 @@ +{"debugpy.command.clearCacheAndReload.title":"Cancella la cache e ricarica la finestra","debugpy.command.debugInTerminal.title":"Debugger Python: esegui il debug di un file Python","debugpy.command.debugUsingLaunchConfig.title":"Debugger Python: esegui il debug con launch.json","debugpy.command.reportIssue.title":"Segnala problema...","debugpy.command.viewOutput.title":"Mostra output","debugpy.debugJustMyCode.description":"Durante il debug, eseguire solo il codice scritto dall'utente. Disabilitare questa opzione per consentire l'esecuzione di istruzioni nel codice della libreria.","debugpy.showPythonInlineValues.description":"Indica se visualizzare i valori inline nell'editor durante il debug."} diff --git a/package.nls.ja.json b/package.nls.ja.json new file mode 100644 index 00000000..b6ade88d --- /dev/null +++ b/package.nls.ja.json @@ -0,0 +1 @@ +{"debugpy.command.clearCacheAndReload.title":"キャッシュのクリアとウィンドウの再読み込み","debugpy.command.debugInTerminal.title":"Python デバッガー: Python ファイルのデバッグ","debugpy.command.debugUsingLaunchConfig.title":"Python デバッガー: launch.json を使用したデバッグ","debugpy.command.reportIssue.title":"問題の報告...","debugpy.command.viewOutput.title":"出力の表示","debugpy.debugJustMyCode.description":"ユーザーが作成したコードを使ったステップのみをデバッグする場合。これを無効にすると、ライブラリ コードにステップ インできるようになります。","debugpy.showPythonInlineValues.description":"デバッグ中にエディターにインライン値を表示するかどうか。"} diff --git a/package.nls.ko.json b/package.nls.ko.json new file mode 100644 index 00000000..5da06477 --- /dev/null +++ b/package.nls.ko.json @@ -0,0 +1 @@ +{"debugpy.command.clearCacheAndReload.title":"캐시 지우기 및 창 다시 로드","debugpy.command.debugInTerminal.title":"Python 디버거: Python 파일 디버그","debugpy.command.debugUsingLaunchConfig.title":"Python 디버거: launch.json을 사용하여 디버그","debugpy.command.reportIssue.title":"문제 보고...","debugpy.command.viewOutput.title":"출력 표시","debugpy.debugJustMyCode.description":"디버깅할 때 사용자가 작성한 코드만 단계별로 실행합니다. 라이브러리 코드를 한 단계씩 실행할 수 있게 하려면 이 기능을 비활성화하세요.","debugpy.showPythonInlineValues.description":"디버깅하는 동안 편집기에서 인라인 값을 표시할지 여부를 지정합니다."} diff --git a/package.nls.pl.json b/package.nls.pl.json new file mode 100644 index 00000000..46763fe7 --- /dev/null +++ b/package.nls.pl.json @@ -0,0 +1 @@ +{"debugpy.command.clearCacheAndReload.title":"Wyczyść pamięć podręczną i załaduj ponownie okno","debugpy.command.debugInTerminal.title":"Debuger języka Python: debugowanie pliku języka Python","debugpy.command.debugUsingLaunchConfig.title":"Debuger języka Python: debugowanie przy użyciu pliku launch.json","debugpy.command.reportIssue.title":"Zgłoś problem...","debugpy.command.viewOutput.title":"Pokaż dane wyjściowe","debugpy.debugJustMyCode.description":"Podczas debugowania przejdź przez kod napisany przez użytkownika. Wyłącz tę opcję, aby umożliwić przechodzenie do kodu biblioteki.","debugpy.showPythonInlineValues.description":"Określa, czy wyświetlać wartości śródwierszowe w edytorze podczas debugowania."} diff --git a/package.nls.pt-br.json b/package.nls.pt-br.json new file mode 100644 index 00000000..16c193ae --- /dev/null +++ b/package.nls.pt-br.json @@ -0,0 +1 @@ +{"debugpy.command.clearCacheAndReload.title":"Limpar Cache e Recarregar Janela","debugpy.command.debugInTerminal.title":"Depurador do Python: Depurar Arquivo Python","debugpy.command.debugUsingLaunchConfig.title":"Depurador do Python: depurar usando launch.json","debugpy.command.reportIssue.title":"Relatar um Problema...","debugpy.command.viewOutput.title":"Mostrar Saída","debugpy.debugJustMyCode.description":"Ao depurar, apenas percorra o código escrito pelo usuário. Desabilite isso para permitir a entrada no código da biblioteca.","debugpy.showPythonInlineValues.description":"Se desejar exibir valores em linha no editor durante a depuração."} diff --git a/package.nls.qps-ploc.json b/package.nls.qps-ploc.json new file mode 100644 index 00000000..36943fd7 --- /dev/null +++ b/package.nls.qps-ploc.json @@ -0,0 +1 @@ +{"debugpy.command.clearCacheAndReload.title":"Çlëær Çæçhë æñð Rëløæð Wïñðøw","debugpy.command.debugInTerminal.title":"Pÿthøñ Ðëþµggër: Ðëþµg Pÿthøñ Fïlë","debugpy.command.debugUsingLaunchConfig.title":"Pÿthøñ Ðëþµggër: Ðëþµg µsïñg læµñçh.jsøñ","debugpy.command.reportIssue.title":"Rëpørt Ïssµë...","debugpy.command.viewOutput.title":"§høw صtpµt","debugpy.debugJustMyCode.description":"Whëñ ðëþµggïñg øñlÿ stëp thrøµgh µsër-wrïttëñ çøðë. Ðïsæþlë thïs tø ælløw stëppïñg ïñtø lïþrærÿ çøðë.","debugpy.showPythonInlineValues.description":"Whëthër tø ðïsplæÿ ïñlïñë vælµës ïñ thë ëðïtør whïlë ðëþµggïñg."} diff --git a/package.nls.ru.json b/package.nls.ru.json new file mode 100644 index 00000000..dfb27fb3 --- /dev/null +++ b/package.nls.ru.json @@ -0,0 +1 @@ +{"debugpy.command.clearCacheAndReload.title":"Очистить кэш и перезагрузить окно","debugpy.command.debugInTerminal.title":"Отладчик Python: отладка файла Python","debugpy.command.debugUsingLaunchConfig.title":"Отладчик Python: отладка с помощью launch.json","debugpy.command.reportIssue.title":"Сообщить о проблеме…","debugpy.command.viewOutput.title":"Показать выходные данные","debugpy.debugJustMyCode.description":"При отладке выполнять только обход написанного пользователем кода. Отключите этот параметр, чтобы разрешить обход кода библиотеки.","debugpy.showPythonInlineValues.description":"Следует ли отображать встроенные значения в редакторе при отладке."} diff --git a/package.nls.tr.json b/package.nls.tr.json new file mode 100644 index 00000000..a5f9e2fe --- /dev/null +++ b/package.nls.tr.json @@ -0,0 +1 @@ +{"debugpy.command.clearCacheAndReload.title":"Önbelleği Temizleme ve Pencereyi Yeniden Yükleme","debugpy.command.debugInTerminal.title":"Python Hata Ayıklayıcı: Python Dosyasında Hata Ayıklama","debugpy.command.debugUsingLaunchConfig.title":"Python Hata Ayıklayıcı: launch.json kullanarak hata ayıklama","debugpy.command.reportIssue.title":"Sorun Bildir...","debugpy.command.viewOutput.title":"Çıkışı Göster","debugpy.debugJustMyCode.description":"Hata ayıklama sırasında yalnızca kullanıcı tarafından yazılan kod adımlarını izleyin. Kitaplık kodu adımlarını izlemeye izin vermek için bunu devre dışı bırakın.","debugpy.showPythonInlineValues.description":"Hata ayıklama sırasında satır içi değerlerin düzenleyicide gösterilip gösterilmeyeceğini belirler."} diff --git a/package.nls.zh-cn.json b/package.nls.zh-cn.json new file mode 100644 index 00000000..7e315c0f --- /dev/null +++ b/package.nls.zh-cn.json @@ -0,0 +1 @@ +{"debugpy.command.clearCacheAndReload.title":"清除缓存并重新加载窗口","debugpy.command.debugInTerminal.title":"Python 调试程序: 调试 Python 文件","debugpy.command.debugUsingLaunchConfig.title":"Python 调试程序: 使用 launch.json 进行调试","debugpy.command.reportIssue.title":"报告问题...","debugpy.command.viewOutput.title":"显示输出","debugpy.debugJustMyCode.description":"调试时,仅单步执行用户编写的代码。禁用此选项可允许单步执行库代码。","debugpy.showPythonInlineValues.description":"调试时是否在编辑器中显示内联值。"} diff --git a/package.nls.zh-tw.json b/package.nls.zh-tw.json new file mode 100644 index 00000000..6c69a2e3 --- /dev/null +++ b/package.nls.zh-tw.json @@ -0,0 +1 @@ +{"debugpy.command.clearCacheAndReload.title":"清除快取並重新載入視窗","debugpy.command.debugInTerminal.title":"Python 偵錯工具: 偵錯 Python 檔案","debugpy.command.debugUsingLaunchConfig.title":"Python 偵錯工具: 使用 launch.json 進行偵錯","debugpy.command.reportIssue.title":"回報問題...","debugpy.command.viewOutput.title":"顯示輸出","debugpy.debugJustMyCode.description":"偵錯時,僅逐步執行使用者寫入的程式碼。停用此選項以允許逐步執行程式庫程式碼。","debugpy.showPythonInlineValues.description":"是否要在偵錯時於編輯器中顯示內嵌值。"} diff --git a/telemetry.json b/telemetry.json new file mode 100644 index 00000000..4a5c7e34 --- /dev/null +++ b/telemetry.json @@ -0,0 +1 @@ +{"events":{"ms-python.debugpydebug.success_activation":{"codeloadingtime":{"classification":"SystemMetaData","purpose":"FeatureInsight","owner":"eleanorjboyd"},"errorname":{"classification":"CallstackOrException","purpose":"PerformanceAndHealth","owner":"eleanorjboyd"}},"ms-python.debugpydebug_in_terminal_button":{"owner":"eleanorjboyd"},"ms-python.debugpydebug_using_launch_config_button":{"owner":"eleanorjboyd"},"ms-python.debugpydebug_adapter.using_wheels_path":{"usingwheels":{"classification":"SystemMetaData","purpose":"FeatureInsight","owner":"eleanorjboyd"}},"ms-python.debugpydebug_session.start":{"duration":{"classification":"SystemMetaData","purpose":"FeatureInsight","owner":"eleanorjboyd"},"trigger":{"classification":"SystemMetaData","purpose":"PerformanceAndHealth","owner":"eleanorjboyd"},"console":{"classification":"SystemMetaData","purpose":"PerformanceAndHealth","owner":"eleanorjboyd"}},"ms-python.debugpydebug_session.error":{"duration":{"classification":"SystemMetaData","purpose":"FeatureInsight","owner":"eleanorjboyd"},"trigger":{"classification":"SystemMetaData","purpose":"PerformanceAndHealth","owner":"eleanorjboyd"},"console":{"classification":"SystemMetaData","purpose":"PerformanceAndHealth","owner":"eleanorjboyd"}},"ms-python.debugpydebug_session.stop":{"duration":{"classification":"SystemMetaData","purpose":"FeatureInsight","owner":"eleanorjboyd"},"trigger":{"classification":"SystemMetaData","purpose":"PerformanceAndHealth","owner":"eleanorjboyd"},"console":{"classification":"SystemMetaData","purpose":"PerformanceAndHealth","owner":"eleanorjboyd"}},"ms-python.debugpydebug_session.user_code_running":{"duration":{"classification":"SystemMetaData","purpose":"FeatureInsight","owner":"eleanorjboyd"},"trigger":{"classification":"SystemMetaData","purpose":"PerformanceAndHealth","owner":"eleanorjboyd"},"console":{"classification":"SystemMetaData","purpose":"PerformanceAndHealth","owner":"eleanorjboyd"}},"ms-python.debugpydebugger":{"trigger":{"classification":"SystemMetaData","purpose":"FeatureInsight","owner":"eleanorjboyd"},"console":{"classification":"SystemMetaData","purpose":"FeatureInsight","owner":"eleanorjboyd"},"hasenvvars":{"classification":"SystemMetaData","purpose":"FeatureInsight","owner":"eleanorjboyd"},"hasargs":{"classification":"SystemMetaData","purpose":"FeatureInsight","owner":"eleanorjboyd"},"django":{"classification":"SystemMetaData","purpose":"FeatureInsight","owner":"eleanorjboyd"},"fastapi":{"classification":"SystemMetaData","purpose":"FeatureInsight","owner":"eleanorjboyd"},"flask":{"classification":"SystemMetaData","purpose":"FeatureInsight","owner":"eleanorjboyd"},"jinja":{"classification":"SystemMetaData","purpose":"FeatureInsight","owner":"eleanorjboyd"},"islocalhost":{"classification":"SystemMetaData","purpose":"FeatureInsight","owner":"eleanorjboyd"},"ismodule":{"classification":"SystemMetaData","purpose":"FeatureInsight","owner":"eleanorjboyd"},"issudo":{"classification":"SystemMetaData","purpose":"FeatureInsight","owner":"eleanorjboyd"},"stoponentry":{"classification":"SystemMetaData","purpose":"FeatureInsight","owner":"eleanorjboyd"},"showreturnvalue":{"classification":"SystemMetaData","purpose":"FeatureInsight","owner":"eleanorjboyd"},"pyramid":{"classification":"SystemMetaData","purpose":"FeatureInsight","owner":"eleanorjboyd"},"subprocess":{"classification":"SystemMetaData","purpose":"FeatureInsight","owner":"eleanorjboyd"},"watson":{"classification":"SystemMetaData","purpose":"FeatureInsight","owner":"eleanorjboyd"},"pyspark":{"classification":"SystemMetaData","purpose":"FeatureInsight","owner":"eleanorjboyd"},"gevent":{"classification":"SystemMetaData","purpose":"FeatureInsight","owner":"eleanorjboyd"},"scrapy":{"classification":"SystemMetaData","purpose":"FeatureInsight","owner":"eleanorjboyd"}},"ms-python.debugpydebugger.attach_to_child_process":{"duration":{"classification":"SystemMetaData","purpose":"FeatureInsight","owner":"eleanorjboyd","isMeasurement":true}},"ms-python.debugpydebugger.attach_to_local_process":{"owner":"eleanorjboyd"},"ms-python.debugpydebugger.configuration.prompts":{"configurationtype":{"classification":"SystemMetaData","purpose":"FeatureInsight","owner":"eleanorjboyd"},"autodetecteddjangomanagepypath":{"classification":"SystemMetaData","purpose":"FeatureInsight","owner":"eleanorjboyd"},"autodetectedpyramidinipath":{"classification":"SystemMetaData","purpose":"FeatureInsight","owner":"eleanorjboyd"},"autodetectedfastapimainpypath":{"classification":"SystemMetaData","purpose":"FeatureInsight","owner":"eleanorjboyd"},"autodetectedflaskapppypath":{"classification":"SystemMetaData","purpose":"FeatureInsight","owner":"eleanorjboyd"},"manuallyenteredavalue":{"classification":"SystemMetaData","purpose":"FeatureInsight","owner":"eleanorjboyd"},"browsefilevalue":{"classification":"SystemMetaData","purpose":"FeatureInsight","owner":"eleanorjboyd"}},"ms-python.debugpydebugger.configuration.prompts.in.launch.json":{"owner":"eleanorjboyd"},"ms-python.debugpyenvfile_variable_substitution":{"owner":"karthiknadig"},"ms-python.debugpyuse_report_issue_command":{"owner":"eleanorjboyd"},"ms-python.debugpydebugger_dynamic_config":{"owner":"eleanorjboyd"},"ms-python.debugpyDEBUGGER_PYTHON_37_DEPRECATED":{"owner":"eleanorjboyd"},"ms-python.debugpyDEBUGGER_SHOW_PYTHON_INLINE_VALUES":{"owner":"eleanorjboyd"},"ms-python.debugpydeprecated_code_path_usage":{"codepath":{"classification":"SystemMetaData","purpose":"FeatureInsight","owner":"eleanorjboyd"}}},"commonProperties":{}} From 8c399f1d136fe5a0dde1a7ccb7cead7624c75f0c Mon Sep 17 00:00:00 2001 From: bschnurr Date: Wed, 7 Jan 2026 13:57:34 -0800 Subject: [PATCH 03/59] try disable pipauth --- build/templates/setup.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/build/templates/setup.yml b/build/templates/setup.yml index 694218b0..71b218a8 100644 --- a/build/templates/setup.yml +++ b/build/templates/setup.yml @@ -13,10 +13,10 @@ steps: checkLatest: true displayName: Select Node 22 LTS - - task: PipAuthenticate@1 - displayName: 'Pip Authenticate' - inputs: - artifactFeeds: 'DevDiv/debugpy' + # - task: PipAuthenticate@1 + # displayName: 'Pip Authenticate' + # inputs: + # artifactFeeds: 'DevDiv/debugpy' - task: UsePythonVersion@0 inputs: From 23c4f7f2b39a5d0d333b16bc7ec62e315b7bd2b4 Mon Sep 17 00:00:00 2001 From: bschnurr Date: Wed, 7 Jan 2026 14:22:40 -0800 Subject: [PATCH 04/59] =?UTF-8?q?Switched=20the=20install=5Fbundled=5Flibs?= =?UTF-8?q?=20nox=20session=20to=20fetch=20debugpy=20via=20pip=20download?= =?UTF-8?q?=20+=20wheel=20extraction,=20instead=20of=20urllib.request.urlo?= =?UTF-8?q?pen()=20against=20the=20pinned=20URLs=20in=20debugpy=5Finfo.jso?= =?UTF-8?q?n.=20This=20makes=20the=20download=20respect=20your=20pip=20con?= =?UTF-8?q?figuration=20(proxy,=20internal=20index/mirror,=20certs)=20and?= =?UTF-8?q?=20avoids=20hard-coded=20files.pythonhosted.org=20URLs.=20Added?= =?UTF-8?q?=20=5Finfer=5Fdebugpy=5Fversion()=20so=20the=20build=20can=20st?= =?UTF-8?q?ill=20determine=20which=20debugpy=3D=3D...=20to=20download:=20u?= =?UTF-8?q?ses=20DEBUGPY=5FVERSION=20if=20set,=20otherwise=20parses=20the?= =?UTF-8?q?=20version=20out=20of=20debugpy=5Finfo.json=20(so=20you=20don?= =?UTF-8?q?=E2=80=99t=20have=20to=20change=20version=20management=20right?= =?UTF-8?q?=20now).=20Added=20download=5Fdebugpy=5Fvia=5Fpip()=20which=20d?= =?UTF-8?q?ownloads=20the=20appropriate=20wheels=20for=20the=20target:=20I?= =?UTF-8?q?f=20VSCETARGET=20is=20win32-x64,=20linux-x64,=20or=20darwin*,?= =?UTF-8?q?=20it=20downloads=20cp310/cp311/cp312=20wheels=20for=20that=20p?= =?UTF-8?q?latform=20(same=20intent=20as=20the=20old=20JSON=20approach).?= =?UTF-8?q?=20If=20VSCETARGET=20is=20missing/unknown,=20it=20downloads=20t?= =?UTF-8?q?he=20universal=20none-any=20wheel=20via=20a=20valid=20pip=20?= =?UTF-8?q?=E2=80=9Ctarget=20tag=E2=80=9D=20(--python-version=2039=20--imp?= =?UTF-8?q?lementation=20cp=20--abi=20none=20--platform=20any).=20Verified?= =?UTF-8?q?=20locally:=20python=20-m=20nox=20--session=20install=5Fbundled?= =?UTF-8?q?=5Flibs=20now=20succeeds=20(after=20fixing=20the=20fallback=20p?= =?UTF-8?q?ip=20arguments).?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build/templates/setup.yml | 8 +-- noxfile.py | 121 ++++++++++++++++++++++++++++++++++---- 2 files changed, 115 insertions(+), 14 deletions(-) diff --git a/build/templates/setup.yml b/build/templates/setup.yml index 71b218a8..694218b0 100644 --- a/build/templates/setup.yml +++ b/build/templates/setup.yml @@ -13,10 +13,10 @@ steps: checkLatest: true displayName: Select Node 22 LTS - # - task: PipAuthenticate@1 - # displayName: 'Pip Authenticate' - # inputs: - # artifactFeeds: 'DevDiv/debugpy' + - task: PipAuthenticate@1 + displayName: 'Pip Authenticate' + inputs: + artifactFeeds: 'DevDiv/debugpy' - task: UsePythonVersion@0 inputs: diff --git a/noxfile.py b/noxfile.py index 0d89c14a..66261fbc 100644 --- a/noxfile.py +++ b/noxfile.py @@ -8,6 +8,7 @@ import os import pathlib import re +import tempfile import urllib.request as url_lib import zipfile @@ -59,21 +60,121 @@ def install_bundled_libs(session): ) session.install("packaging") + target = os.environ.get("VSCETARGET", "") + print("target:", target) + download_debugpy_via_pip(session, target) + + +def _infer_debugpy_version() -> str: + """Best-effort debugpy version selection. + + Priority: + 1) DEBUGPY_VERSION env var + 2) Extract from debugpy_info.json (if present) + """ + + env_version = os.environ.get("DEBUGPY_VERSION") + if env_version: + return env_version + debugpy_info_json_path = pathlib.Path(__file__).parent / "debugpy_info.json" + if not debugpy_info_json_path.exists(): + raise FileNotFoundError( + "Missing debugpy version source. Set DEBUGPY_VERSION or add debugpy_info.json." + ) + debugpy_info = json.loads(debugpy_info_json_path.read_text(encoding="utf-8")) + for platform_entries in debugpy_info.values(): + for entry in platform_entries: + match = re.search(r"/debugpy-([^/]+?)-", entry.get("url", "")) + if match: + return match.group(1) + + raise ValueError( + "Could not infer debugpy version from debugpy_info.json. Set DEBUGPY_VERSION." + ) - target = os.environ.get("VSCETARGET", "") - print("target:", target) + +def download_debugpy_via_pip(session: nox.Session, target: str) -> None: + """Downloads debugpy wheels via pip and extracts them into bundled/libs. + + This respects pip configuration (index URLs, proxies, certs) and avoids hard-coded + direct downloads from files.pythonhosted.org. + """ + + debugpy_version = _infer_debugpy_version() + libs_dir = pathlib.Path.cwd() / "bundled" / "libs" + libs_dir.mkdir(parents=True, exist_ok=True) + + # Match prior behavior: bundle debugpy wheels for the target (or universal fallback). + # We download multiple wheels for multiple CPython versions, because the extension may + # be used with different interpreter versions. + # + # Format: (python_version, implementation, abi, platform) if "darwin" in target: - download_url(debugpy_info["macOS"]) - elif "win32-ia32" == target: - download_url(debugpy_info["win32"]) - elif "win32-x64" == target: - download_url(debugpy_info["win64"]) - elif "linux-x64" == target: - download_url(debugpy_info["linux"]) + wheel_requests = [ + ("310", "cp", "cp310", "macosx_15_0_x86_64"), + ("311", "cp", "cp311", "macosx_15_0_universal2"), + ("312", "cp", "cp312", "macosx_15_0_universal2"), + ] + elif target == "win32-ia32": + wheel_requests = [ + ("310", "cp", "cp310", "win32"), + ("311", "cp", "cp311", "win32"), + ("312", "cp", "cp312", "win32"), + ] + elif target == "win32-x64": + wheel_requests = [ + ("310", "cp", "cp310", "win_amd64"), + ("311", "cp", "cp311", "win_amd64"), + ("312", "cp", "cp312", "win_amd64"), + ] + elif target == "linux-x64": + wheel_requests = [ + ("310", "cp", "cp310", "manylinux_2_34_x86_64"), + ("311", "cp", "cp311", "manylinux_2_34_x86_64"), + ("312", "cp", "cp312", "manylinux_2_34_x86_64"), + ] else: - download_url(debugpy_info["any"]) + # Universal fallback wheel (py2.py3-none-any). + wheel_requests = [("39", "cp", "none", "any")] + + with tempfile.TemporaryDirectory(prefix="debugpy_wheels_") as tmp_dir: + tmp_path = pathlib.Path(tmp_dir) + for py_ver, impl, abi, platform_tag in wheel_requests: + session.run( + "python", + "-m", + "pip", + "download", + f"debugpy=={debugpy_version}", + "--no-deps", + "--only-binary", + ":all:", + "--dest", + str(tmp_path), + "--python-version", + py_ver, + "--implementation", + impl, + "--abi", + abi, + "--platform", + platform_tag, + ) + + wheel_paths = sorted(tmp_path.glob("debugpy-*.whl")) + if not wheel_paths: + raise FileNotFoundError( + f"pip download produced no debugpy wheels for version {debugpy_version}." + ) + + for wheel_path in wheel_paths: + print("Download:", wheel_path.name) + with zipfile.ZipFile(wheel_path, "r") as wheel: + for zip_info in wheel.infolist(): + print("\t" + zip_info.filename) + wheel.extract(zip_info.filename, libs_dir) def download_url(values): From 1b6ce8391a4d6f15cddba55264948f34eb78577b Mon Sep 17 00:00:00 2001 From: bschnurr Date: Wed, 7 Jan 2026 15:47:54 -0800 Subject: [PATCH 05/59] updat vsce --- package-lock.json | 4401 ++++++++++++++++++++++++++++++++++++--------- package.json | 2 +- 2 files changed, 3553 insertions(+), 850 deletions(-) diff --git a/package-lock.json b/package-lock.json index 17ad5a35..2cbce9b1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -33,7 +33,7 @@ "@typescript-eslint/eslint-plugin": "^5.62.0", "@typescript-eslint/parser": "^5.62.0", "@vscode/test-electron": "^2.3.9", - "@vscode/vsce": "^2.24.0", + "@vscode/vsce": "^3.7.1-1", "chai": "^4.3.7", "chai-as-promised": "^7.1.1", "eslint": "^8.50.0", @@ -62,6 +62,23 @@ "node": ">=0.10.0" } }, + "node_modules/@azu/format-text": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@azu/format-text/-/format-text-1.0.2.tgz", + "integrity": "sha512-Swi4N7Edy1Eqq82GxgEECXSSLyn6GOb5htRFPzBDdUkECGXtlf12ynO5oJSpWKPwCaUssOu7NfhDcCWpIC6Ywg==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@azu/style-format": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@azu/style-format/-/style-format-1.0.1.tgz", + "integrity": "sha512-AHcTojlNBdD/3/KxIKlg8sxIWHfOtQszLvOpagLTO+bjC3u7SAszu1lf//u7JJC50aUSH+BVWDD/KvaA6Gfn5g==", + "dev": true, + "license": "WTFPL", + "dependencies": { + "@azu/format-text": "^1.0.1" + } + }, "node_modules/@azure/abort-controller": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.1.2.tgz", @@ -74,16 +91,84 @@ } }, "node_modules/@azure/core-auth": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/@azure/core-auth/-/core-auth-1.7.2.tgz", - "integrity": "sha512-Igm/S3fDYmnMq1uKS38Ae1/m37B3zigdlZw+kocwEhh5GjyKjPrXKO2J6rzpC1wAxrNil/jX9BJRqBshyjnF3g==", + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/@azure/core-auth/-/core-auth-1.10.1.tgz", + "integrity": "sha512-ykRMW8PjVAn+RS6ww5cmK9U2CyH9p4Q88YJwvUslfuMmN98w/2rdGRLPqJYObapBCdzBVeDgYWdJnFPFb7qzpg==", + "license": "MIT", "dependencies": { - "@azure/abort-controller": "^2.0.0", - "@azure/core-util": "^1.1.0", + "@azure/abort-controller": "^2.1.2", + "@azure/core-util": "^1.13.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=18.0.0" + "node": ">=20.0.0" + } + }, + "node_modules/@azure/core-auth/node_modules/@azure/core-util": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/@azure/core-util/-/core-util-1.13.1.tgz", + "integrity": "sha512-XPArKLzsvl0Hf0CaGyKHUyVgF7oDnhKoP85Xv6M4StF/1AhfORhZudHtOyf2s+FcbuQ9dPRAjB8J2KvRRMUK2A==", + "license": "MIT", + "dependencies": { + "@azure/abort-controller": "^2.1.2", + "@typespec/ts-http-runtime": "^0.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@azure/core-client": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/@azure/core-client/-/core-client-1.10.1.tgz", + "integrity": "sha512-Nh5PhEOeY6PrnxNPsEHRr9eimxLwgLlpmguQaHKBinFYA/RU9+kOYVOQqOrTsCL+KSxrLLl1gD8Dk5BFW/7l/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@azure/abort-controller": "^2.1.2", + "@azure/core-auth": "^1.10.0", + "@azure/core-rest-pipeline": "^1.22.0", + "@azure/core-tracing": "^1.3.0", + "@azure/core-util": "^1.13.0", + "@azure/logger": "^1.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@azure/core-client/node_modules/@azure/core-rest-pipeline": { + "version": "1.22.2", + "resolved": "https://registry.npmjs.org/@azure/core-rest-pipeline/-/core-rest-pipeline-1.22.2.tgz", + "integrity": "sha512-MzHym+wOi8CLUlKCQu12de0nwcq9k9Kuv43j4Wa++CsCpJwps2eeBQwD2Bu8snkxTtDKDx4GwjuR9E8yC8LNrg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@azure/abort-controller": "^2.1.2", + "@azure/core-auth": "^1.10.0", + "@azure/core-tracing": "^1.3.0", + "@azure/core-util": "^1.13.0", + "@azure/logger": "^1.3.0", + "@typespec/ts-http-runtime": "^0.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@azure/core-client/node_modules/@azure/core-util": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/@azure/core-util/-/core-util-1.13.1.tgz", + "integrity": "sha512-XPArKLzsvl0Hf0CaGyKHUyVgF7oDnhKoP85Xv6M4StF/1AhfORhZudHtOyf2s+FcbuQ9dPRAjB8J2KvRRMUK2A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@azure/abort-controller": "^2.1.2", + "@typespec/ts-http-runtime": "^0.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" } }, "node_modules/@azure/core-rest-pipeline": { @@ -139,14 +224,15 @@ } }, "node_modules/@azure/core-tracing": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@azure/core-tracing/-/core-tracing-1.1.2.tgz", - "integrity": "sha512-dawW9ifvWAWmUm9/h+/UQ2jrdvjCJ7VJEuCJ6XVNudzcOwm53BFZH4Q845vjfgoUAM8ZxokvVNxNxAITc502YA==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@azure/core-tracing/-/core-tracing-1.3.1.tgz", + "integrity": "sha512-9MWKevR7Hz8kNzzPLfX4EAtGM2b8mr50HPDBvio96bURP/9C+HjdH3sBlLSNNrvRAr5/k/svoH457gB5IKpmwQ==", + "license": "MIT", "dependencies": { "tslib": "^2.6.2" }, "engines": { - "node": ">=18.0.0" + "node": ">=20.0.0" } }, "node_modules/@azure/core-util": { @@ -172,15 +258,112 @@ "node": ">=12.0.0" } }, + "node_modules/@azure/identity": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@azure/identity/-/identity-4.13.0.tgz", + "integrity": "sha512-uWC0fssc+hs1TGGVkkghiaFkkS7NkTxfnCH+Hdg+yTehTpMcehpok4PgUKKdyCH+9ldu6FhiHRv84Ntqj1vVcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@azure/abort-controller": "^2.0.0", + "@azure/core-auth": "^1.9.0", + "@azure/core-client": "^1.9.2", + "@azure/core-rest-pipeline": "^1.17.0", + "@azure/core-tracing": "^1.0.0", + "@azure/core-util": "^1.11.0", + "@azure/logger": "^1.0.0", + "@azure/msal-browser": "^4.2.0", + "@azure/msal-node": "^3.5.0", + "open": "^10.1.0", + "tslib": "^2.2.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@azure/identity/node_modules/@azure/core-rest-pipeline": { + "version": "1.22.2", + "resolved": "https://registry.npmjs.org/@azure/core-rest-pipeline/-/core-rest-pipeline-1.22.2.tgz", + "integrity": "sha512-MzHym+wOi8CLUlKCQu12de0nwcq9k9Kuv43j4Wa++CsCpJwps2eeBQwD2Bu8snkxTtDKDx4GwjuR9E8yC8LNrg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@azure/abort-controller": "^2.1.2", + "@azure/core-auth": "^1.10.0", + "@azure/core-tracing": "^1.3.0", + "@azure/core-util": "^1.13.0", + "@azure/logger": "^1.3.0", + "@typespec/ts-http-runtime": "^0.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@azure/identity/node_modules/@azure/core-util": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/@azure/core-util/-/core-util-1.13.1.tgz", + "integrity": "sha512-XPArKLzsvl0Hf0CaGyKHUyVgF7oDnhKoP85Xv6M4StF/1AhfORhZudHtOyf2s+FcbuQ9dPRAjB8J2KvRRMUK2A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@azure/abort-controller": "^2.1.2", + "@typespec/ts-http-runtime": "^0.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, "node_modules/@azure/logger": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@azure/logger/-/logger-1.1.3.tgz", - "integrity": "sha512-J8/cIKNQB1Fc9fuYqBVnrppiUtW+5WWJPCj/tAokC5LdSTwkWWttN+jsRgw9BLYD7JDBx7PceiqOBxJJ1tQz3Q==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@azure/logger/-/logger-1.3.0.tgz", + "integrity": "sha512-fCqPIfOcLE+CGqGPd66c8bZpwAji98tZ4JI9i/mlTNTlsIWslCfpg48s/ypyLxZTump5sypjrKn2/kY7q8oAbA==", + "license": "MIT", "dependencies": { + "@typespec/ts-http-runtime": "^0.3.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=18.0.0" + "node": ">=20.0.0" + } + }, + "node_modules/@azure/msal-browser": { + "version": "4.27.0", + "resolved": "https://registry.npmjs.org/@azure/msal-browser/-/msal-browser-4.27.0.tgz", + "integrity": "sha512-bZ8Pta6YAbdd0o0PEaL1/geBsPrLEnyY/RDWqvF1PP9RUH8EMLvUMGoZFYS6jSlUan6KZ9IMTLCnwpWWpQRK/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@azure/msal-common": "15.13.3" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@azure/msal-common": { + "version": "15.13.3", + "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-15.13.3.tgz", + "integrity": "sha512-shSDU7Ioecya+Aob5xliW9IGq1Ui8y4EVSdWGyI1Gbm4Vg61WpP95LuzcY214/wEjSn6w4PZYD4/iVldErHayQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@azure/msal-node": { + "version": "3.8.4", + "resolved": "https://registry.npmjs.org/@azure/msal-node/-/msal-node-3.8.4.tgz", + "integrity": "sha512-lvuAwsDpPDE/jSuVQOBMpLbXuVuLsPNRwWCyK3/6bPlBk0fGWegqoZ0qjZclMWyQ2JNvIY3vHY7hoFmFmFQcOw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@azure/msal-common": "15.13.3", + "jsonwebtoken": "^9.0.0", + "uuid": "^8.3.0" + }, + "engines": { + "node": ">=16" } }, "node_modules/@azure/opentelemetry-instrumentation-azure-sdk": { @@ -199,6 +382,31 @@ "node": ">=14.0.0" } }, + "node_modules/@babel/code-frame": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.27.1", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@discoveryjs/json-ext": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", @@ -297,6 +505,132 @@ "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", "dev": true }, + "node_modules/@isaacs/balanced-match": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz", + "integrity": "sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/@isaacs/brace-expansion": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@isaacs/brace-expansion/-/brace-expansion-5.0.0.tgz", + "integrity": "sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@isaacs/balanced-match": "^4.0.1" + }, + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, "node_modules/@jridgewell/gen-mapping": { "version": "0.3.5", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", @@ -570,6 +904,246 @@ "node": ">=14" } }, + "node_modules/@secretlint/config-creator": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/@secretlint/config-creator/-/config-creator-10.2.2.tgz", + "integrity": "sha512-BynOBe7Hn3LJjb3CqCHZjeNB09s/vgf0baBaHVw67w7gHF0d25c3ZsZ5+vv8TgwSchRdUCRrbbcq5i2B1fJ2QQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@secretlint/types": "^10.2.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@secretlint/config-loader": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/@secretlint/config-loader/-/config-loader-10.2.2.tgz", + "integrity": "sha512-ndjjQNgLg4DIcMJp4iaRD6xb9ijWQZVbd9694Ol2IszBIbGPPkwZHzJYKICbTBmh6AH/pLr0CiCaWdGJU7RbpQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@secretlint/profiler": "^10.2.2", + "@secretlint/resolver": "^10.2.2", + "@secretlint/types": "^10.2.2", + "ajv": "^8.17.1", + "debug": "^4.4.1", + "rc-config-loader": "^4.1.3" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@secretlint/config-loader/node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/@secretlint/config-loader/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true, + "license": "MIT" + }, + "node_modules/@secretlint/core": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/@secretlint/core/-/core-10.2.2.tgz", + "integrity": "sha512-6rdwBwLP9+TO3rRjMVW1tX+lQeo5gBbxl1I5F8nh8bgGtKwdlCMhMKsBWzWg1ostxx/tIG7OjZI0/BxsP8bUgw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@secretlint/profiler": "^10.2.2", + "@secretlint/types": "^10.2.2", + "debug": "^4.4.1", + "structured-source": "^4.0.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@secretlint/formatter": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/@secretlint/formatter/-/formatter-10.2.2.tgz", + "integrity": "sha512-10f/eKV+8YdGKNQmoDUD1QnYL7TzhI2kzyx95vsJKbEa8akzLAR5ZrWIZ3LbcMmBLzxlSQMMccRmi05yDQ5YDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@secretlint/resolver": "^10.2.2", + "@secretlint/types": "^10.2.2", + "@textlint/linter-formatter": "^15.2.0", + "@textlint/module-interop": "^15.2.0", + "@textlint/types": "^15.2.0", + "chalk": "^5.4.1", + "debug": "^4.4.1", + "pluralize": "^8.0.0", + "strip-ansi": "^7.1.0", + "table": "^6.9.0", + "terminal-link": "^4.0.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@secretlint/formatter/node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@secretlint/formatter/node_modules/chalk": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", + "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@secretlint/formatter/node_modules/strip-ansi": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@secretlint/node": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/@secretlint/node/-/node-10.2.2.tgz", + "integrity": "sha512-eZGJQgcg/3WRBwX1bRnss7RmHHK/YlP/l7zOQsrjexYt6l+JJa5YhUmHbuGXS94yW0++3YkEJp0kQGYhiw1DMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@secretlint/config-loader": "^10.2.2", + "@secretlint/core": "^10.2.2", + "@secretlint/formatter": "^10.2.2", + "@secretlint/profiler": "^10.2.2", + "@secretlint/source-creator": "^10.2.2", + "@secretlint/types": "^10.2.2", + "debug": "^4.4.1", + "p-map": "^7.0.3" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@secretlint/profiler": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/@secretlint/profiler/-/profiler-10.2.2.tgz", + "integrity": "sha512-qm9rWfkh/o8OvzMIfY8a5bCmgIniSpltbVlUVl983zDG1bUuQNd1/5lUEeWx5o/WJ99bXxS7yNI4/KIXfHexig==", + "dev": true, + "license": "MIT" + }, + "node_modules/@secretlint/resolver": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/@secretlint/resolver/-/resolver-10.2.2.tgz", + "integrity": "sha512-3md0cp12e+Ae5V+crPQYGd6aaO7ahw95s28OlULGyclyyUtf861UoRGS2prnUrKh7MZb23kdDOyGCYb9br5e4w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@secretlint/secretlint-formatter-sarif": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/@secretlint/secretlint-formatter-sarif/-/secretlint-formatter-sarif-10.2.2.tgz", + "integrity": "sha512-ojiF9TGRKJJw308DnYBucHxkpNovDNu1XvPh7IfUp0A12gzTtxuWDqdpuVezL7/IP8Ua7mp5/VkDMN9OLp1doQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "node-sarif-builder": "^3.2.0" + } + }, + "node_modules/@secretlint/secretlint-rule-no-dotenv": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/@secretlint/secretlint-rule-no-dotenv/-/secretlint-rule-no-dotenv-10.2.2.tgz", + "integrity": "sha512-KJRbIShA9DVc5Va3yArtJ6QDzGjg3PRa1uYp9As4RsyKtKSSZjI64jVca57FZ8gbuk4em0/0Jq+uy6485wxIdg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@secretlint/types": "^10.2.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@secretlint/secretlint-rule-preset-recommend": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/@secretlint/secretlint-rule-preset-recommend/-/secretlint-rule-preset-recommend-10.2.2.tgz", + "integrity": "sha512-K3jPqjva8bQndDKJqctnGfwuAxU2n9XNCPtbXVI5JvC7FnQiNg/yWlQPbMUlBXtBoBGFYp08A94m6fvtc9v+zA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@secretlint/source-creator": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/@secretlint/source-creator/-/source-creator-10.2.2.tgz", + "integrity": "sha512-h6I87xJfwfUTgQ7irWq7UTdq/Bm1RuQ/fYhA3dtTIAop5BwSFmZyrchph4WcoEvbN460BWKmk4RYSvPElIIvxw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@secretlint/types": "^10.2.2", + "istextorbinary": "^9.5.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@secretlint/types": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/@secretlint/types/-/types-10.2.2.tgz", + "integrity": "sha512-Nqc90v4lWCXyakD6xNyNACBJNJ0tNCwj2WNk/7ivyacYHxiITVgmLUFXTBOeCdy79iz6HtN9Y31uw/jbLrdOAg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@sindresorhus/merge-streams": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz", + "integrity": "sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@sinonjs/commons": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz", @@ -614,6 +1188,67 @@ "integrity": "sha512-sXXKG+uL9IrKqViTtao2Ws6dy0znu9sOaP1di/jKGW1M6VssO8vlpXCQcpZ+jisQ1tTFAC5Jo/EOzFbggBagFQ==", "dev": true }, + "node_modules/@textlint/ast-node-types": { + "version": "15.5.0", + "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-15.5.0.tgz", + "integrity": "sha512-K0LEuuTo4rza8yDrlYkRdXLao8Iz/QBMsQdIxRrOOrLYb4HAtZaypZ78c+J6rDA1UlGxadZVLmkkiv4KV5fMKQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@textlint/linter-formatter": { + "version": "15.5.0", + "resolved": "https://registry.npmjs.org/@textlint/linter-formatter/-/linter-formatter-15.5.0.tgz", + "integrity": "sha512-DPTm2+VXKID41qKQWagg/4JynM6hEEpvbq0PlGsEoC4Xm7IqXIxFym3mSf5+ued0cuiIV1hR9kgXjqGdP035tw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@azu/format-text": "^1.0.2", + "@azu/style-format": "^1.0.1", + "@textlint/module-interop": "15.5.0", + "@textlint/resolver": "15.5.0", + "@textlint/types": "15.5.0", + "chalk": "^4.1.2", + "debug": "^4.4.3", + "js-yaml": "^4.1.1", + "lodash": "^4.17.21", + "pluralize": "^2.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "table": "^6.9.0", + "text-table": "^0.2.0" + } + }, + "node_modules/@textlint/linter-formatter/node_modules/pluralize": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-2.0.0.tgz", + "integrity": "sha512-TqNZzQCD4S42De9IfnnBvILN7HAW7riLqsCyp8lgjXeysyPlX5HhqKAcJHHHb9XskE4/a+7VGC9zzx8Ls0jOAw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@textlint/module-interop": { + "version": "15.5.0", + "resolved": "https://registry.npmjs.org/@textlint/module-interop/-/module-interop-15.5.0.tgz", + "integrity": "sha512-rqfouEhBEgZlR9umswWXXRBcmmSM28Trpr9b0duzgehKYVc7wSQCuQMagr6YBJa2NRMfRNinupusbJXMg0ij2A==", + "dev": true, + "license": "MIT" + }, + "node_modules/@textlint/resolver": { + "version": "15.5.0", + "resolved": "https://registry.npmjs.org/@textlint/resolver/-/resolver-15.5.0.tgz", + "integrity": "sha512-kK5nFbg5N3kVoZExQI/dnYjCInmTltvXDnuCRrBxHI01i6kO/o8R7Lc2aFkAZ6/NUZuRPalkyDdwZJke4/R2wg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@textlint/types": { + "version": "15.5.0", + "resolved": "https://registry.npmjs.org/@textlint/types/-/types-15.5.0.tgz", + "integrity": "sha512-EjAPbuA+3NyQ9WyFP7iUlddi35F3mGrf4tb4cZM0nWywbtEJ3+XAYqL+5RsF0qFeSguxGir09NdZOWrG9wVOUQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@textlint/ast-node-types": "15.5.0" + } + }, "node_modules/@tootallnate/once": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", @@ -708,6 +1343,20 @@ "undici-types": "~6.21.0" } }, + "node_modules/@types/normalize-package-data": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", + "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/sarif": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/@types/sarif/-/sarif-2.1.7.tgz", + "integrity": "sha512-kRz0VEkJqWLf1LLVN4pT1cg1Z9wAuvI6L97V3m2f5B76Tg8d413ddvLBPTEHAZJlnn4XSvu0FkZtViCQGVyrXQ==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/semver": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/@types/semver/-/semver-5.5.0.tgz", @@ -936,6 +1585,55 @@ "url": "https://opencollective.com/typescript-eslint" } }, + "node_modules/@typespec/ts-http-runtime": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@typespec/ts-http-runtime/-/ts-http-runtime-0.3.2.tgz", + "integrity": "sha512-IlqQ/Gv22xUC1r/WQm4StLkYQmaaTsXAhUVsNE0+xiyf0yRFiH5++q78U3bw6bLKDCTmh0uqKB9eG9+Bt75Dkg==", + "license": "MIT", + "dependencies": { + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@typespec/ts-http-runtime/node_modules/agent-base": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "node_modules/@typespec/ts-http-runtime/node_modules/http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@typespec/ts-http-runtime/node_modules/https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, "node_modules/@vscode/debugadapter": { "version": "1.65.0", "resolved": "https://registry.npmjs.org/@vscode/debugadapter/-/debugadapter-1.65.0.tgz", @@ -1034,26 +1732,36 @@ } }, "node_modules/@vscode/vsce": { - "version": "2.24.0", - "resolved": "https://registry.npmjs.org/@vscode/vsce/-/vsce-2.24.0.tgz", - "integrity": "sha512-p6CIXpH5HXDqmUkgFXvIKTjZpZxy/uDx4d/UsfhS9vQUun43KDNUbYeZocyAHgqcJlPEurgArHz9te1PPiqPyA==", + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/@vscode/vsce/-/vsce-3.7.1.tgz", + "integrity": "sha512-OTm2XdMt2YkpSn2Nx7z2EJtSuhRHsTPYsSK59hr3v8jRArK+2UEoju4Jumn1CmpgoBLGI6ReHLJ/czYltNUW3g==", "dev": true, + "license": "MIT", "dependencies": { - "azure-devops-node-api": "^11.0.1", - "chalk": "^2.4.2", + "@azure/identity": "^4.1.0", + "@secretlint/node": "^10.1.2", + "@secretlint/secretlint-formatter-sarif": "^10.1.2", + "@secretlint/secretlint-rule-no-dotenv": "^10.1.2", + "@secretlint/secretlint-rule-preset-recommend": "^10.1.2", + "@vscode/vsce-sign": "^2.0.0", + "azure-devops-node-api": "^12.5.0", + "chalk": "^4.1.2", "cheerio": "^1.0.0-rc.9", - "commander": "^6.2.1", - "glob": "^7.0.6", + "cockatiel": "^3.1.2", + "commander": "^12.1.0", + "form-data": "^4.0.0", + "glob": "^11.0.0", "hosted-git-info": "^4.0.2", "jsonc-parser": "^3.2.0", "leven": "^3.1.0", - "markdown-it": "^12.3.2", + "markdown-it": "^14.1.0", "mime": "^1.3.4", "minimatch": "^3.0.3", "parse-semver": "^1.1.1", "read": "^1.0.7", + "secretlint": "^10.1.2", "semver": "^7.5.2", - "tmp": "^0.2.1", + "tmp": "^0.2.3", "typed-rest-client": "^1.8.4", "url-join": "^4.0.1", "xml2js": "^0.5.0", @@ -1064,27 +1772,192 @@ "vsce": "vsce" }, "engines": { - "node": ">= 14" + "node": ">= 20" }, "optionalDependencies": { "keytar": "^7.7.0" } }, + "node_modules/@vscode/vsce-sign": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@vscode/vsce-sign/-/vsce-sign-2.0.9.tgz", + "integrity": "sha512-8IvaRvtFyzUnGGl3f5+1Cnor3LqaUWvhaUjAYO8Y39OUYlOf3cRd+dowuQYLpZcP3uwSG+mURwjEBOSq4SOJ0g==", + "dev": true, + "hasInstallScript": true, + "license": "SEE LICENSE IN LICENSE.txt", + "optionalDependencies": { + "@vscode/vsce-sign-alpine-arm64": "2.0.6", + "@vscode/vsce-sign-alpine-x64": "2.0.6", + "@vscode/vsce-sign-darwin-arm64": "2.0.6", + "@vscode/vsce-sign-darwin-x64": "2.0.6", + "@vscode/vsce-sign-linux-arm": "2.0.6", + "@vscode/vsce-sign-linux-arm64": "2.0.6", + "@vscode/vsce-sign-linux-x64": "2.0.6", + "@vscode/vsce-sign-win32-arm64": "2.0.6", + "@vscode/vsce-sign-win32-x64": "2.0.6" + } + }, + "node_modules/@vscode/vsce-sign-alpine-arm64": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-alpine-arm64/-/vsce-sign-alpine-arm64-2.0.6.tgz", + "integrity": "sha512-wKkJBsvKF+f0GfsUuGT0tSW0kZL87QggEiqNqK6/8hvqsXvpx8OsTEc3mnE1kejkh5r+qUyQ7PtF8jZYN0mo8Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "SEE LICENSE IN LICENSE.txt", + "optional": true, + "os": [ + "alpine" + ] + }, + "node_modules/@vscode/vsce-sign-alpine-x64": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-alpine-x64/-/vsce-sign-alpine-x64-2.0.6.tgz", + "integrity": "sha512-YoAGlmdK39vKi9jA18i4ufBbd95OqGJxRvF3n6ZbCyziwy3O+JgOpIUPxv5tjeO6gQfx29qBivQ8ZZTUF2Ba0w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "SEE LICENSE IN LICENSE.txt", + "optional": true, + "os": [ + "alpine" + ] + }, + "node_modules/@vscode/vsce-sign-darwin-arm64": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-darwin-arm64/-/vsce-sign-darwin-arm64-2.0.6.tgz", + "integrity": "sha512-5HMHaJRIQuozm/XQIiJiA0W9uhdblwwl2ZNDSSAeXGO9YhB9MH5C4KIHOmvyjUnKy4UCuiP43VKpIxW1VWP4tQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "SEE LICENSE IN LICENSE.txt", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@vscode/vsce-sign-darwin-x64": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-darwin-x64/-/vsce-sign-darwin-x64-2.0.6.tgz", + "integrity": "sha512-25GsUbTAiNfHSuRItoQafXOIpxlYj+IXb4/qarrXu7kmbH94jlm5sdWSCKrrREs8+GsXF1b+l3OB7VJy5jsykw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "SEE LICENSE IN LICENSE.txt", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@vscode/vsce-sign-linux-arm": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-linux-arm/-/vsce-sign-linux-arm-2.0.6.tgz", + "integrity": "sha512-UndEc2Xlq4HsuMPnwu7420uqceXjs4yb5W8E2/UkaHBB9OWCwMd3/bRe/1eLe3D8kPpxzcaeTyXiK3RdzS/1CA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "SEE LICENSE IN LICENSE.txt", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@vscode/vsce-sign-linux-arm64": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-linux-arm64/-/vsce-sign-linux-arm64-2.0.6.tgz", + "integrity": "sha512-cfb1qK7lygtMa4NUl2582nP7aliLYuDEVpAbXJMkDq1qE+olIw/es+C8j1LJwvcRq1I2yWGtSn3EkDp9Dq5FdA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "SEE LICENSE IN LICENSE.txt", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@vscode/vsce-sign-linux-x64": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-linux-x64/-/vsce-sign-linux-x64-2.0.6.tgz", + "integrity": "sha512-/olerl1A4sOqdP+hjvJ1sbQjKN07Y3DVnxO4gnbn/ahtQvFrdhUi0G1VsZXDNjfqmXw57DmPi5ASnj/8PGZhAA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "SEE LICENSE IN LICENSE.txt", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@vscode/vsce-sign-win32-arm64": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-win32-arm64/-/vsce-sign-win32-arm64-2.0.6.tgz", + "integrity": "sha512-ivM/MiGIY0PJNZBoGtlRBM/xDpwbdlCWomUWuLmIxbi1Cxe/1nooYrEQoaHD8ojVRgzdQEUzMsRbyF5cJJgYOg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "SEE LICENSE IN LICENSE.txt", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@vscode/vsce-sign-win32-x64": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-win32-x64/-/vsce-sign-win32-x64-2.0.6.tgz", + "integrity": "sha512-mgth9Kvze+u8CruYMmhHw6Zgy3GRX2S+Ed5oSokDEK5vPEwGGKnmuXua9tmFhomeAnhgJnL4DCna3TiNuGrBTQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "SEE LICENSE IN LICENSE.txt", + "optional": true, + "os": [ + "win32" + ] + }, "node_modules/@vscode/vsce/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-11.1.0.tgz", + "integrity": "sha512-vuNwKSaKiqm7g0THUBu2x7ckSs3XJLXE+2ssL7/MfTGPLLcrJQ/4Uq1CjPTtO5cCIiRxqvN6Twy1qOwhL0Xjcw==", "dev": true, + "license": "BlueOak-1.0.0", "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "foreground-child": "^3.3.1", + "jackspeak": "^4.1.1", + "minimatch": "^10.1.1", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^2.0.0" + }, + "bin": { + "glob": "dist/esm/bin.mjs" }, "engines": { - "node": "*" + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@vscode/vsce/node_modules/glob/node_modules/minimatch": { + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.1.1.tgz", + "integrity": "sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/brace-expansion": "^5.0.0" + }, + "engines": { + "node": "20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" @@ -1386,6 +2259,22 @@ "node": ">=6" } }, + "node_modules/ansi-escapes": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.2.0.tgz", + "integrity": "sha512-g6LhBsl+GBPRWGWsBtutpzBYuIIdBkLEvad5C/va/74Db018+5TZiyA26cZJAr3Rft5lprVqOIPxf5Vid6tqAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "environment": "^1.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", @@ -1396,15 +2285,19 @@ } }, "node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { - "color-convert": "^1.9.0" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=4" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/anymatch": { @@ -1475,6 +2368,16 @@ "node": "<=0.11.8 || >0.11.10" } }, + "node_modules/astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/async-hook-jl": { "version": "1.7.6", "resolved": "https://registry.npmjs.org/async-hook-jl/-/async-hook-jl-1.7.6.tgz", @@ -1512,10 +2415,11 @@ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" }, "node_modules/azure-devops-node-api": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/azure-devops-node-api/-/azure-devops-node-api-11.2.0.tgz", - "integrity": "sha512-XdiGPhrpaT5J8wdERRKs5g8E0Zy1pvOYTli7z9E8nmOn3YGp4FhtjhrOyFmX/8veWCwdI69mCHKJw6l+4J/bHA==", + "version": "12.5.0", + "resolved": "https://registry.npmjs.org/azure-devops-node-api/-/azure-devops-node-api-12.5.0.tgz", + "integrity": "sha512-R5eFskGvOm3U/GzeAuxRkUsAl0hrAwGgWn6zAd2KrZmrEhWZVqLew4OOupbQlXUuojUzpGtq62SmdhJ06N88og==", "dev": true, + "license": "MIT", "dependencies": { "tunnel": "0.0.6", "typed-rest-client": "^1.8.4" @@ -1556,6 +2460,22 @@ "node": ">=8" } }, + "node_modules/binaryextensions": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/binaryextensions/-/binaryextensions-6.11.0.tgz", + "integrity": "sha512-sXnYK/Ij80TO3lcqZVV2YgfKN5QjUWIRk/XSm2J/4bd/lPko3lvk0O4ZppH6m+6hB2/GTu+ptNwVFe1xh+QLQw==", + "dev": true, + "license": "Artistic-2.0", + "dependencies": { + "editions": "^6.21.0" + }, + "engines": { + "node": ">=4" + }, + "funding": { + "url": "https://bevry.me/fund" + } + }, "node_modules/bl": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", @@ -1614,6 +2534,13 @@ "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", "dev": true }, + "node_modules/boundary": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/boundary/-/boundary-2.0.0.tgz", + "integrity": "sha512-rJKn5ooC9u8q13IMCrW0RSp31pxBCHE3y9V/tp3TdWSLf8Em3p6Di4NBpfzbJge9YjjFEsD0RtFEjtvHL5VyEA==", + "dev": true, + "license": "BSD-2-Clause" + }, "node_modules/brace-expansion": { "version": "1.1.12", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", @@ -1685,6 +2612,13 @@ "node": "*" } }, + "node_modules/buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==", + "dev": true, + "license": "BSD-3-Clause" + }, "node_modules/buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", @@ -1692,23 +2626,20 @@ "dev": true, "license": "MIT" }, - "node_modules/call-bind": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", - "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "node_modules/bundle-name": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", + "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==", "dev": true, + "license": "MIT", "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.1" + "run-applescript": "^7.0.0" }, "engines": { - "node": ">= 0.4" + "node": ">=18" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/call-bind-apply-helpers": { @@ -1724,6 +2655,23 @@ "node": ">= 0.4" } }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -1797,17 +2745,20 @@ } }, "node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, "node_modules/check-error": { @@ -1970,20 +2921,35 @@ "semver": "bin/semver" } }, + "node_modules/cockatiel": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/cockatiel/-/cockatiel-3.2.1.tgz", + "integrity": "sha512-gfrHV6ZPkquExvMh9IOkKsBzNDk6sDuZ6DdBGUBkvFnTCqCxzpuq48RySgP0AnaqQkw2zynOFj9yly6T1Q2G5Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16" + } + }, "node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { - "color-name": "1.1.3" + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, "node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" }, "node_modules/colorette": { "version": "2.0.20", @@ -2003,12 +2969,13 @@ } }, "node_modules/commander": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", - "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", + "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", "dev": true, + "license": "MIT", "engines": { - "node": ">= 6" + "node": ">=18" } }, "node_modules/concat-map": { @@ -2076,11 +3043,12 @@ } }, "node_modules/debug": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", - "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", "dependencies": { - "ms": "2.1.2" + "ms": "^2.1.3" }, "engines": { "node": ">=6.0" @@ -2147,21 +3115,47 @@ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, - "node_modules/define-data-property": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "node_modules/default-browser": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.4.0.tgz", + "integrity": "sha512-XDuvSq38Hr1MdN47EDvYtx3U0MTqpCEn+F6ft8z2vYDzMrvQhVp0ui9oQdqW3MvK3vqUETglt1tVGgjLuJ5izg==", "dev": true, + "license": "MIT", "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" + "bundle-name": "^4.1.0", + "default-browser-id": "^5.0.0" }, "engines": { - "node": ">= 0.4" + "node": ">=18" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser-id": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.1.tgz", + "integrity": "sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/define-lazy-prop": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", + "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/delayed-stream": { @@ -2300,6 +3294,40 @@ "node": ">= 0.4" } }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true, + "license": "MIT" + }, + "node_modules/ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/editions": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/editions/-/editions-6.22.0.tgz", + "integrity": "sha512-UgGlf8IW75je7HZjNDpJdCv4cGJWIi6yumFdZ0R7A8/CIhQiWUjyGLCxdHpd8bmyD1gnkfUNK0oeOXqUS2cpfQ==", + "dev": true, + "license": "Artistic-2.0", + "dependencies": { + "version-range": "^4.15.0" + }, + "engines": { + "ecmascript": ">= es5", + "node": ">=4" + }, + "funding": { + "url": "https://bevry.me/fund" + } + }, "node_modules/electron-to-chromium": { "version": "1.5.13", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.13.tgz", @@ -2369,6 +3397,19 @@ "node": ">=4" } }, + "node_modules/environment": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/environment/-/environment-1.1.0.tgz", + "integrity": "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/es-define-property": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", @@ -2429,15 +3470,6 @@ "node": ">=6" } }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, "node_modules/eslint": { "version": "8.50.0", "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.50.0.tgz", @@ -2517,55 +3549,6 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/eslint/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/eslint/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/eslint/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, "node_modules/eslint/node_modules/escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", @@ -2603,27 +3586,6 @@ "node": ">=4.0" } }, - "node_modules/eslint/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/eslint/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/espree": { "version": "9.6.1", "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", @@ -2727,16 +3689,17 @@ "dev": true }, "node_modules/fast-glob": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", - "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", "dev": true, + "license": "MIT", "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", "glob-parent": "^5.1.2", "merge2": "^1.3.0", - "micromatch": "^4.0.4" + "micromatch": "^4.0.8" }, "engines": { "node": ">=8.6.0" @@ -2766,6 +3729,23 @@ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true }, + "node_modules/fast-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", + "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "BSD-3-Clause" + }, "node_modules/fastest-levenshtein": { "version": "1.0.16", "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", @@ -2861,6 +3841,23 @@ "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", "dev": true }, + "node_modules/foreground-child": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "dev": true, + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/form-data": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz", @@ -3106,24 +4103,13 @@ "dev": true }, "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", "engines": { - "node": ">=4" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", - "dev": true, - "dependencies": { - "es-define-property": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=8" } }, "node_modules/has-symbols": { @@ -3332,6 +4318,19 @@ "node": ">=0.8.19" } }, + "node_modules/index-to-position": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/index-to-position/-/index-to-position-1.2.0.tgz", + "integrity": "sha512-Yg7+ztRkqslMAS2iFaU+Oa4KTSidr63OsFGlOrJoW981kIYO3CGCS3wA95P1mUi/IVSJkn0D479KTJpVpvFNuw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -3391,6 +4390,22 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-docker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "dev": true, + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -3421,6 +4436,25 @@ "node": ">=0.10.0" } }, + "node_modules/is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-docker": "^3.0.0" + }, + "bin": { + "is-inside-container": "cli.js" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", @@ -3472,6 +4506,22 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/is-wsl": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz", + "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-inside-container": "^1.0.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", @@ -3493,6 +4543,40 @@ "node": ">=0.10.0" } }, + "node_modules/istextorbinary": { + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/istextorbinary/-/istextorbinary-9.5.0.tgz", + "integrity": "sha512-5mbUj3SiZXCuRf9fT3ibzbSSEWiy63gFfksmGfdOzujPjW3k+z8WvIBxcJHBoQNlaZaiyB25deviif2+osLmLw==", + "dev": true, + "license": "Artistic-2.0", + "dependencies": { + "binaryextensions": "^6.11.0", + "editions": "^6.21.0", + "textextensions": "^6.11.0" + }, + "engines": { + "node": ">=4" + }, + "funding": { + "url": "https://bevry.me/fund" + } + }, + "node_modules/jackspeak": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.1.1.tgz", + "integrity": "sha512-zptv57P3GpL+O0I7VdMJNBZCu+BPHVQUk55Ft8/QCJjTVxrnJHuVuX/0Bl2A6/+2oyR/ZMEuFKwmzqqZ/U5nPQ==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/jest-worker": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", @@ -3508,16 +4592,6 @@ "node": ">= 10.13.0" } }, - "node_modules/jest-worker/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/jest-worker/node_modules/supports-color": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", @@ -3534,6 +4608,13 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true, + "license": "MIT" + }, "node_modules/js-yaml": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", @@ -3564,6 +4645,19 @@ "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", "dev": true }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/jsonc-parser": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", @@ -3580,6 +4674,29 @@ "graceful-fs": "^4.1.6" } }, + "node_modules/jsonwebtoken": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.3.tgz", + "integrity": "sha512-MT/xP0CrubFRNLNKvxJ2BYfy53Zkm++5bX9dtuPbqAeQpTVe0MQTFhao8+Cp//EmJp244xt6Drw/GVEGCUj40g==", + "dev": true, + "license": "MIT", + "dependencies": { + "jws": "^4.0.1", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.1.1", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=12", + "npm": ">=6" + } + }, "node_modules/jszip": { "version": "3.10.1", "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz", @@ -3598,6 +4715,29 @@ "integrity": "sha512-g3UB796vUFIY90VIv/WX3L2c8CS2MdWUww3CNrYmqza1Fg0DURc2K/O4YrnklBdQarSJ/y8JnJYDGc+1iumQjg==", "dev": true }, + "node_modules/jwa": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.1.tgz", + "integrity": "sha512-hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5hwqCXDg==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-equal-constant-time": "^1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jws": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.1.tgz", + "integrity": "sha512-EKI/M/yqPncGUUh44xz0PxSidXFr/+r0pA70+gIYhjv+et7yxM+s29Y+VGDkovRofQem0fs7Uvf4+YmAdyRduA==", + "dev": true, + "license": "MIT", + "dependencies": { + "jwa": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, "node_modules/keytar": { "version": "7.9.0", "resolved": "https://registry.npmjs.org/keytar/-/keytar-7.9.0.tgz", @@ -3651,12 +4791,13 @@ } }, "node_modules/linkify-it": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-3.0.3.tgz", - "integrity": "sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz", + "integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==", "dev": true, + "license": "MIT", "dependencies": { - "uc.micro": "^1.0.1" + "uc.micro": "^2.0.0" } }, "node_modules/loader-runner": { @@ -3694,12 +4835,68 @@ "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==", "dev": true }, + "node_modules/lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==", + "dev": true, + "license": "MIT" + }, "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, + "node_modules/lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", + "dev": true, + "license": "MIT" + }, "node_modules/log-symbols": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", @@ -3716,76 +4913,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/log-symbols/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/log-symbols/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/log-symbols/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/log-symbols/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/log-symbols/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/log-symbols/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/loupe": { "version": "2.3.6", "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.6.tgz", @@ -3807,28 +4934,21 @@ } }, "node_modules/markdown-it": { - "version": "12.3.2", - "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-12.3.2.tgz", - "integrity": "sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==", + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.0.tgz", + "integrity": "sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==", "dev": true, + "license": "MIT", "dependencies": { "argparse": "^2.0.1", - "entities": "~2.1.0", - "linkify-it": "^3.0.1", - "mdurl": "^1.0.1", - "uc.micro": "^1.0.5" + "entities": "^4.4.0", + "linkify-it": "^5.0.0", + "mdurl": "^2.0.0", + "punycode.js": "^2.3.1", + "uc.micro": "^2.1.0" }, "bin": { - "markdown-it": "bin/markdown-it.js" - } - }, - "node_modules/markdown-it/node_modules/entities": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", - "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==", - "dev": true, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" + "markdown-it": "bin/markdown-it.mjs" } }, "node_modules/math-intrinsics": { @@ -3841,10 +4961,11 @@ } }, "node_modules/mdurl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", - "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==", - "dev": true + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz", + "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==", + "dev": true, + "license": "MIT" }, "node_modules/merge-stream": { "version": "2.0.0", @@ -3942,6 +5063,16 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, "node_modules/mkdirp-classic": { "version": "0.5.3", "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", @@ -4006,15 +5137,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/mocha/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/mocha/node_modules/minimatch": { "version": "5.1.6", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", @@ -4027,12 +5149,6 @@ "node": ">=10" } }, - "node_modules/mocha/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, "node_modules/mocha/node_modules/supports-color": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", @@ -4054,9 +5170,10 @@ "integrity": "sha512-ySViT69/76t8VhE1xXHK6Ch4NcDd26gx0MzKXLO+F7NOtnqH68d9zF94nT8ZWSxXh8ELOERsnJO/sWt1xZYw5A==" }, "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" }, "node_modules/mute-stream": { "version": "0.0.8", @@ -4137,6 +5254,55 @@ "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", "dev": true }, + "node_modules/node-sarif-builder": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/node-sarif-builder/-/node-sarif-builder-3.4.0.tgz", + "integrity": "sha512-tGnJW6OKRii9u/b2WiUViTJS+h7Apxx17qsMUjsUeNDiMMX5ZFf8F8Fcz7PAQ6omvOxHZtvDTmOYKJQwmfpjeg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/sarif": "^2.1.7", + "fs-extra": "^11.1.1" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/normalize-package-data": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.2.tgz", + "integrity": "sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "hosted-git-info": "^7.0.0", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/normalize-package-data/node_modules/hosted-git-info": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.2.tgz", + "integrity": "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^10.0.1" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/normalize-package-data/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", @@ -4159,10 +5325,14 @@ } }, "node_modules/object-inspect": { - "version": "1.12.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", - "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -4176,6 +5346,25 @@ "wrappy": "1" } }, + "node_modules/open": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/open/-/open-10.2.0.tgz", + "integrity": "sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==", + "dev": true, + "license": "MIT", + "dependencies": { + "default-browser": "^5.2.1", + "define-lazy-prop": "^3.0.0", + "is-inside-container": "^1.0.0", + "wsl-utils": "^0.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/optionator": { "version": "0.9.3", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", @@ -4223,6 +5412,19 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/p-map": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.4.tgz", + "integrity": "sha512-tkAQEw8ysMzmkhgw8k+1U/iPhWNhykKnSk4Rd5zLoPJCuJaGRPo6YposrZgaxHKzDHdDWWZvE/Sk7hsL2X/CpQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/p-try": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", @@ -4232,6 +5434,13 @@ "node": ">=6" } }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "dev": true, + "license": "BlueOak-1.0.0" + }, "node_modules/pako": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", @@ -4250,6 +5459,37 @@ "node": ">=6" } }, + "node_modules/parse-json": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-8.3.0.tgz", + "integrity": "sha512-ybiGyvspI+fAoRQbIPRddCcSTV9/LsJbf0e/S85VLowVGzRmokfneg2kwVW/KU5rOXrPSbF1qAKPMgNTqqROQQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.26.2", + "index-to-position": "^1.1.0", + "type-fest": "^4.39.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse-json/node_modules/type-fest": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", + "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/parse-semver": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/parse-semver/-/parse-semver-1.1.1.tgz", @@ -4325,6 +5565,33 @@ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, + "node_modules/path-scurry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.1.tgz", + "integrity": "sha512-oWyT4gICAu+kaA7QWk/jvCHWarMKNs6pXOGWKDTr7cw4IGcUbW+PeTfbaQiLGheFRpjo6O9J0PmyMfQPjH71oA==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^11.0.0", + "minipass": "^7.1.2" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "11.2.4", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.4.tgz", + "integrity": "sha512-B5Y16Jr9LB9dHVkh6ZevG+vAbOsNOYCX+sXvFWFu7B3Iz5mijW3zdbMyhsh8ANd2mSWBYdJgnqi+mL7/LrOPYg==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" + } + }, "node_modules/path-to-regexp": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.9.0.tgz", @@ -4366,10 +5633,11 @@ "dev": true }, "node_modules/picocolors": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.0.tgz", - "integrity": "sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==", - "dev": true + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" }, "node_modules/picomatch": { "version": "2.3.1", @@ -4447,6 +5715,16 @@ "node": ">=8" } }, + "node_modules/pluralize": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", + "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, "node_modules/postinstall-build": { "version": "5.0.3", "resolved": "https://registry.npmjs.org/postinstall-build/-/postinstall-build-5.0.3.tgz", @@ -4525,13 +5803,24 @@ "once": "^1.3.1" } }, + "node_modules/punycode.js": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz", + "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/qs": { - "version": "6.11.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz", - "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==", + "version": "6.14.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.1.tgz", + "integrity": "sha512-4EK3+xJl8Ts67nLYNwqw/dsFVnCf+qR7RgXSK9jEEm9unao3njwMDdmsdvoKBKHzxd7tCYz5e5M+SnMjdtXGQQ==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "side-channel": "^1.0.4" + "side-channel": "^1.1.0" }, "engines": { "node": ">=0.6" @@ -4585,6 +5874,19 @@ "rc": "cli.js" } }, + "node_modules/rc-config-loader": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/rc-config-loader/-/rc-config-loader-4.1.3.tgz", + "integrity": "sha512-kD7FqML7l800i6pS6pvLyIE2ncbk9Du8Q0gp/4hMPhJU6ZxApkoLcGD8ZeqgiAlfwZ6BlETq6qqe+12DUL207w==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.3.4", + "js-yaml": "^4.1.0", + "json5": "^2.2.2", + "require-from-string": "^2.0.2" + } + }, "node_modules/rc/node_modules/strip-json-comments": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", @@ -4607,6 +5909,39 @@ "node": ">=0.8" } }, + "node_modules/read-pkg": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-9.0.1.tgz", + "integrity": "sha512-9viLL4/n1BJUCT1NXVTdS1jtm80yDEgR5T4yCelII49Mbj0v1rZdKqj7zCiYdbB0CuCgdrvHcNogAKTFPBocFA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/normalize-package-data": "^2.4.3", + "normalize-package-data": "^6.0.0", + "parse-json": "^8.0.0", + "type-fest": "^4.6.0", + "unicorn-magic": "^0.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg/node_modules/type-fest": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", + "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/readable-stream": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", @@ -4656,6 +5991,16 @@ "node": ">=0.10.0" } }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/require-in-the-middle": { "version": "7.3.0", "resolved": "https://registry.npmjs.org/require-in-the-middle/-/require-in-the-middle-7.3.0.tgz", @@ -4760,6 +6105,19 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/run-applescript": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.1.0.tgz", + "integrity": "sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -4819,6 +6177,98 @@ "url": "https://opencollective.com/webpack" } }, + "node_modules/secretlint": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/secretlint/-/secretlint-10.2.2.tgz", + "integrity": "sha512-xVpkeHV/aoWe4vP4TansF622nBEImzCY73y/0042DuJ29iKIaqgoJ8fGxre3rVSHHbxar4FdJobmTnLp9AU0eg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@secretlint/config-creator": "^10.2.2", + "@secretlint/formatter": "^10.2.2", + "@secretlint/node": "^10.2.2", + "@secretlint/profiler": "^10.2.2", + "debug": "^4.4.1", + "globby": "^14.1.0", + "read-pkg": "^9.0.1" + }, + "bin": { + "secretlint": "bin/secretlint.js" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/secretlint/node_modules/globby": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-14.1.0.tgz", + "integrity": "sha512-0Ia46fDOaT7k4og1PDW4YbodWWr3scS2vAr2lTbsplOt2WkKp0vQbkI9wKis/T5LV/dqPjO3bpS/z6GTJB82LA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sindresorhus/merge-streams": "^2.1.0", + "fast-glob": "^3.3.3", + "ignore": "^7.0.3", + "path-type": "^6.0.0", + "slash": "^5.1.0", + "unicorn-magic": "^0.3.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/secretlint/node_modules/ignore": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", + "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/secretlint/node_modules/path-type": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-6.0.0.tgz", + "integrity": "sha512-Vj7sf++t5pBD637NSfkxpHSMfWaeig5+DKWLhcqIYx6mWQz5hdJTGDVMQiJcw1ZYkhs7AazKDGpRVji1LJCZUQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/secretlint/node_modules/slash": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", + "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/secretlint/node_modules/unicorn-magic": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.3.0.tgz", + "integrity": "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/semver": { "version": "7.5.4", "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", @@ -4842,23 +6292,6 @@ "randombytes": "^2.1.0" } }, - "node_modules/set-function-length": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", - "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", - "dev": true, - "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/setimmediate": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", @@ -4904,19 +6337,94 @@ "integrity": "sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw==" }, "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/simple-concat": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", @@ -4982,34 +6490,31 @@ "url": "https://opencollective.com/sinon" } }, - "node_modules/sinon/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true, "engines": { "node": ">=8" } }, - "node_modules/sinon/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", "dev": true, + "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" }, "engines": { - "node": ">=8" - } - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, "node_modules/source-map": { @@ -5033,6 +6538,42 @@ "source-map": "^0.6.0" } }, + "node_modules/spdx-correct": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", + "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", + "dev": true, + "license": "CC-BY-3.0" + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.22", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.22.tgz", + "integrity": "sha512-4PRT4nh1EImPbt2jASOKHX7PB7I+e4IWNLvkKFDxNhJlfjbYlleYQh285Z/3mPTHSAK/AvdMmw5BNNuYH8ShgQ==", + "dev": true, + "license": "CC0-1.0" + }, "node_modules/stack-chain": { "version": "1.3.7", "resolved": "https://registry.npmjs.org/stack-chain/-/stack-chain-1.3.7.tgz", @@ -5061,6 +6602,22 @@ "node": ">=8" } }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -5073,6 +6630,20 @@ "node": ">=8" } }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", @@ -5085,16 +6656,44 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/structured-source": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/structured-source/-/structured-source-4.0.0.tgz", + "integrity": "sha512-qGzRFNJDjFieQkl/sVOI2dUjHKRyL9dAJi2gCPGJLbJHBIkyOHxjuocpIEfbLioX+qSJpvbYdT49/YCdMznKxA==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "boundary": "^2.0.0" + } + }, "node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { - "has-flag": "^3.0.0" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=4" + "node": ">=8" + } + }, + "node_modules/supports-hyperlinks": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-3.2.0.tgz", + "integrity": "sha512-zFObLMyZeEwzAoKCyu1B91U79K2t7ApXuQfo8OuxwXLDgcKxuwM+YvcbIhm6QWqz7mHUH1TVytR1PwVVjEuMig==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">=14.18" + }, + "funding": { + "url": "https://github.com/chalk/supports-hyperlinks?sponsor=1" } }, "node_modules/supports-preserve-symlinks-flag": { @@ -5108,6 +6707,47 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/table": { + "version": "6.9.0", + "resolved": "https://registry.npmjs.org/table/-/table-6.9.0.tgz", + "integrity": "sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "ajv": "^8.0.1", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/table/node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/table/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true, + "license": "MIT" + }, "node_modules/tapable": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", @@ -5162,6 +6802,23 @@ "node": ">= 6" } }, + "node_modules/terminal-link": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-4.0.0.tgz", + "integrity": "sha512-lk+vH+MccxNqgVqSnkMVKx4VLJfnLjDBGzH16JVZjKE2DoxP57s6/vt6JmXV5I3jBcfGrxNrYtC+mPtU7WJztA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-escapes": "^7.0.0", + "supports-hyperlinks": "^3.2.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/terser": { "version": "5.31.6", "resolved": "https://registry.npmjs.org/terser/-/terser-5.31.6.tgz", @@ -5229,6 +6886,22 @@ "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "dev": true }, + "node_modules/textextensions": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/textextensions/-/textextensions-6.11.0.tgz", + "integrity": "sha512-tXJwSr9355kFJI3lbCkPpUH5cP8/M0GGy2xLO34aZCjMXBaK3SoPnZwr/oWmo1FdCnELcs4npdCIOFtq9W3ruQ==", + "dev": true, + "license": "Artistic-2.0", + "dependencies": { + "editions": "^6.21.0" + }, + "engines": { + "node": ">=4" + }, + "funding": { + "url": "https://bevry.me/fund" + } + }, "node_modules/tmp": { "version": "0.2.4", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.4.tgz", @@ -5269,76 +6942,6 @@ "webpack": "^5.0.0" } }, - "node_modules/ts-loader/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/ts-loader/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/ts-loader/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/ts-loader/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/ts-loader/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/ts-loader/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/ts-mockito": { "version": "2.6.1", "resolved": "https://registry.npmjs.org/ts-mockito/-/ts-mockito-2.6.1.tgz", @@ -5379,6 +6982,7 @@ "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.6.11 <=0.7.0 || >=0.7.3" } @@ -5430,10 +7034,11 @@ } }, "node_modules/typed-rest-client": { - "version": "1.8.9", - "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.8.9.tgz", - "integrity": "sha512-uSmjE38B80wjL85UFX3sTYEUlvZ1JgCRhsWj/fJ4rZ0FqDUFoIuodtiVeE+cUqiVTOKPdKrp/sdftD15MDek6g==", + "version": "1.8.11", + "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.8.11.tgz", + "integrity": "sha512-5UvfMpd1oelmUPRbbaVnq+rHP7ng2cE4qoQkQeAqxRL6PklkxsM0g32/HL0yfvruK6ojQ5x8EE+HF4YV6DtuCA==", "dev": true, + "license": "MIT", "dependencies": { "qs": "^6.9.1", "tunnel": "0.0.6", @@ -5469,16 +7074,18 @@ } }, "node_modules/uc.micro": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", - "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==", - "dev": true + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz", + "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==", + "dev": true, + "license": "MIT" }, "node_modules/underscore": { - "version": "1.13.6", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz", - "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==", - "dev": true + "version": "1.13.7", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.7.tgz", + "integrity": "sha512-GMXzWtsc57XAtguZgaQViUOzs0KTkk8ojr3/xAxXLITqf/3EMwxC0inyETfDFjH/Krbhuep0HNbbjI9i/q3F3g==", + "dev": true, + "license": "MIT" }, "node_modules/undici-types": { "version": "6.21.0", @@ -5487,6 +7094,19 @@ "dev": true, "license": "MIT" }, + "node_modules/unicorn-magic": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz", + "integrity": "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/universalify": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", @@ -5564,6 +7184,30 @@ "uuid": "dist/bin/uuid" } }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/version-range": { + "version": "4.15.0", + "resolved": "https://registry.npmjs.org/version-range/-/version-range-4.15.0.tgz", + "integrity": "sha512-Ck0EJbAGxHwprkzFO966t4/5QkRuzh+/I1RxhLgUKKwEn+Cd8NwM60mE3AqBZg5gYODoXW0EFsQvbZjRlvdqbg==", + "dev": true, + "license": "Artistic-2.0", + "engines": { + "node": ">=4" + }, + "funding": { + "url": "https://bevry.me/fund" + } + }, "node_modules/vscode-jsonrpc": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.1.0.tgz", @@ -5804,45 +7448,47 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, + "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/wrap-ansi/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "dev": true }, + "node_modules/wsl-utils": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/wsl-utils/-/wsl-utils-0.1.0.tgz", + "integrity": "sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-wsl": "^3.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/xml2js": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.5.0.tgz", @@ -5960,6 +7606,21 @@ "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", "dev": true }, + "@azu/format-text": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@azu/format-text/-/format-text-1.0.2.tgz", + "integrity": "sha512-Swi4N7Edy1Eqq82GxgEECXSSLyn6GOb5htRFPzBDdUkECGXtlf12ynO5oJSpWKPwCaUssOu7NfhDcCWpIC6Ywg==", + "dev": true + }, + "@azu/style-format": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@azu/style-format/-/style-format-1.0.1.tgz", + "integrity": "sha512-AHcTojlNBdD/3/KxIKlg8sxIWHfOtQszLvOpagLTO+bjC3u7SAszu1lf//u7JJC50aUSH+BVWDD/KvaA6Gfn5g==", + "dev": true, + "requires": { + "@azu/format-text": "^1.0.1" + } + }, "@azure/abort-controller": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.1.2.tgz", @@ -5969,13 +7630,68 @@ } }, "@azure/core-auth": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/@azure/core-auth/-/core-auth-1.7.2.tgz", - "integrity": "sha512-Igm/S3fDYmnMq1uKS38Ae1/m37B3zigdlZw+kocwEhh5GjyKjPrXKO2J6rzpC1wAxrNil/jX9BJRqBshyjnF3g==", + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/@azure/core-auth/-/core-auth-1.10.1.tgz", + "integrity": "sha512-ykRMW8PjVAn+RS6ww5cmK9U2CyH9p4Q88YJwvUslfuMmN98w/2rdGRLPqJYObapBCdzBVeDgYWdJnFPFb7qzpg==", "requires": { - "@azure/abort-controller": "^2.0.0", - "@azure/core-util": "^1.1.0", + "@azure/abort-controller": "^2.1.2", + "@azure/core-util": "^1.13.0", + "tslib": "^2.6.2" + }, + "dependencies": { + "@azure/core-util": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/@azure/core-util/-/core-util-1.13.1.tgz", + "integrity": "sha512-XPArKLzsvl0Hf0CaGyKHUyVgF7oDnhKoP85Xv6M4StF/1AhfORhZudHtOyf2s+FcbuQ9dPRAjB8J2KvRRMUK2A==", + "requires": { + "@azure/abort-controller": "^2.1.2", + "@typespec/ts-http-runtime": "^0.3.0", + "tslib": "^2.6.2" + } + } + } + }, + "@azure/core-client": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/@azure/core-client/-/core-client-1.10.1.tgz", + "integrity": "sha512-Nh5PhEOeY6PrnxNPsEHRr9eimxLwgLlpmguQaHKBinFYA/RU9+kOYVOQqOrTsCL+KSxrLLl1gD8Dk5BFW/7l/w==", + "dev": true, + "requires": { + "@azure/abort-controller": "^2.1.2", + "@azure/core-auth": "^1.10.0", + "@azure/core-rest-pipeline": "^1.22.0", + "@azure/core-tracing": "^1.3.0", + "@azure/core-util": "^1.13.0", + "@azure/logger": "^1.3.0", "tslib": "^2.6.2" + }, + "dependencies": { + "@azure/core-rest-pipeline": { + "version": "1.22.2", + "resolved": "https://registry.npmjs.org/@azure/core-rest-pipeline/-/core-rest-pipeline-1.22.2.tgz", + "integrity": "sha512-MzHym+wOi8CLUlKCQu12de0nwcq9k9Kuv43j4Wa++CsCpJwps2eeBQwD2Bu8snkxTtDKDx4GwjuR9E8yC8LNrg==", + "dev": true, + "requires": { + "@azure/abort-controller": "^2.1.2", + "@azure/core-auth": "^1.10.0", + "@azure/core-tracing": "^1.3.0", + "@azure/core-util": "^1.13.0", + "@azure/logger": "^1.3.0", + "@typespec/ts-http-runtime": "^0.3.0", + "tslib": "^2.6.2" + } + }, + "@azure/core-util": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/@azure/core-util/-/core-util-1.13.1.tgz", + "integrity": "sha512-XPArKLzsvl0Hf0CaGyKHUyVgF7oDnhKoP85Xv6M4StF/1AhfORhZudHtOyf2s+FcbuQ9dPRAjB8J2KvRRMUK2A==", + "dev": true, + "requires": { + "@azure/abort-controller": "^2.1.2", + "@typespec/ts-http-runtime": "^0.3.0", + "tslib": "^2.6.2" + } + } } }, "@azure/core-rest-pipeline": { @@ -6021,9 +7737,9 @@ } }, "@azure/core-tracing": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@azure/core-tracing/-/core-tracing-1.1.2.tgz", - "integrity": "sha512-dawW9ifvWAWmUm9/h+/UQ2jrdvjCJ7VJEuCJ6XVNudzcOwm53BFZH4Q845vjfgoUAM8ZxokvVNxNxAITc502YA==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@azure/core-tracing/-/core-tracing-1.3.1.tgz", + "integrity": "sha512-9MWKevR7Hz8kNzzPLfX4EAtGM2b8mr50HPDBvio96bURP/9C+HjdH3sBlLSNNrvRAr5/k/svoH457gB5IKpmwQ==", "requires": { "tslib": "^2.6.2" } @@ -6047,14 +7763,88 @@ } } }, + "@azure/identity": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@azure/identity/-/identity-4.13.0.tgz", + "integrity": "sha512-uWC0fssc+hs1TGGVkkghiaFkkS7NkTxfnCH+Hdg+yTehTpMcehpok4PgUKKdyCH+9ldu6FhiHRv84Ntqj1vVcw==", + "dev": true, + "requires": { + "@azure/abort-controller": "^2.0.0", + "@azure/core-auth": "^1.9.0", + "@azure/core-client": "^1.9.2", + "@azure/core-rest-pipeline": "^1.17.0", + "@azure/core-tracing": "^1.0.0", + "@azure/core-util": "^1.11.0", + "@azure/logger": "^1.0.0", + "@azure/msal-browser": "^4.2.0", + "@azure/msal-node": "^3.5.0", + "open": "^10.1.0", + "tslib": "^2.2.0" + }, + "dependencies": { + "@azure/core-rest-pipeline": { + "version": "1.22.2", + "resolved": "https://registry.npmjs.org/@azure/core-rest-pipeline/-/core-rest-pipeline-1.22.2.tgz", + "integrity": "sha512-MzHym+wOi8CLUlKCQu12de0nwcq9k9Kuv43j4Wa++CsCpJwps2eeBQwD2Bu8snkxTtDKDx4GwjuR9E8yC8LNrg==", + "dev": true, + "requires": { + "@azure/abort-controller": "^2.1.2", + "@azure/core-auth": "^1.10.0", + "@azure/core-tracing": "^1.3.0", + "@azure/core-util": "^1.13.0", + "@azure/logger": "^1.3.0", + "@typespec/ts-http-runtime": "^0.3.0", + "tslib": "^2.6.2" + } + }, + "@azure/core-util": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/@azure/core-util/-/core-util-1.13.1.tgz", + "integrity": "sha512-XPArKLzsvl0Hf0CaGyKHUyVgF7oDnhKoP85Xv6M4StF/1AhfORhZudHtOyf2s+FcbuQ9dPRAjB8J2KvRRMUK2A==", + "dev": true, + "requires": { + "@azure/abort-controller": "^2.1.2", + "@typespec/ts-http-runtime": "^0.3.0", + "tslib": "^2.6.2" + } + } + } + }, "@azure/logger": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@azure/logger/-/logger-1.1.3.tgz", - "integrity": "sha512-J8/cIKNQB1Fc9fuYqBVnrppiUtW+5WWJPCj/tAokC5LdSTwkWWttN+jsRgw9BLYD7JDBx7PceiqOBxJJ1tQz3Q==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@azure/logger/-/logger-1.3.0.tgz", + "integrity": "sha512-fCqPIfOcLE+CGqGPd66c8bZpwAji98tZ4JI9i/mlTNTlsIWslCfpg48s/ypyLxZTump5sypjrKn2/kY7q8oAbA==", "requires": { + "@typespec/ts-http-runtime": "^0.3.0", "tslib": "^2.6.2" } }, + "@azure/msal-browser": { + "version": "4.27.0", + "resolved": "https://registry.npmjs.org/@azure/msal-browser/-/msal-browser-4.27.0.tgz", + "integrity": "sha512-bZ8Pta6YAbdd0o0PEaL1/geBsPrLEnyY/RDWqvF1PP9RUH8EMLvUMGoZFYS6jSlUan6KZ9IMTLCnwpWWpQRK/w==", + "dev": true, + "requires": { + "@azure/msal-common": "15.13.3" + } + }, + "@azure/msal-common": { + "version": "15.13.3", + "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-15.13.3.tgz", + "integrity": "sha512-shSDU7Ioecya+Aob5xliW9IGq1Ui8y4EVSdWGyI1Gbm4Vg61WpP95LuzcY214/wEjSn6w4PZYD4/iVldErHayQ==", + "dev": true + }, + "@azure/msal-node": { + "version": "3.8.4", + "resolved": "https://registry.npmjs.org/@azure/msal-node/-/msal-node-3.8.4.tgz", + "integrity": "sha512-lvuAwsDpPDE/jSuVQOBMpLbXuVuLsPNRwWCyK3/6bPlBk0fGWegqoZ0qjZclMWyQ2JNvIY3vHY7hoFmFmFQcOw==", + "dev": true, + "requires": { + "@azure/msal-common": "15.13.3", + "jsonwebtoken": "^9.0.0", + "uuid": "^8.3.0" + } + }, "@azure/opentelemetry-instrumentation-azure-sdk": { "version": "1.0.0-beta.5", "resolved": "https://registry.npmjs.org/@azure/opentelemetry-instrumentation-azure-sdk/-/opentelemetry-instrumentation-azure-sdk-1.0.0-beta.5.tgz", @@ -6068,6 +7858,23 @@ "tslib": "^2.2.0" } }, + "@babel/code-frame": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.27.1", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", + "dev": true + }, "@discoveryjs/json-ext": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", @@ -6135,6 +7942,86 @@ "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", "dev": true }, + "@isaacs/balanced-match": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz", + "integrity": "sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==", + "dev": true + }, + "@isaacs/brace-expansion": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@isaacs/brace-expansion/-/brace-expansion-5.0.0.tgz", + "integrity": "sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==", + "dev": true, + "requires": { + "@isaacs/balanced-match": "^4.0.1" + } + }, + "@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "requires": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "dev": true + }, + "ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "dev": true + }, + "emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "requires": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + } + }, + "strip-ansi": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "dev": true, + "requires": { + "ansi-regex": "^6.0.1" + } + }, + "wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "requires": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + } + } + } + }, "@jridgewell/gen-mapping": { "version": "0.3.5", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", @@ -6344,6 +8231,177 @@ "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.25.1.tgz", "integrity": "sha512-ZDjMJJQRlyk8A1KZFCc+bCbsyrn1wTwdNt56F7twdfUfnHUZUq77/WfONCj8p72NZOyP7pNTdUWSTYC3GTbuuQ==" }, + "@secretlint/config-creator": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/@secretlint/config-creator/-/config-creator-10.2.2.tgz", + "integrity": "sha512-BynOBe7Hn3LJjb3CqCHZjeNB09s/vgf0baBaHVw67w7gHF0d25c3ZsZ5+vv8TgwSchRdUCRrbbcq5i2B1fJ2QQ==", + "dev": true, + "requires": { + "@secretlint/types": "^10.2.2" + } + }, + "@secretlint/config-loader": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/@secretlint/config-loader/-/config-loader-10.2.2.tgz", + "integrity": "sha512-ndjjQNgLg4DIcMJp4iaRD6xb9ijWQZVbd9694Ol2IszBIbGPPkwZHzJYKICbTBmh6AH/pLr0CiCaWdGJU7RbpQ==", + "dev": true, + "requires": { + "@secretlint/profiler": "^10.2.2", + "@secretlint/resolver": "^10.2.2", + "@secretlint/types": "^10.2.2", + "ajv": "^8.17.1", + "debug": "^4.4.1", + "rc-config-loader": "^4.1.3" + }, + "dependencies": { + "ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + } + } + }, + "@secretlint/core": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/@secretlint/core/-/core-10.2.2.tgz", + "integrity": "sha512-6rdwBwLP9+TO3rRjMVW1tX+lQeo5gBbxl1I5F8nh8bgGtKwdlCMhMKsBWzWg1ostxx/tIG7OjZI0/BxsP8bUgw==", + "dev": true, + "requires": { + "@secretlint/profiler": "^10.2.2", + "@secretlint/types": "^10.2.2", + "debug": "^4.4.1", + "structured-source": "^4.0.0" + } + }, + "@secretlint/formatter": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/@secretlint/formatter/-/formatter-10.2.2.tgz", + "integrity": "sha512-10f/eKV+8YdGKNQmoDUD1QnYL7TzhI2kzyx95vsJKbEa8akzLAR5ZrWIZ3LbcMmBLzxlSQMMccRmi05yDQ5YDA==", + "dev": true, + "requires": { + "@secretlint/resolver": "^10.2.2", + "@secretlint/types": "^10.2.2", + "@textlint/linter-formatter": "^15.2.0", + "@textlint/module-interop": "^15.2.0", + "@textlint/types": "^15.2.0", + "chalk": "^5.4.1", + "debug": "^4.4.1", + "pluralize": "^8.0.0", + "strip-ansi": "^7.1.0", + "table": "^6.9.0", + "terminal-link": "^4.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "dev": true + }, + "chalk": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", + "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", + "dev": true + }, + "strip-ansi": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "dev": true, + "requires": { + "ansi-regex": "^6.0.1" + } + } + } + }, + "@secretlint/node": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/@secretlint/node/-/node-10.2.2.tgz", + "integrity": "sha512-eZGJQgcg/3WRBwX1bRnss7RmHHK/YlP/l7zOQsrjexYt6l+JJa5YhUmHbuGXS94yW0++3YkEJp0kQGYhiw1DMQ==", + "dev": true, + "requires": { + "@secretlint/config-loader": "^10.2.2", + "@secretlint/core": "^10.2.2", + "@secretlint/formatter": "^10.2.2", + "@secretlint/profiler": "^10.2.2", + "@secretlint/source-creator": "^10.2.2", + "@secretlint/types": "^10.2.2", + "debug": "^4.4.1", + "p-map": "^7.0.3" + } + }, + "@secretlint/profiler": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/@secretlint/profiler/-/profiler-10.2.2.tgz", + "integrity": "sha512-qm9rWfkh/o8OvzMIfY8a5bCmgIniSpltbVlUVl983zDG1bUuQNd1/5lUEeWx5o/WJ99bXxS7yNI4/KIXfHexig==", + "dev": true + }, + "@secretlint/resolver": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/@secretlint/resolver/-/resolver-10.2.2.tgz", + "integrity": "sha512-3md0cp12e+Ae5V+crPQYGd6aaO7ahw95s28OlULGyclyyUtf861UoRGS2prnUrKh7MZb23kdDOyGCYb9br5e4w==", + "dev": true + }, + "@secretlint/secretlint-formatter-sarif": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/@secretlint/secretlint-formatter-sarif/-/secretlint-formatter-sarif-10.2.2.tgz", + "integrity": "sha512-ojiF9TGRKJJw308DnYBucHxkpNovDNu1XvPh7IfUp0A12gzTtxuWDqdpuVezL7/IP8Ua7mp5/VkDMN9OLp1doQ==", + "dev": true, + "requires": { + "node-sarif-builder": "^3.2.0" + } + }, + "@secretlint/secretlint-rule-no-dotenv": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/@secretlint/secretlint-rule-no-dotenv/-/secretlint-rule-no-dotenv-10.2.2.tgz", + "integrity": "sha512-KJRbIShA9DVc5Va3yArtJ6QDzGjg3PRa1uYp9As4RsyKtKSSZjI64jVca57FZ8gbuk4em0/0Jq+uy6485wxIdg==", + "dev": true, + "requires": { + "@secretlint/types": "^10.2.2" + } + }, + "@secretlint/secretlint-rule-preset-recommend": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/@secretlint/secretlint-rule-preset-recommend/-/secretlint-rule-preset-recommend-10.2.2.tgz", + "integrity": "sha512-K3jPqjva8bQndDKJqctnGfwuAxU2n9XNCPtbXVI5JvC7FnQiNg/yWlQPbMUlBXtBoBGFYp08A94m6fvtc9v+zA==", + "dev": true + }, + "@secretlint/source-creator": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/@secretlint/source-creator/-/source-creator-10.2.2.tgz", + "integrity": "sha512-h6I87xJfwfUTgQ7irWq7UTdq/Bm1RuQ/fYhA3dtTIAop5BwSFmZyrchph4WcoEvbN460BWKmk4RYSvPElIIvxw==", + "dev": true, + "requires": { + "@secretlint/types": "^10.2.2", + "istextorbinary": "^9.5.0" + } + }, + "@secretlint/types": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/@secretlint/types/-/types-10.2.2.tgz", + "integrity": "sha512-Nqc90v4lWCXyakD6xNyNACBJNJ0tNCwj2WNk/7ivyacYHxiITVgmLUFXTBOeCdy79iz6HtN9Y31uw/jbLrdOAg==", + "dev": true + }, + "@sindresorhus/merge-streams": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz", + "integrity": "sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==", + "dev": true + }, "@sinonjs/commons": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz", @@ -6390,6 +8448,63 @@ "integrity": "sha512-sXXKG+uL9IrKqViTtao2Ws6dy0znu9sOaP1di/jKGW1M6VssO8vlpXCQcpZ+jisQ1tTFAC5Jo/EOzFbggBagFQ==", "dev": true }, + "@textlint/ast-node-types": { + "version": "15.5.0", + "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-15.5.0.tgz", + "integrity": "sha512-K0LEuuTo4rza8yDrlYkRdXLao8Iz/QBMsQdIxRrOOrLYb4HAtZaypZ78c+J6rDA1UlGxadZVLmkkiv4KV5fMKQ==", + "dev": true + }, + "@textlint/linter-formatter": { + "version": "15.5.0", + "resolved": "https://registry.npmjs.org/@textlint/linter-formatter/-/linter-formatter-15.5.0.tgz", + "integrity": "sha512-DPTm2+VXKID41qKQWagg/4JynM6hEEpvbq0PlGsEoC4Xm7IqXIxFym3mSf5+ued0cuiIV1hR9kgXjqGdP035tw==", + "dev": true, + "requires": { + "@azu/format-text": "^1.0.2", + "@azu/style-format": "^1.0.1", + "@textlint/module-interop": "15.5.0", + "@textlint/resolver": "15.5.0", + "@textlint/types": "15.5.0", + "chalk": "^4.1.2", + "debug": "^4.4.3", + "js-yaml": "^4.1.1", + "lodash": "^4.17.21", + "pluralize": "^2.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "table": "^6.9.0", + "text-table": "^0.2.0" + }, + "dependencies": { + "pluralize": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-2.0.0.tgz", + "integrity": "sha512-TqNZzQCD4S42De9IfnnBvILN7HAW7riLqsCyp8lgjXeysyPlX5HhqKAcJHHHb9XskE4/a+7VGC9zzx8Ls0jOAw==", + "dev": true + } + } + }, + "@textlint/module-interop": { + "version": "15.5.0", + "resolved": "https://registry.npmjs.org/@textlint/module-interop/-/module-interop-15.5.0.tgz", + "integrity": "sha512-rqfouEhBEgZlR9umswWXXRBcmmSM28Trpr9b0duzgehKYVc7wSQCuQMagr6YBJa2NRMfRNinupusbJXMg0ij2A==", + "dev": true + }, + "@textlint/resolver": { + "version": "15.5.0", + "resolved": "https://registry.npmjs.org/@textlint/resolver/-/resolver-15.5.0.tgz", + "integrity": "sha512-kK5nFbg5N3kVoZExQI/dnYjCInmTltvXDnuCRrBxHI01i6kO/o8R7Lc2aFkAZ6/NUZuRPalkyDdwZJke4/R2wg==", + "dev": true + }, + "@textlint/types": { + "version": "15.5.0", + "resolved": "https://registry.npmjs.org/@textlint/types/-/types-15.5.0.tgz", + "integrity": "sha512-EjAPbuA+3NyQ9WyFP7iUlddi35F3mGrf4tb4cZM0nWywbtEJ3+XAYqL+5RsF0qFeSguxGir09NdZOWrG9wVOUQ==", + "dev": true, + "requires": { + "@textlint/ast-node-types": "15.5.0" + } + }, "@tootallnate/once": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", @@ -6479,6 +8594,18 @@ "undici-types": "~6.21.0" } }, + "@types/normalize-package-data": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", + "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", + "dev": true + }, + "@types/sarif": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/@types/sarif/-/sarif-2.1.7.tgz", + "integrity": "sha512-kRz0VEkJqWLf1LLVN4pT1cg1Z9wAuvI6L97V3m2f5B76Tg8d413ddvLBPTEHAZJlnn4XSvu0FkZtViCQGVyrXQ==", + "dev": true + }, "@types/semver": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/@types/semver/-/semver-5.5.0.tgz", @@ -6618,6 +8745,41 @@ "eslint-visitor-keys": "^3.3.0" } }, + "@typespec/ts-http-runtime": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@typespec/ts-http-runtime/-/ts-http-runtime-0.3.2.tgz", + "integrity": "sha512-IlqQ/Gv22xUC1r/WQm4StLkYQmaaTsXAhUVsNE0+xiyf0yRFiH5++q78U3bw6bLKDCTmh0uqKB9eG9+Bt75Dkg==", + "requires": { + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.0", + "tslib": "^2.6.2" + }, + "dependencies": { + "agent-base": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==" + }, + "http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "requires": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + } + }, + "https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "requires": { + "agent-base": "^7.1.2", + "debug": "4" + } + } + } + }, "@vscode/debugadapter": { "version": "1.65.0", "resolved": "https://registry.npmjs.org/@vscode/debugadapter/-/debugadapter-1.65.0.tgz", @@ -6701,27 +8863,36 @@ } }, "@vscode/vsce": { - "version": "2.24.0", - "resolved": "https://registry.npmjs.org/@vscode/vsce/-/vsce-2.24.0.tgz", - "integrity": "sha512-p6CIXpH5HXDqmUkgFXvIKTjZpZxy/uDx4d/UsfhS9vQUun43KDNUbYeZocyAHgqcJlPEurgArHz9te1PPiqPyA==", - "dev": true, - "requires": { - "azure-devops-node-api": "^11.0.1", - "chalk": "^2.4.2", + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/@vscode/vsce/-/vsce-3.7.1.tgz", + "integrity": "sha512-OTm2XdMt2YkpSn2Nx7z2EJtSuhRHsTPYsSK59hr3v8jRArK+2UEoju4Jumn1CmpgoBLGI6ReHLJ/czYltNUW3g==", + "dev": true, + "requires": { + "@azure/identity": "^4.1.0", + "@secretlint/node": "^10.1.2", + "@secretlint/secretlint-formatter-sarif": "^10.1.2", + "@secretlint/secretlint-rule-no-dotenv": "^10.1.2", + "@secretlint/secretlint-rule-preset-recommend": "^10.1.2", + "@vscode/vsce-sign": "^2.0.0", + "azure-devops-node-api": "^12.5.0", + "chalk": "^4.1.2", "cheerio": "^1.0.0-rc.9", - "commander": "^6.2.1", - "glob": "^7.0.6", + "cockatiel": "^3.1.2", + "commander": "^12.1.0", + "form-data": "^4.0.0", + "glob": "^11.0.0", "hosted-git-info": "^4.0.2", "jsonc-parser": "^3.2.0", "keytar": "^7.7.0", "leven": "^3.1.0", - "markdown-it": "^12.3.2", + "markdown-it": "^14.1.0", "mime": "^1.3.4", "minimatch": "^3.0.3", "parse-semver": "^1.1.1", "read": "^1.0.7", + "secretlint": "^10.1.2", "semver": "^7.5.2", - "tmp": "^0.2.1", + "tmp": "^0.2.3", "typed-rest-client": "^1.8.4", "url-join": "^4.0.1", "xml2js": "^0.5.0", @@ -6730,21 +8901,112 @@ }, "dependencies": { "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-11.1.0.tgz", + "integrity": "sha512-vuNwKSaKiqm7g0THUBu2x7ckSs3XJLXE+2ssL7/MfTGPLLcrJQ/4Uq1CjPTtO5cCIiRxqvN6Twy1qOwhL0Xjcw==", "dev": true, "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "foreground-child": "^3.3.1", + "jackspeak": "^4.1.1", + "minimatch": "^10.1.1", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^2.0.0" + }, + "dependencies": { + "minimatch": { + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.1.1.tgz", + "integrity": "sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==", + "dev": true, + "requires": { + "@isaacs/brace-expansion": "^5.0.0" + } + } } } } }, + "@vscode/vsce-sign": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@vscode/vsce-sign/-/vsce-sign-2.0.9.tgz", + "integrity": "sha512-8IvaRvtFyzUnGGl3f5+1Cnor3LqaUWvhaUjAYO8Y39OUYlOf3cRd+dowuQYLpZcP3uwSG+mURwjEBOSq4SOJ0g==", + "dev": true, + "requires": { + "@vscode/vsce-sign-alpine-arm64": "2.0.6", + "@vscode/vsce-sign-alpine-x64": "2.0.6", + "@vscode/vsce-sign-darwin-arm64": "2.0.6", + "@vscode/vsce-sign-darwin-x64": "2.0.6", + "@vscode/vsce-sign-linux-arm": "2.0.6", + "@vscode/vsce-sign-linux-arm64": "2.0.6", + "@vscode/vsce-sign-linux-x64": "2.0.6", + "@vscode/vsce-sign-win32-arm64": "2.0.6", + "@vscode/vsce-sign-win32-x64": "2.0.6" + } + }, + "@vscode/vsce-sign-alpine-arm64": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-alpine-arm64/-/vsce-sign-alpine-arm64-2.0.6.tgz", + "integrity": "sha512-wKkJBsvKF+f0GfsUuGT0tSW0kZL87QggEiqNqK6/8hvqsXvpx8OsTEc3mnE1kejkh5r+qUyQ7PtF8jZYN0mo8Q==", + "dev": true, + "optional": true + }, + "@vscode/vsce-sign-alpine-x64": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-alpine-x64/-/vsce-sign-alpine-x64-2.0.6.tgz", + "integrity": "sha512-YoAGlmdK39vKi9jA18i4ufBbd95OqGJxRvF3n6ZbCyziwy3O+JgOpIUPxv5tjeO6gQfx29qBivQ8ZZTUF2Ba0w==", + "dev": true, + "optional": true + }, + "@vscode/vsce-sign-darwin-arm64": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-darwin-arm64/-/vsce-sign-darwin-arm64-2.0.6.tgz", + "integrity": "sha512-5HMHaJRIQuozm/XQIiJiA0W9uhdblwwl2ZNDSSAeXGO9YhB9MH5C4KIHOmvyjUnKy4UCuiP43VKpIxW1VWP4tQ==", + "dev": true, + "optional": true + }, + "@vscode/vsce-sign-darwin-x64": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-darwin-x64/-/vsce-sign-darwin-x64-2.0.6.tgz", + "integrity": "sha512-25GsUbTAiNfHSuRItoQafXOIpxlYj+IXb4/qarrXu7kmbH94jlm5sdWSCKrrREs8+GsXF1b+l3OB7VJy5jsykw==", + "dev": true, + "optional": true + }, + "@vscode/vsce-sign-linux-arm": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-linux-arm/-/vsce-sign-linux-arm-2.0.6.tgz", + "integrity": "sha512-UndEc2Xlq4HsuMPnwu7420uqceXjs4yb5W8E2/UkaHBB9OWCwMd3/bRe/1eLe3D8kPpxzcaeTyXiK3RdzS/1CA==", + "dev": true, + "optional": true + }, + "@vscode/vsce-sign-linux-arm64": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-linux-arm64/-/vsce-sign-linux-arm64-2.0.6.tgz", + "integrity": "sha512-cfb1qK7lygtMa4NUl2582nP7aliLYuDEVpAbXJMkDq1qE+olIw/es+C8j1LJwvcRq1I2yWGtSn3EkDp9Dq5FdA==", + "dev": true, + "optional": true + }, + "@vscode/vsce-sign-linux-x64": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-linux-x64/-/vsce-sign-linux-x64-2.0.6.tgz", + "integrity": "sha512-/olerl1A4sOqdP+hjvJ1sbQjKN07Y3DVnxO4gnbn/ahtQvFrdhUi0G1VsZXDNjfqmXw57DmPi5ASnj/8PGZhAA==", + "dev": true, + "optional": true + }, + "@vscode/vsce-sign-win32-arm64": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-win32-arm64/-/vsce-sign-win32-arm64-2.0.6.tgz", + "integrity": "sha512-ivM/MiGIY0PJNZBoGtlRBM/xDpwbdlCWomUWuLmIxbi1Cxe/1nooYrEQoaHD8ojVRgzdQEUzMsRbyF5cJJgYOg==", + "dev": true, + "optional": true + }, + "@vscode/vsce-sign-win32-x64": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-win32-x64/-/vsce-sign-win32-x64-2.0.6.tgz", + "integrity": "sha512-mgth9Kvze+u8CruYMmhHw6Zgy3GRX2S+Ed5oSokDEK5vPEwGGKnmuXua9tmFhomeAnhgJnL4DCna3TiNuGrBTQ==", + "dev": true, + "optional": true + }, "@webassemblyjs/ast": { "version": "1.12.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz", @@ -6984,6 +9246,15 @@ "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", "dev": true }, + "ansi-escapes": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.2.0.tgz", + "integrity": "sha512-g6LhBsl+GBPRWGWsBtutpzBYuIIdBkLEvad5C/va/74Db018+5TZiyA26cZJAr3Rft5lprVqOIPxf5Vid6tqAw==", + "dev": true, + "requires": { + "environment": "^1.0.0" + } + }, "ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", @@ -6991,12 +9262,12 @@ "dev": true }, "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { - "color-convert": "^1.9.0" + "color-convert": "^2.0.1" } }, "anymatch": { @@ -7047,6 +9318,12 @@ "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", "dev": true }, + "astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true + }, "async-hook-jl": { "version": "1.7.6", "resolved": "https://registry.npmjs.org/async-hook-jl/-/async-hook-jl-1.7.6.tgz", @@ -7077,9 +9354,9 @@ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" }, "azure-devops-node-api": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/azure-devops-node-api/-/azure-devops-node-api-11.2.0.tgz", - "integrity": "sha512-XdiGPhrpaT5J8wdERRKs5g8E0Zy1pvOYTli7z9E8nmOn3YGp4FhtjhrOyFmX/8veWCwdI69mCHKJw6l+4J/bHA==", + "version": "12.5.0", + "resolved": "https://registry.npmjs.org/azure-devops-node-api/-/azure-devops-node-api-12.5.0.tgz", + "integrity": "sha512-R5eFskGvOm3U/GzeAuxRkUsAl0hrAwGgWn6zAd2KrZmrEhWZVqLew4OOupbQlXUuojUzpGtq62SmdhJ06N88og==", "dev": true, "requires": { "tunnel": "0.0.6", @@ -7104,6 +9381,15 @@ "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", "dev": true }, + "binaryextensions": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/binaryextensions/-/binaryextensions-6.11.0.tgz", + "integrity": "sha512-sXnYK/Ij80TO3lcqZVV2YgfKN5QjUWIRk/XSm2J/4bd/lPko3lvk0O4ZppH6m+6hB2/GTu+ptNwVFe1xh+QLQw==", + "dev": true, + "requires": { + "editions": "^6.21.0" + } + }, "bl": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", @@ -7147,6 +9433,12 @@ "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", "dev": true }, + "boundary": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/boundary/-/boundary-2.0.0.tgz", + "integrity": "sha512-rJKn5ooC9u8q13IMCrW0RSp31pxBCHE3y9V/tp3TdWSLf8Em3p6Di4NBpfzbJge9YjjFEsD0RtFEjtvHL5VyEA==", + "dev": true + }, "brace-expansion": { "version": "1.1.12", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", @@ -7190,23 +9482,25 @@ "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", "dev": true }, + "buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==", + "dev": true + }, "buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "dev": true }, - "call-bind": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", - "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "bundle-name": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", + "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==", "dev": true, "requires": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.1" + "run-applescript": "^7.0.0" } }, "call-bind-apply-helpers": { @@ -7218,6 +9512,16 @@ "function-bind": "^1.1.2" } }, + "call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "dev": true, + "requires": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + } + }, "callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -7261,14 +9565,13 @@ } }, "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" } }, "check-error": { @@ -7396,19 +9699,25 @@ } } }, + "cockatiel": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/cockatiel/-/cockatiel-3.2.1.tgz", + "integrity": "sha512-gfrHV6ZPkquExvMh9IOkKsBzNDk6sDuZ6DdBGUBkvFnTCqCxzpuq48RySgP0AnaqQkw2zynOFj9yly6T1Q2G5Q==", + "dev": true + }, "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "requires": { - "color-name": "1.1.3" + "color-name": "~1.1.4" } }, "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, "colorette": { @@ -7426,9 +9735,9 @@ } }, "commander": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", - "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", + "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", "dev": true }, "concat-map": { @@ -7483,11 +9792,11 @@ "dev": true }, "debug": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", - "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", "requires": { - "ms": "2.1.2" + "ms": "^2.1.3" } }, "decamelize": { @@ -7528,17 +9837,28 @@ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, - "define-data-property": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "default-browser": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.4.0.tgz", + "integrity": "sha512-XDuvSq38Hr1MdN47EDvYtx3U0MTqpCEn+F6ft8z2vYDzMrvQhVp0ui9oQdqW3MvK3vqUETglt1tVGgjLuJ5izg==", "dev": true, "requires": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" + "bundle-name": "^4.1.0", + "default-browser-id": "^5.0.0" } }, + "default-browser-id": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.1.tgz", + "integrity": "sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q==", + "dev": true + }, + "define-lazy-prop": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", + "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", + "dev": true + }, "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -7636,6 +9956,30 @@ "gopd": "^1.2.0" } }, + "eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true + }, + "ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "dev": true, + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "editions": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/editions/-/editions-6.22.0.tgz", + "integrity": "sha512-UgGlf8IW75je7HZjNDpJdCv4cGJWIi6yumFdZ0R7A8/CIhQiWUjyGLCxdHpd8bmyD1gnkfUNK0oeOXqUS2cpfQ==", + "dev": true, + "requires": { + "version-range": "^4.15.0" + } + }, "electron-to-chromium": { "version": "1.5.13", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.13.tgz", @@ -7688,6 +10032,12 @@ "integrity": "sha512-CO40UI41xDQzhLB1hWyqUKgFhs250pNcGbyGKe1l/e4FSaI/+YE4IMG76GDt0In67WLPACIITC+sOi08x4wIvg==", "dev": true }, + "environment": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/environment/-/environment-1.1.0.tgz", + "integrity": "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==", + "dev": true + }, "es-define-property": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", @@ -7729,12 +10079,6 @@ "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", "dev": true }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true - }, "eslint": { "version": "8.50.0", "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.50.0.tgz", @@ -7780,40 +10124,6 @@ "text-table": "^0.2.0" }, "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, "escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", @@ -7835,21 +10145,6 @@ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } } } }, @@ -7946,16 +10241,16 @@ "dev": true }, "fast-glob": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", - "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", "dev": true, "requires": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", "glob-parent": "^5.1.2", "merge2": "^1.3.0", - "micromatch": "^4.0.4" + "micromatch": "^4.0.8" }, "dependencies": { "glob-parent": { @@ -7981,6 +10276,12 @@ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true }, + "fast-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", + "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", + "dev": true + }, "fastest-levenshtein": { "version": "1.0.16", "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", @@ -8055,6 +10356,16 @@ "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", "dev": true }, + "foreground-child": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" + } + }, "form-data": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz", @@ -8235,20 +10546,11 @@ "dev": true }, "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, - "has-property-descriptors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", - "dev": true, - "requires": { - "es-define-property": "^1.0.0" - } - }, "has-symbols": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", @@ -8381,6 +10683,12 @@ "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true }, + "index-to-position": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/index-to-position/-/index-to-position-1.2.0.tgz", + "integrity": "sha512-Yg7+ztRkqslMAS2iFaU+Oa4KTSidr63OsFGlOrJoW981kIYO3CGCS3wA95P1mUi/IVSJkn0D479KTJpVpvFNuw==", + "dev": true + }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -8427,6 +10735,12 @@ "hasown": "^2.0.2" } }, + "is-docker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "dev": true + }, "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -8448,6 +10762,15 @@ "is-extglob": "^2.1.1" } }, + "is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "dev": true, + "requires": { + "is-docker": "^3.0.0" + } + }, "is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", @@ -8481,6 +10804,15 @@ "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", "dev": true }, + "is-wsl": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz", + "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==", + "dev": true, + "requires": { + "is-inside-container": "^1.0.0" + } + }, "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", @@ -8499,6 +10831,26 @@ "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", "dev": true }, + "istextorbinary": { + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/istextorbinary/-/istextorbinary-9.5.0.tgz", + "integrity": "sha512-5mbUj3SiZXCuRf9fT3ibzbSSEWiy63gFfksmGfdOzujPjW3k+z8WvIBxcJHBoQNlaZaiyB25deviif2+osLmLw==", + "dev": true, + "requires": { + "binaryextensions": "^6.11.0", + "editions": "^6.21.0", + "textextensions": "^6.11.0" + } + }, + "jackspeak": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.1.1.tgz", + "integrity": "sha512-zptv57P3GpL+O0I7VdMJNBZCu+BPHVQUk55Ft8/QCJjTVxrnJHuVuX/0Bl2A6/+2oyR/ZMEuFKwmzqqZ/U5nPQ==", + "dev": true, + "requires": { + "@isaacs/cliui": "^8.0.2" + } + }, "jest-worker": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", @@ -8510,12 +10862,6 @@ "supports-color": "^8.0.0" }, "dependencies": { - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, "supports-color": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", @@ -8527,6 +10873,12 @@ } } }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, "js-yaml": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", @@ -8554,6 +10906,12 @@ "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", "dev": true }, + "json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true + }, "jsonc-parser": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", @@ -8568,6 +10926,24 @@ "universalify": "^2.0.0" } }, + "jsonwebtoken": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.3.tgz", + "integrity": "sha512-MT/xP0CrubFRNLNKvxJ2BYfy53Zkm++5bX9dtuPbqAeQpTVe0MQTFhao8+Cp//EmJp244xt6Drw/GVEGCUj40g==", + "dev": true, + "requires": { + "jws": "^4.0.1", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.1.1", + "semver": "^7.5.4" + } + }, "jszip": { "version": "3.10.1", "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz", @@ -8586,6 +10962,27 @@ "integrity": "sha512-g3UB796vUFIY90VIv/WX3L2c8CS2MdWUww3CNrYmqza1Fg0DURc2K/O4YrnklBdQarSJ/y8JnJYDGc+1iumQjg==", "dev": true }, + "jwa": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.1.tgz", + "integrity": "sha512-hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5hwqCXDg==", + "dev": true, + "requires": { + "buffer-equal-constant-time": "^1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "jws": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.1.tgz", + "integrity": "sha512-EKI/M/yqPncGUUh44xz0PxSidXFr/+r0pA70+gIYhjv+et7yxM+s29Y+VGDkovRofQem0fs7Uvf4+YmAdyRduA==", + "dev": true, + "requires": { + "jwa": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, "keytar": { "version": "7.9.0", "resolved": "https://registry.npmjs.org/keytar/-/keytar-7.9.0.tgz", @@ -8629,12 +11026,12 @@ } }, "linkify-it": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-3.0.3.tgz", - "integrity": "sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz", + "integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==", "dev": true, "requires": { - "uc.micro": "^1.0.1" + "uc.micro": "^2.0.0" } }, "loader-runner": { @@ -8663,12 +11060,60 @@ "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==", "dev": true }, + "lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==", + "dev": true + }, + "lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==", + "dev": true + }, + "lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==", + "dev": true + }, + "lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==", + "dev": true + }, + "lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", + "dev": true + }, + "lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==", + "dev": true + }, "lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, + "lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", + "dev": true + }, + "lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", + "dev": true + }, "log-symbols": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", @@ -8677,57 +11122,6 @@ "requires": { "chalk": "^4.1.0", "is-unicode-supported": "^0.1.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } } }, "loupe": { @@ -8748,24 +11142,17 @@ } }, "markdown-it": { - "version": "12.3.2", - "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-12.3.2.tgz", - "integrity": "sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==", + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.0.tgz", + "integrity": "sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==", "dev": true, "requires": { "argparse": "^2.0.1", - "entities": "~2.1.0", - "linkify-it": "^3.0.1", - "mdurl": "^1.0.1", - "uc.micro": "^1.0.5" - }, - "dependencies": { - "entities": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", - "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==", - "dev": true - } + "entities": "^4.4.0", + "linkify-it": "^5.0.0", + "mdurl": "^2.0.0", + "punycode.js": "^2.3.1", + "uc.micro": "^2.1.0" } }, "math-intrinsics": { @@ -8774,9 +11161,9 @@ "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==" }, "mdurl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", - "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz", + "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==", "dev": true }, "merge-stream": { @@ -8843,6 +11230,12 @@ "dev": true, "optional": true }, + "minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true + }, "mkdirp-classic": { "version": "0.5.3", "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", @@ -8893,12 +11286,6 @@ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, "minimatch": { "version": "5.1.6", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", @@ -8908,12 +11295,6 @@ "brace-expansion": "^2.0.1" } }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, "supports-color": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", @@ -8931,9 +11312,9 @@ "integrity": "sha512-ySViT69/76t8VhE1xXHK6Ch4NcDd26gx0MzKXLO+F7NOtnqH68d9zF94nT8ZWSxXh8ELOERsnJO/sWt1xZYw5A==" }, "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, "mute-stream": { "version": "0.0.8", @@ -9013,6 +11394,44 @@ "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", "dev": true }, + "node-sarif-builder": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/node-sarif-builder/-/node-sarif-builder-3.4.0.tgz", + "integrity": "sha512-tGnJW6OKRii9u/b2WiUViTJS+h7Apxx17qsMUjsUeNDiMMX5ZFf8F8Fcz7PAQ6omvOxHZtvDTmOYKJQwmfpjeg==", + "dev": true, + "requires": { + "@types/sarif": "^2.1.7", + "fs-extra": "^11.1.1" + } + }, + "normalize-package-data": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.2.tgz", + "integrity": "sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==", + "dev": true, + "requires": { + "hosted-git-info": "^7.0.0", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" + }, + "dependencies": { + "hosted-git-info": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.2.tgz", + "integrity": "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==", + "dev": true, + "requires": { + "lru-cache": "^10.0.1" + } + }, + "lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true + } + } + }, "normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", @@ -9029,9 +11448,9 @@ } }, "object-inspect": { - "version": "1.12.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", - "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", "dev": true }, "once": { @@ -9040,7 +11459,19 @@ "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "dev": true, "requires": { - "wrappy": "1" + "wrappy": "1" + } + }, + "open": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/open/-/open-10.2.0.tgz", + "integrity": "sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==", + "dev": true, + "requires": { + "default-browser": "^5.2.1", + "define-lazy-prop": "^3.0.0", + "is-inside-container": "^1.0.0", + "wsl-utils": "^0.1.0" } }, "optionator": { @@ -9075,12 +11506,24 @@ "p-limit": "^3.0.2" } }, + "p-map": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.4.tgz", + "integrity": "sha512-tkAQEw8ysMzmkhgw8k+1U/iPhWNhykKnSk4Rd5zLoPJCuJaGRPo6YposrZgaxHKzDHdDWWZvE/Sk7hsL2X/CpQ==", + "dev": true + }, "p-try": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true }, + "package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "dev": true + }, "pako": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", @@ -9096,6 +11539,25 @@ "callsites": "^3.0.0" } }, + "parse-json": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-8.3.0.tgz", + "integrity": "sha512-ybiGyvspI+fAoRQbIPRddCcSTV9/LsJbf0e/S85VLowVGzRmokfneg2kwVW/KU5rOXrPSbF1qAKPMgNTqqROQQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.26.2", + "index-to-position": "^1.1.0", + "type-fest": "^4.39.1" + }, + "dependencies": { + "type-fest": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", + "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", + "dev": true + } + } + }, "parse-semver": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/parse-semver/-/parse-semver-1.1.1.tgz", @@ -9155,6 +11617,24 @@ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, + "path-scurry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.1.tgz", + "integrity": "sha512-oWyT4gICAu+kaA7QWk/jvCHWarMKNs6pXOGWKDTr7cw4IGcUbW+PeTfbaQiLGheFRpjo6O9J0PmyMfQPjH71oA==", + "dev": true, + "requires": { + "lru-cache": "^11.0.0", + "minipass": "^7.1.2" + }, + "dependencies": { + "lru-cache": { + "version": "11.2.4", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.4.tgz", + "integrity": "sha512-B5Y16Jr9LB9dHVkh6ZevG+vAbOsNOYCX+sXvFWFu7B3Iz5mijW3zdbMyhsh8ANd2mSWBYdJgnqi+mL7/LrOPYg==", + "dev": true + } + } + }, "path-to-regexp": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.9.0.tgz", @@ -9191,9 +11671,9 @@ "dev": true }, "picocolors": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.0.tgz", - "integrity": "sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", "dev": true }, "picomatch": { @@ -9250,6 +11730,12 @@ } } }, + "pluralize": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", + "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", + "dev": true + }, "postinstall-build": { "version": "5.0.3", "resolved": "https://registry.npmjs.org/postinstall-build/-/postinstall-build-5.0.3.tgz", @@ -9306,13 +11792,19 @@ "once": "^1.3.1" } }, + "punycode.js": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz", + "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==", + "dev": true + }, "qs": { - "version": "6.11.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz", - "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==", + "version": "6.14.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.1.tgz", + "integrity": "sha512-4EK3+xJl8Ts67nLYNwqw/dsFVnCf+qR7RgXSK9jEEm9unao3njwMDdmsdvoKBKHzxd7tCYz5e5M+SnMjdtXGQQ==", "dev": true, "requires": { - "side-channel": "^1.0.4" + "side-channel": "^1.1.0" } }, "queue-microtask": { @@ -9352,6 +11844,18 @@ } } }, + "rc-config-loader": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/rc-config-loader/-/rc-config-loader-4.1.3.tgz", + "integrity": "sha512-kD7FqML7l800i6pS6pvLyIE2ncbk9Du8Q0gp/4hMPhJU6ZxApkoLcGD8ZeqgiAlfwZ6BlETq6qqe+12DUL207w==", + "dev": true, + "requires": { + "debug": "^4.3.4", + "js-yaml": "^4.1.0", + "json5": "^2.2.2", + "require-from-string": "^2.0.2" + } + }, "read": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", @@ -9361,6 +11865,27 @@ "mute-stream": "~0.0.4" } }, + "read-pkg": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-9.0.1.tgz", + "integrity": "sha512-9viLL4/n1BJUCT1NXVTdS1jtm80yDEgR5T4yCelII49Mbj0v1rZdKqj7zCiYdbB0CuCgdrvHcNogAKTFPBocFA==", + "dev": true, + "requires": { + "@types/normalize-package-data": "^2.4.3", + "normalize-package-data": "^6.0.0", + "parse-json": "^8.0.0", + "type-fest": "^4.6.0", + "unicorn-magic": "^0.1.0" + }, + "dependencies": { + "type-fest": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", + "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", + "dev": true + } + } + }, "readable-stream": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", @@ -9400,6 +11925,12 @@ "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "dev": true }, + "require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true + }, "require-in-the-middle": { "version": "7.3.0", "resolved": "https://registry.npmjs.org/require-in-the-middle/-/require-in-the-middle-7.3.0.tgz", @@ -9474,6 +12005,12 @@ } } }, + "run-applescript": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.1.0.tgz", + "integrity": "sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==", + "dev": true + }, "run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -9511,6 +12048,61 @@ "ajv-keywords": "^3.5.2" } }, + "secretlint": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/secretlint/-/secretlint-10.2.2.tgz", + "integrity": "sha512-xVpkeHV/aoWe4vP4TansF622nBEImzCY73y/0042DuJ29iKIaqgoJ8fGxre3rVSHHbxar4FdJobmTnLp9AU0eg==", + "dev": true, + "requires": { + "@secretlint/config-creator": "^10.2.2", + "@secretlint/formatter": "^10.2.2", + "@secretlint/node": "^10.2.2", + "@secretlint/profiler": "^10.2.2", + "debug": "^4.4.1", + "globby": "^14.1.0", + "read-pkg": "^9.0.1" + }, + "dependencies": { + "globby": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-14.1.0.tgz", + "integrity": "sha512-0Ia46fDOaT7k4og1PDW4YbodWWr3scS2vAr2lTbsplOt2WkKp0vQbkI9wKis/T5LV/dqPjO3bpS/z6GTJB82LA==", + "dev": true, + "requires": { + "@sindresorhus/merge-streams": "^2.1.0", + "fast-glob": "^3.3.3", + "ignore": "^7.0.3", + "path-type": "^6.0.0", + "slash": "^5.1.0", + "unicorn-magic": "^0.3.0" + } + }, + "ignore": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", + "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", + "dev": true + }, + "path-type": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-6.0.0.tgz", + "integrity": "sha512-Vj7sf++t5pBD637NSfkxpHSMfWaeig5+DKWLhcqIYx6mWQz5hdJTGDVMQiJcw1ZYkhs7AazKDGpRVji1LJCZUQ==", + "dev": true + }, + "slash": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", + "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", + "dev": true + }, + "unicorn-magic": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.3.0.tgz", + "integrity": "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==", + "dev": true + } + } + }, "semver": { "version": "7.5.4", "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", @@ -9528,20 +12120,6 @@ "randombytes": "^2.1.0" } }, - "set-function-length": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", - "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", - "dev": true, - "requires": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2" - } - }, "setimmediate": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", @@ -9578,16 +12156,59 @@ "integrity": "sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw==" }, "side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "dev": true, + "requires": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + } + }, + "side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "dev": true, + "requires": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + } + }, + "side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "dev": true, + "requires": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + } + }, + "side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", "dev": true, "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" } }, + "signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true + }, "simple-concat": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", @@ -9619,23 +12240,6 @@ "diff": "^5.1.0", "nise": "^5.1.4", "supports-color": "^7.2.0" - }, - "dependencies": { - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } } }, "slash": { @@ -9644,6 +12248,17 @@ "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true }, + "slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + } + }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -9660,6 +12275,38 @@ "source-map": "^0.6.0" } }, + "spdx-correct": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", + "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.22", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.22.tgz", + "integrity": "sha512-4PRT4nh1EImPbt2jASOKHX7PB7I+e4IWNLvkKFDxNhJlfjbYlleYQh285Z/3mPTHSAK/AvdMmw5BNNuYH8ShgQ==", + "dev": true + }, "stack-chain": { "version": "1.3.7", "resolved": "https://registry.npmjs.org/stack-chain/-/stack-chain-1.3.7.tgz", @@ -9685,6 +12332,17 @@ "strip-ansi": "^6.0.1" } }, + "string-width-cjs": { + "version": "npm:string-width@4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, "strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -9694,19 +12352,47 @@ "ansi-regex": "^5.0.1" } }, + "strip-ansi-cjs": { + "version": "npm:strip-ansi@6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, "strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true }, + "structured-source": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/structured-source/-/structured-source-4.0.0.tgz", + "integrity": "sha512-qGzRFNJDjFieQkl/sVOI2dUjHKRyL9dAJi2gCPGJLbJHBIkyOHxjuocpIEfbLioX+qSJpvbYdT49/YCdMznKxA==", + "dev": true, + "requires": { + "boundary": "^2.0.0" + } + }, "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "supports-hyperlinks": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-3.2.0.tgz", + "integrity": "sha512-zFObLMyZeEwzAoKCyu1B91U79K2t7ApXuQfo8OuxwXLDgcKxuwM+YvcbIhm6QWqz7mHUH1TVytR1PwVVjEuMig==", "dev": true, "requires": { - "has-flag": "^3.0.0" + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" } }, "supports-preserve-symlinks-flag": { @@ -9714,6 +12400,39 @@ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" }, + "table": { + "version": "6.9.0", + "resolved": "https://registry.npmjs.org/table/-/table-6.9.0.tgz", + "integrity": "sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A==", + "dev": true, + "requires": { + "ajv": "^8.0.1", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + }, + "dependencies": { + "ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + } + } + }, "tapable": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", @@ -9761,6 +12480,16 @@ } } }, + "terminal-link": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-4.0.0.tgz", + "integrity": "sha512-lk+vH+MccxNqgVqSnkMVKx4VLJfnLjDBGzH16JVZjKE2DoxP57s6/vt6JmXV5I3jBcfGrxNrYtC+mPtU7WJztA==", + "dev": true, + "requires": { + "ansi-escapes": "^7.0.0", + "supports-hyperlinks": "^3.2.0" + } + }, "terser": { "version": "5.31.6", "resolved": "https://registry.npmjs.org/terser/-/terser-5.31.6.tgz", @@ -9800,6 +12529,15 @@ "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "dev": true }, + "textextensions": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/textextensions/-/textextensions-6.11.0.tgz", + "integrity": "sha512-tXJwSr9355kFJI3lbCkPpUH5cP8/M0GGy2xLO34aZCjMXBaK3SoPnZwr/oWmo1FdCnELcs4npdCIOFtq9W3ruQ==", + "dev": true, + "requires": { + "editions": "^6.21.0" + } + }, "tmp": { "version": "0.2.4", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.4.tgz", @@ -9825,57 +12563,6 @@ "enhanced-resolve": "^5.0.0", "micromatch": "^4.0.0", "semver": "^7.3.4" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } } }, "ts-mockito": { @@ -9947,9 +12634,9 @@ "dev": true }, "typed-rest-client": { - "version": "1.8.9", - "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.8.9.tgz", - "integrity": "sha512-uSmjE38B80wjL85UFX3sTYEUlvZ1JgCRhsWj/fJ4rZ0FqDUFoIuodtiVeE+cUqiVTOKPdKrp/sdftD15MDek6g==", + "version": "1.8.11", + "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.8.11.tgz", + "integrity": "sha512-5UvfMpd1oelmUPRbbaVnq+rHP7ng2cE4qoQkQeAqxRL6PklkxsM0g32/HL0yfvruK6ojQ5x8EE+HF4YV6DtuCA==", "dev": true, "requires": { "qs": "^6.9.1", @@ -9975,15 +12662,15 @@ "dev": true }, "uc.micro": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", - "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz", + "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==", "dev": true }, "underscore": { - "version": "1.13.6", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz", - "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==", + "version": "1.13.7", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.7.tgz", + "integrity": "sha512-GMXzWtsc57XAtguZgaQViUOzs0KTkk8ojr3/xAxXLITqf/3EMwxC0inyETfDFjH/Krbhuep0HNbbjI9i/q3F3g==", "dev": true }, "undici-types": { @@ -9992,6 +12679,12 @@ "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", "dev": true }, + "unicorn-magic": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz", + "integrity": "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==", + "dev": true + }, "universalify": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", @@ -10041,6 +12734,22 @@ "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "version-range": { + "version": "4.15.0", + "resolved": "https://registry.npmjs.org/version-range/-/version-range-4.15.0.tgz", + "integrity": "sha512-Ck0EJbAGxHwprkzFO966t4/5QkRuzh+/I1RxhLgUKKwEn+Cd8NwM60mE3AqBZg5gYODoXW0EFsQvbZjRlvdqbg==", + "dev": true + }, "vscode-jsonrpc": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.1.0.tgz", @@ -10203,32 +12912,17 @@ "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - } + } + }, + "wrap-ansi-cjs": { + "version": "npm:wrap-ansi@7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" } }, "wrappy": { @@ -10237,6 +12931,15 @@ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "dev": true }, + "wsl-utils": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/wsl-utils/-/wsl-utils-0.1.0.tgz", + "integrity": "sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==", + "dev": true, + "requires": { + "is-wsl": "^3.1.0" + } + }, "xml2js": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.5.0.tgz", diff --git a/package.json b/package.json index 7d6e2528..53fdb416 100644 --- a/package.json +++ b/package.json @@ -662,7 +662,7 @@ "@typescript-eslint/eslint-plugin": "^5.62.0", "@typescript-eslint/parser": "^5.62.0", "@vscode/test-electron": "^2.3.9", - "@vscode/vsce": "^2.24.0", + "@vscode/vsce": "^3.7.1-1", "chai": "^4.3.7", "chai-as-promised": "^7.1.1", "eslint": "^8.50.0", From 959f8c4300e6cbef7eae0d1c5d4e59cd1b3874f8 Mon Sep 17 00:00:00 2001 From: bschnurr Date: Thu, 8 Jan 2026 14:12:58 -0800 Subject: [PATCH 06/59] modify how we download debugpy from pip --- build/azure-devdiv-pipeline.pre-release.yml | 2 + build/azure-devdiv-pipeline.stable.yml | 2 + noxfile.py | 156 +++++++++----------- 3 files changed, 71 insertions(+), 89 deletions(-) diff --git a/build/azure-devdiv-pipeline.pre-release.yml b/build/azure-devdiv-pipeline.pre-release.yml index f409d31b..a81e7dcd 100644 --- a/build/azure-devdiv-pipeline.pre-release.yml +++ b/build/azure-devdiv-pipeline.pre-release.yml @@ -82,6 +82,8 @@ extends: - script: python -m nox --session install_bundled_libs displayName: Install Python dependencies + env: + USE_PIP_DOWNLOAD: 1 - script: python ./build/update_ext_version.py --for-publishing displayName: Update build number diff --git a/build/azure-devdiv-pipeline.stable.yml b/build/azure-devdiv-pipeline.stable.yml index 6c3ae0a2..f4d6d093 100644 --- a/build/azure-devdiv-pipeline.stable.yml +++ b/build/azure-devdiv-pipeline.stable.yml @@ -75,6 +75,8 @@ extends: - script: python -m nox --session install_bundled_libs displayName: Install Python dependencies + env: + USE_PIP_DOWNLOAD: 1 - script: python ./build/update_ext_version.py --release --for-publishing displayName: Update build number diff --git a/noxfile.py b/noxfile.py index 66261fbc..0e62638f 100644 --- a/noxfile.py +++ b/noxfile.py @@ -7,7 +7,6 @@ import json import os import pathlib -import re import tempfile import urllib.request as url_lib import zipfile @@ -60,117 +59,96 @@ def install_bundled_libs(session): ) session.install("packaging") + debugpy_info_json_path = pathlib.Path(__file__).parent / "debugpy_info.json" + debugpy_info = json.loads(debugpy_info_json_path.read_text(encoding="utf-8")) + target = os.environ.get("VSCETARGET", "") print("target:", target) - download_debugpy_via_pip(session, target) - - -def _infer_debugpy_version() -> str: - """Best-effort debugpy version selection. - - Priority: - 1) DEBUGPY_VERSION env var - 2) Extract from debugpy_info.json (if present) - """ - - env_version = os.environ.get("DEBUGPY_VERSION") - if env_version: - return env_version + if "darwin" in target: + wheels = debugpy_info["macOS"] + elif "win32-ia32" == target: + wheels = debugpy_info.get("win32", debugpy_info["any"]) + elif "win32-x64" == target: + wheels = debugpy_info["win64"] + elif "linux-x64" == target: + wheels = debugpy_info["linux"] + else: + wheels = debugpy_info["any"] - debugpy_info_json_path = pathlib.Path(__file__).parent / "debugpy_info.json" - if not debugpy_info_json_path.exists(): - raise FileNotFoundError( - "Missing debugpy version source. Set DEBUGPY_VERSION or add debugpy_info.json." - ) + # Use pip download when USE_PIP_DOWNLOAD is set (e.g., for Azure Artifacts feed) + if os.environ.get("USE_PIP_DOWNLOAD"): + download_debugpy_via_pip(session, wheels) + else: + download_url(wheels) - debugpy_info = json.loads(debugpy_info_json_path.read_text(encoding="utf-8")) - for platform_entries in debugpy_info.values(): - for entry in platform_entries: - match = re.search(r"/debugpy-([^/]+?)-", entry.get("url", "")) - if match: - return match.group(1) - - raise ValueError( - "Could not infer debugpy version from debugpy_info.json. Set DEBUGPY_VERSION." - ) +def _parse_wheel_info(url: str) -> dict: + """Parse version and platform info from a wheel URL. -def download_debugpy_via_pip(session: nox.Session, target: str) -> None: + Example URL: .../debugpy-1.8.19-cp311-cp311-win_amd64.whl + Returns: {"version": "1.8.19", "py_ver": "311", "abi": "cp311", "platform": "win_amd64"} + """ + import re + + filename = url.rsplit("/", 1)[-1] + # Wheel filename format: {name}-{version}-{python}-{abi}-{platform}.whl + match = re.match(r"debugpy-([^-]+)-cp(\d+)-([^-]+)-(.+)\.whl", filename) + if match: + return { + "version": match.group(1), + "py_ver": match.group(2), + "abi": match.group(3), + "platform": match.group(4), + } + # Fallback for py2.py3-none-any wheels + match = re.match(r"debugpy-([^-]+)-py\d\.py\d-none-any\.whl", filename) + if match: + return {"version": match.group(1), "py_ver": None, "abi": "none", "platform": "any"} + raise ValueError(f"Could not parse wheel filename: {filename}") + + +def download_debugpy_via_pip(session: nox.Session, wheels: list) -> None: """Downloads debugpy wheels via pip and extracts them into bundled/libs. - This respects pip configuration (index URLs, proxies, certs) and avoids hard-coded - direct downloads from files.pythonhosted.org. + Uses pip to download by package name, allowing pip to use configured + index URLs (e.g., Azure Artifacts feed) instead of direct PyPI URLs. """ - - debugpy_version = _infer_debugpy_version() libs_dir = pathlib.Path.cwd() / "bundled" / "libs" libs_dir.mkdir(parents=True, exist_ok=True) - # Match prior behavior: bundle debugpy wheels for the target (or universal fallback). - # We download multiple wheels for multiple CPython versions, because the extension may - # be used with different interpreter versions. - # - # Format: (python_version, implementation, abi, platform) - if "darwin" in target: - wheel_requests = [ - ("310", "cp", "cp310", "macosx_15_0_x86_64"), - ("311", "cp", "cp311", "macosx_15_0_universal2"), - ("312", "cp", "cp312", "macosx_15_0_universal2"), - ] - elif target == "win32-ia32": - wheel_requests = [ - ("310", "cp", "cp310", "win32"), - ("311", "cp", "cp311", "win32"), - ("312", "cp", "cp312", "win32"), - ] - elif target == "win32-x64": - wheel_requests = [ - ("310", "cp", "cp310", "win_amd64"), - ("311", "cp", "cp311", "win_amd64"), - ("312", "cp", "cp312", "win_amd64"), - ] - elif target == "linux-x64": - wheel_requests = [ - ("310", "cp", "cp310", "manylinux_2_34_x86_64"), - ("311", "cp", "cp311", "manylinux_2_34_x86_64"), - ("312", "cp", "cp312", "manylinux_2_34_x86_64"), - ] - else: - # Universal fallback wheel (py2.py3-none-any). - wheel_requests = [("39", "cp", "none", "any")] + # Parse version and platform info from wheel URLs + parsed = [_parse_wheel_info(w["url"]) for w in wheels] + version = parsed[0]["version"] with tempfile.TemporaryDirectory(prefix="debugpy_wheels_") as tmp_dir: tmp_path = pathlib.Path(tmp_dir) - for py_ver, impl, abi, platform_tag in wheel_requests: - session.run( - "python", - "-m", - "pip", - "download", - f"debugpy=={debugpy_version}", + + for info in parsed: + args = [ + "python", "-m", "pip", "download", + f"debugpy=={version}", "--no-deps", - "--only-binary", - ":all:", - "--dest", - str(tmp_path), - "--python-version", - py_ver, - "--implementation", - impl, - "--abi", - abi, - "--platform", - platform_tag, - ) + "--only-binary", ":all:", + "--dest", str(tmp_path), + ] + if info["py_ver"]: + # Platform-specific wheel + args.extend(["--python-version", info["py_ver"]]) + args.extend(["--implementation", "cp"]) + args.extend(["--abi", info["abi"]]) + args.extend(["--platform", info["platform"]]) + # For none-any wheels, no platform args needed + + session.run(*args) wheel_paths = sorted(tmp_path.glob("debugpy-*.whl")) if not wheel_paths: raise FileNotFoundError( - f"pip download produced no debugpy wheels for version {debugpy_version}." + f"pip download produced no debugpy wheels for version {version}." ) for wheel_path in wheel_paths: - print("Download:", wheel_path.name) + print("Downloaded:", wheel_path.name) with zipfile.ZipFile(wheel_path, "r") as wheel: for zip_info in wheel.infolist(): print("\t" + zip_info.filename) From b30caa2efdae41ebd3f0257a0735892e67a515c8 Mon Sep 17 00:00:00 2001 From: bschnurr Date: Thu, 8 Jan 2026 14:18:49 -0800 Subject: [PATCH 07/59] use pip by default --- build/azure-devdiv-pipeline.pre-release.yml | 2 -- build/azure-devdiv-pipeline.stable.yml | 2 -- noxfile.py | 6 +----- 3 files changed, 1 insertion(+), 9 deletions(-) diff --git a/build/azure-devdiv-pipeline.pre-release.yml b/build/azure-devdiv-pipeline.pre-release.yml index a81e7dcd..f409d31b 100644 --- a/build/azure-devdiv-pipeline.pre-release.yml +++ b/build/azure-devdiv-pipeline.pre-release.yml @@ -82,8 +82,6 @@ extends: - script: python -m nox --session install_bundled_libs displayName: Install Python dependencies - env: - USE_PIP_DOWNLOAD: 1 - script: python ./build/update_ext_version.py --for-publishing displayName: Update build number diff --git a/build/azure-devdiv-pipeline.stable.yml b/build/azure-devdiv-pipeline.stable.yml index f4d6d093..6c3ae0a2 100644 --- a/build/azure-devdiv-pipeline.stable.yml +++ b/build/azure-devdiv-pipeline.stable.yml @@ -75,8 +75,6 @@ extends: - script: python -m nox --session install_bundled_libs displayName: Install Python dependencies - env: - USE_PIP_DOWNLOAD: 1 - script: python ./build/update_ext_version.py --release --for-publishing displayName: Update build number diff --git a/noxfile.py b/noxfile.py index 0e62638f..3a88d02c 100644 --- a/noxfile.py +++ b/noxfile.py @@ -75,11 +75,7 @@ def install_bundled_libs(session): else: wheels = debugpy_info["any"] - # Use pip download when USE_PIP_DOWNLOAD is set (e.g., for Azure Artifacts feed) - if os.environ.get("USE_PIP_DOWNLOAD"): - download_debugpy_via_pip(session, wheels) - else: - download_url(wheels) + download_debugpy_via_pip(session, wheels) def _parse_wheel_info(url: str) -> dict: From a2ed93b8a1b597eba42346bb215dd42b868fff8c Mon Sep 17 00:00:00 2001 From: bschnurr Date: Fri, 9 Jan 2026 10:34:27 -0800 Subject: [PATCH 08/59] first attempt at platforms --- build/azure-devdiv-pipeline.pre-release.yml | 90 ++++++++++++++------ build/azure-devdiv-pipeline.stable.yml | 92 +++++++++++++++------ build/templates/package.yml | 61 ++++++++++++++ 3 files changed, 193 insertions(+), 50 deletions(-) create mode 100644 build/templates/package.yml diff --git a/build/azure-devdiv-pipeline.pre-release.yml b/build/azure-devdiv-pipeline.pre-release.yml index f409d31b..2812e64b 100644 --- a/build/azure-devdiv-pipeline.pre-release.yml +++ b/build/azure-devdiv-pipeline.pre-release.yml @@ -29,6 +29,57 @@ parameters: type: boolean default: false + - name: buildPlatforms + type: object + default: + - name: Linux + vsceTarget: '' + - name: Linux + packageArch: arm64 + vsceTarget: linux-arm64 + - name: Linux + packageArch: arm + vsceTarget: linux-armhf + - name: Linux + packageArch: x64 + vsceTarget: linux-x64 + - name: MacOS + packageArch: arm64 + vsceTarget: darwin-arm64 + - name: MacOS + packageArch: x64 + vsceTarget: darwin-x64 + - name: Windows + packageArch: arm + vsceTarget: win32-arm64 + - name: Windows + packageArch: x64 + vsceTarget: win32-x64 + + - name: buildSteps + type: stepList + default: + - script: npm ci + displayName: Install NPM dependencies + + - script: python -m pip install -U pip + displayName: Upgrade pip + + - script: python -m pip install wheel + displayName: Install wheel + + - script: python -m pip install nox + displayName: Install nox + + - script: python -m nox --session install_bundled_libs + displayName: Install Python dependencies + + - script: python ./build/update_ext_version.py --for-publishing + displayName: Update build number + + - script: npm run package + displayName: Build extension + extends: template: azure-pipelines/MicroBuild.1ES.Official.yml@MicroBuildTemplate parameters: @@ -48,10 +99,19 @@ extends: - stage: Build displayName: Build & Package Extension jobs: - - job: Build - displayName: Build Job + - template: build/templates/package.yml@self + parameters: + buildPlatforms: ${{ parameters.buildPlatforms }} + buildSteps: ${{ parameters.buildSteps }} + + - stage: Sign + displayName: Sign Extension + dependsOn: Build + jobs: + - job: Sign + displayName: Sign Job pool: - name: VSEngSS-MicroBuild2022-1ES # use windows for codesigning to make things easier https://dev.azure.com/devdiv/DevDiv/_wiki/wikis/DevDiv.wiki/650/MicroBuild-Signing + name: VSEngSS-MicroBuild2022-1ES os: windows templateContext: mb: @@ -66,28 +126,8 @@ extends: artifactName: drop sbomEnabled: true steps: - - template: build/templates/setup.yml@self - - - script: npm ci - displayName: Install NPM dependencies - - - script: python -m pip install -U pip - displayName: Upgrade pip - - - script: python -m pip install wheel - displayName: Install wheel - - - script: python -m pip install nox - displayName: Install nox - - - script: python -m nox --session install_bundled_libs - displayName: Install Python dependencies - - - script: python ./build/update_ext_version.py --for-publishing - displayName: Update build number - - - script: npm run vsce-package-pre - displayName: Build VSIX + - download: current + displayName: Download all build artifacts - template: build/templates/sign.yml@self parameters: diff --git a/build/azure-devdiv-pipeline.stable.yml b/build/azure-devdiv-pipeline.stable.yml index 6c3ae0a2..26d7c538 100644 --- a/build/azure-devdiv-pipeline.stable.yml +++ b/build/azure-devdiv-pipeline.stable.yml @@ -15,6 +15,8 @@ variables: value: VSCode-python-debugger - name: VsixName value: python-debugger.vsix + - name: AZURE_ARTIFACTS_FEED + value: 'https://devdiv.pkgs.visualstudio.com/DevDiv/_packaging/Pylance_PublicPackages/npm/registry/' parameters: - name: publishExtension @@ -22,6 +24,57 @@ parameters: type: boolean default: false + - name: buildPlatforms + type: object + default: + - name: Linux + vsceTarget: '' + - name: Linux + packageArch: arm64 + vsceTarget: linux-arm64 + - name: Linux + packageArch: arm + vsceTarget: linux-armhf + - name: Linux + packageArch: x64 + vsceTarget: linux-x64 + - name: MacOS + packageArch: arm64 + vsceTarget: darwin-arm64 + - name: MacOS + packageArch: x64 + vsceTarget: darwin-x64 + - name: Windows + packageArch: arm + vsceTarget: win32-arm64 + - name: Windows + packageArch: x64 + vsceTarget: win32-x64 + + - name: buildSteps + type: stepList + default: + - script: npm ci + displayName: Install NPM dependencies + + - script: python -m pip install -U pip + displayName: Upgrade pip + + - script: python -m pip install wheel + displayName: Install wheel + + - script: python -m pip install nox + displayName: Install nox + + - script: python -m nox --session install_bundled_libs + displayName: Install Python dependencies + + - script: python ./build/update_ext_version.py --release --for-publishing + displayName: Update build number + + - script: npm run vsce-package + displayName: Build extension + extends: template: azure-pipelines/MicroBuild.1ES.Official.yml@MicroBuildTemplate parameters: @@ -41,10 +94,19 @@ extends: - stage: Build displayName: Build & Package Extension jobs: - - job: Build - displayName: Build Job + - template: build/templates/package.yml@self + parameters: + buildPlatforms: ${{ parameters.buildPlatforms }} + buildSteps: ${{ parameters.buildSteps }} + + - stage: Sign + displayName: Sign Extension + dependsOn: Build + jobs: + - job: Sign + displayName: Sign Job pool: - name: VSEngSS-MicroBuild2022-1ES # use windows for codesigning to make things easier https://dev.azure.com/devdiv/DevDiv/_wiki/wikis/DevDiv.wiki/650/MicroBuild-Signing + name: VSEngSS-MicroBuild2022-1ES os: windows templateContext: mb: @@ -59,28 +121,8 @@ extends: artifactName: drop sbomEnabled: true steps: - - template: build/templates/setup.yml@self - - - script: npm ci - displayName: Install NPM dependencies - - - script: python -m pip install -U pip - displayName: Upgrade pip - - - script: python -m pip install wheel - displayName: Install wheel - - - script: python -m pip install nox - displayName: Install nox - - - script: python -m nox --session install_bundled_libs - displayName: Install Python dependencies - - - script: python ./build/update_ext_version.py --release --for-publishing - displayName: Update build number - - - script: npm run vsce-package - displayName: Build VSIX + - download: current + displayName: Download all build artifacts - template: build/templates/sign.yml@self parameters: diff --git a/build/templates/package.yml b/build/templates/package.yml new file mode 100644 index 00000000..0aef1e81 --- /dev/null +++ b/build/templates/package.yml @@ -0,0 +1,61 @@ +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. + +# Template for building platform-specific VSIX packages +# Sets VSCETARGET environment variable for noxfile.py to select correct debugpy wheels +# Iterates over buildPlatforms to create a job per platform + +parameters: + - name: buildPlatforms + type: object + displayName: 'List of platforms to build' + + - name: buildSteps + type: stepList + default: [] + displayName: 'Build steps to execute' + +jobs: + - ${{ each platform in parameters.buildPlatforms }}: + - job: Build_${{ replace(coalesce(platform.vsceTarget, 'universal'), '-', '_') }} + displayName: 'Build ${{ coalesce(platform.vsceTarget, ''universal'') }}' + + ${{ if eq(platform.name, 'Linux') }}: + pool: + name: 1es-ubuntu-22.04-x64 + os: linux + + ${{ if eq(platform.name, 'MacOS') }}: + pool: + name: Azure Pipelines + image: macOS-15 + os: macOS + + ${{ if eq(platform.name, 'Windows') }}: + pool: + name: 1es-windows-2022-x64 + os: windows + + variables: + packageArch: ${{ coalesce(platform.packageArch, '') }} + vsceTarget: ${{ platform.vsceTarget }} + ${{ if eq(platform.name, 'MacOS') }}: + BUILDSECMON_OPT_IN: false + + templateContext: + outputs: + - output: pipelineArtifact + displayName: 'Publish VSIX for ${{ coalesce(platform.vsceTarget, ''universal'') }}' + targetPath: '$(Build.ArtifactStagingDirectory)' + artifactName: vsix-${{ coalesce(platform.vsceTarget, 'universal') }} + + steps: + - template: build/templates/setup.yml@self + + - bash: | + echo "##vso[task.setvariable variable=VSCETARGET]${{ platform.vsceTarget }}" + echo "Building for target: ${{ platform.vsceTarget }}" + displayName: 'Set VSCETARGET variable' + + - ${{ each buildStep in parameters.buildSteps }}: + - ${{ buildStep }} From f96cf55dbbd963ff876e8fa6175868b27c987c23 Mon Sep 17 00:00:00 2001 From: bschnurr Date: Fri, 9 Jan 2026 10:42:50 -0800 Subject: [PATCH 09/59] fix path to setup.yml --- build/templates/package.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build/templates/package.yml b/build/templates/package.yml index 0aef1e81..7d8a5985 100644 --- a/build/templates/package.yml +++ b/build/templates/package.yml @@ -50,7 +50,7 @@ jobs: artifactName: vsix-${{ coalesce(platform.vsceTarget, 'universal') }} steps: - - template: build/templates/setup.yml@self + - template: setup.yml@self - bash: | echo "##vso[task.setvariable variable=VSCETARGET]${{ platform.vsceTarget }}" From 5edc707e6630c159b817ded3e8c47f4c9e0bb73c Mon Sep 17 00:00:00 2001 From: bschnurr Date: Fri, 9 Jan 2026 11:04:40 -0800 Subject: [PATCH 10/59] update pools --- build/templates/package.yml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/build/templates/package.yml b/build/templates/package.yml index 7d8a5985..255a86eb 100644 --- a/build/templates/package.yml +++ b/build/templates/package.yml @@ -22,13 +22,14 @@ jobs: ${{ if eq(platform.name, 'Linux') }}: pool: - name: 1es-ubuntu-22.04-x64 + name: AzurePipelines-EO + image: 1ESPT-Ubuntu22.04 os: linux ${{ if eq(platform.name, 'MacOS') }}: pool: - name: Azure Pipelines - image: macOS-15 + name: AzurePipelines-EO + image: macos-latest os: macOS ${{ if eq(platform.name, 'Windows') }}: From bd99441a116428e0d1b4e637a0a5a55b10159fc9 Mon Sep 17 00:00:00 2001 From: bschnurr Date: Fri, 9 Jan 2026 11:07:01 -0800 Subject: [PATCH 11/59] update pool windows --- build/templates/package.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build/templates/package.yml b/build/templates/package.yml index 255a86eb..6e5168db 100644 --- a/build/templates/package.yml +++ b/build/templates/package.yml @@ -34,7 +34,7 @@ jobs: ${{ if eq(platform.name, 'Windows') }}: pool: - name: 1es-windows-2022-x64 + name: AzurePipelines-EO os: windows variables: From b621b940ab8338ae4c3bdeee3ce16944464cc339 Mon Sep 17 00:00:00 2001 From: bschnurr Date: Fri, 9 Jan 2026 11:16:46 -0800 Subject: [PATCH 12/59] mac pool rename --- build/templates/package.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build/templates/package.yml b/build/templates/package.yml index 6e5168db..67c18791 100644 --- a/build/templates/package.yml +++ b/build/templates/package.yml @@ -28,7 +28,7 @@ jobs: ${{ if eq(platform.name, 'MacOS') }}: pool: - name: AzurePipelines-EO + name: Azure Pipelines image: macos-latest os: macOS From 6aec106d8d37c5ac0a40a935f809c569557f85d1 Mon Sep 17 00:00:00 2001 From: bschnurr Date: Fri, 9 Jan 2026 11:34:10 -0800 Subject: [PATCH 13/59] update windows image --- build/templates/package.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/build/templates/package.yml b/build/templates/package.yml index 67c18791..ef54f278 100644 --- a/build/templates/package.yml +++ b/build/templates/package.yml @@ -35,6 +35,7 @@ jobs: ${{ if eq(platform.name, 'Windows') }}: pool: name: AzurePipelines-EO + image: 1ESPT-Windows2022 os: windows variables: From b2b5a3db9d4682c6f8246a3b7804a647d52a4f1e Mon Sep 17 00:00:00 2001 From: bschnurr Date: Fri, 9 Jan 2026 13:18:29 -0800 Subject: [PATCH 14/59] add build vsix --- build/azure-devdiv-pipeline.pre-release.yml | 1 + build/templates/package.yml | 26 +++++++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/build/azure-devdiv-pipeline.pre-release.yml b/build/azure-devdiv-pipeline.pre-release.yml index 2812e64b..a8ad8959 100644 --- a/build/azure-devdiv-pipeline.pre-release.yml +++ b/build/azure-devdiv-pipeline.pre-release.yml @@ -103,6 +103,7 @@ extends: parameters: buildPlatforms: ${{ parameters.buildPlatforms }} buildSteps: ${{ parameters.buildSteps }} + isPreRelease: true - stage: Sign displayName: Sign Extension diff --git a/build/templates/package.yml b/build/templates/package.yml index ef54f278..1652958d 100644 --- a/build/templates/package.yml +++ b/build/templates/package.yml @@ -15,6 +15,21 @@ parameters: default: [] displayName: 'Build steps to execute' + - name: isPreRelease + type: boolean + default: false + displayName: 'Is this a pre-release build' + + - name: vscePackageArgs + type: string + default: '' + displayName: 'Additional vsce package arguments' + + - name: workingDirectory + type: string + default: '$(Build.SourcesDirectory)' + displayName: 'Working directory for packaging' + jobs: - ${{ each platform in parameters.buildPlatforms }}: - job: Build_${{ replace(coalesce(platform.vsceTarget, 'universal'), '-', '_') }} @@ -61,3 +76,14 @@ jobs: - ${{ each buildStep in parameters.buildSteps }}: - ${{ buildStep }} + + - ${{ if eq(parameters.isPreRelease, true) }}: + - ${{ if eq(platform.vsceTarget, '') }}: + - script: npx @vscode/vsce@latest package -o $(Build.BinariesDirectory)/$(SetExtensionName.VSIX) --pre-release ${{ parameters.vscePackageArgs }} + displayName: 💾 Package pre-release extension + workingDirectory: ${{ parameters.workingDirectory }} + + - ${{ if ne(platform.vsceTarget, '') }}: + - script: npx @vscode/vsce@latest package -o $(Build.BinariesDirectory)/$(SetExtensionName.VSIX) --target ${{ platform.vsceTarget }} --pre-release ${{ parameters.vscePackageArgs }} + displayName: 💾 Package pre-release extension + workingDirectory: ${{ parameters.workingDirectory }} From 754b15de989ba8caafaba53537683ce6015168a8 Mon Sep 17 00:00:00 2001 From: bschnurr Date: Fri, 9 Jan 2026 13:27:46 -0800 Subject: [PATCH 15/59] copy vsix to drop folder --- build/templates/package.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/build/templates/package.yml b/build/templates/package.yml index 1652958d..b24cc2c3 100644 --- a/build/templates/package.yml +++ b/build/templates/package.yml @@ -87,3 +87,10 @@ jobs: - script: npx @vscode/vsce@latest package -o $(Build.BinariesDirectory)/$(SetExtensionName.VSIX) --target ${{ platform.vsceTarget }} --pre-release ${{ parameters.vscePackageArgs }} displayName: 💾 Package pre-release extension workingDirectory: ${{ parameters.workingDirectory }} + + - task: ExtractFiles@1 + inputs: + archiveFilePatterns: $(Build.BinariesDirectory)/*.vsix + destinationFolder: $(Build.ArtifactStagingDirectory)/drop + cleanDestinationFolder: false + displayName: 📦 Extract extension From 42ed3c3cf69c195fc1f73f665d650395a5e6f0ee Mon Sep 17 00:00:00 2001 From: bschnurr Date: Fri, 9 Jan 2026 13:48:37 -0800 Subject: [PATCH 16/59] update creating vsix name --- build/templates/package.yml | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/build/templates/package.yml b/build/templates/package.yml index b24cc2c3..29d46639 100644 --- a/build/templates/package.yml +++ b/build/templates/package.yml @@ -77,6 +77,33 @@ jobs: - ${{ each buildStep in parameters.buildSteps }}: - ${{ buildStep }} + - ${{ if eq(platform.vsceTarget, '') }}: + - bash: | + VSIX=$(node -p "require(\"./package.json\").publisher + \".\" + require(\"./package.json\").name + \".\" + require(\"./package.json\").version + \".universal.vsix\"") + echo "##vso[task.setvariable variable=VSIX;isOutput=true]$VSIX" + name: SetExtensionName + displayName: 🗄 Set VSIX file name + workingDirectory: ${{ parameters.workingDirectory }} + + - ${{ if ne(platform.vsceTarget, '') }}: + - bash: | + VSIX=$(node -p "require(\"./package.json\").publisher + \".\" + require(\"./package.json\").name + \".\" + require(\"./package.json\").version + \".\" + \"${{ platform.vsceTarget }}\" + \".vsix\"") + echo "##vso[task.setvariable variable=VSIX;isOutput=true]$VSIX" + name: SetExtensionName + displayName: 🗄 Set VSIX file name + workingDirectory: ${{ parameters.workingDirectory }} + + - ${{ if eq(parameters.isPreRelease, false) }}: + - ${{ if eq(platform.vsceTarget, '') }}: + - script: npx @vscode/vsce@latest package -o $(Build.BinariesDirectory)/$(SetExtensionName.VSIX) ${{ parameters.vscePackageArgs }} + displayName: 💾 Package extension + workingDirectory: ${{ parameters.workingDirectory }} + + - ${{ if ne(platform.vsceTarget, '') }}: + - script: npx @vscode/vsce@latest package -o $(Build.BinariesDirectory)/$(SetExtensionName.VSIX) --target ${{ platform.vsceTarget }} ${{ parameters.vscePackageArgs }} + displayName: 💾 Package extension + workingDirectory: ${{ parameters.workingDirectory }} + - ${{ if eq(parameters.isPreRelease, true) }}: - ${{ if eq(platform.vsceTarget, '') }}: - script: npx @vscode/vsce@latest package -o $(Build.BinariesDirectory)/$(SetExtensionName.VSIX) --pre-release ${{ parameters.vscePackageArgs }} From d1f31098af726061f8beeb96dd77391b9635390e Mon Sep 17 00:00:00 2001 From: bschnurr Date: Fri, 9 Jan 2026 13:58:09 -0800 Subject: [PATCH 17/59] copy vsix --- build/templates/package.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/build/templates/package.yml b/build/templates/package.yml index 29d46639..7fe05dec 100644 --- a/build/templates/package.yml +++ b/build/templates/package.yml @@ -115,9 +115,9 @@ jobs: displayName: 💾 Package pre-release extension workingDirectory: ${{ parameters.workingDirectory }} - - task: ExtractFiles@1 + - task: CopyFiles@2 inputs: - archiveFilePatterns: $(Build.BinariesDirectory)/*.vsix - destinationFolder: $(Build.ArtifactStagingDirectory)/drop - cleanDestinationFolder: false - displayName: 📦 Extract extension + sourceFolder: $(Build.BinariesDirectory) + contents: '*.vsix' + targetFolder: $(Build.ArtifactStagingDirectory)/drop + displayName: 📦 Copy VSIX to staging From 41605dcfe37bc4c51dabc7aa20b984f9de85f09f Mon Sep 17 00:00:00 2001 From: bschnurr Date: Fri, 9 Jan 2026 14:04:46 -0800 Subject: [PATCH 18/59] update drop folder --- build/templates/package.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build/templates/package.yml b/build/templates/package.yml index 7fe05dec..12335ccd 100644 --- a/build/templates/package.yml +++ b/build/templates/package.yml @@ -63,7 +63,7 @@ jobs: outputs: - output: pipelineArtifact displayName: 'Publish VSIX for ${{ coalesce(platform.vsceTarget, ''universal'') }}' - targetPath: '$(Build.ArtifactStagingDirectory)' + targetPath: '$(Build.ArtifactStagingDirectory)/drop' artifactName: vsix-${{ coalesce(platform.vsceTarget, 'universal') }} steps: From 35eeccf066faaf213db4d4eb46a2962d07214ab9 Mon Sep 17 00:00:00 2001 From: bschnurr Date: Fri, 9 Jan 2026 17:30:15 -0800 Subject: [PATCH 19/59] try to sign per platform --- build/azure-devdiv-pipeline.pre-release.yml | 2 +- build/templates/sign.yml | 397 ++++++++++++++------ 2 files changed, 290 insertions(+), 109 deletions(-) diff --git a/build/azure-devdiv-pipeline.pre-release.yml b/build/azure-devdiv-pipeline.pre-release.yml index a8ad8959..44963523 100644 --- a/build/azure-devdiv-pipeline.pre-release.yml +++ b/build/azure-devdiv-pipeline.pre-release.yml @@ -132,7 +132,7 @@ extends: - template: build/templates/sign.yml@self parameters: - vsixName: $(VsixName) + buildPlatforms: ${{ parameters.buildPlatforms }} workingDirectory: $(Build.StagingDirectory)\drop signType: real verifySignature: true diff --git a/build/templates/sign.yml b/build/templates/sign.yml index 6a139af3..9853396a 100644 --- a/build/templates/sign.yml +++ b/build/templates/sign.yml @@ -2,36 +2,54 @@ # Usage Example: # - template: build/templates/sign.yml@self # parameters: -# vsixName: black-formatter.vsix -# workingDirectory: $(Build.SourcesDirectory) +# buildPlatforms: ${{ parameters.buildPlatforms }} +# workingDirectory: $(Build.StagingDirectory) # signType: real +# +# Each platform gets its own subfolder to avoid filename collisions +# since all signed VSIX files are named the same (e.g., ms-python.debugpy.vsix) + parameters: - - name: vsixName - type: string - default: autopep8.vsix - - name: manifestName - type: string - default: extension.manifest - - name: signatureName - type: string - default: extension.signature.p7s + - name: buildPlatforms + type: object + displayName: 'List of platforms to sign' - name: workingDirectory type: string - default: '$(Build.SourcesDirectory)' + default: '$(Build.StagingDirectory)' - name: signType type: string default: real - name: verifySignature type: boolean default: true - - name: prepareRoot - type: boolean - default: true - name: teamName type: string - default: VSCode-autopep8 + default: VSCode-python-debugger steps: + - powershell: | + Write-Host "========================================" + Write-Host "🔧 Sign Template Parameters" + Write-Host "========================================" + Write-Host "Working Directory: ${{ parameters.workingDirectory }}" + Write-Host "Sign Type: ${{ parameters.signType }}" + Write-Host "Verify Signature: ${{ parameters.verifySignature }}" + Write-Host "Team Name: ${{ parameters.teamName }}" + Write-Host "" + Write-Host "📂 Key Paths:" + Write-Host " Pipeline.Workspace: $(Pipeline.Workspace)" + Write-Host " Build.SourcesDirectory: $(Build.SourcesDirectory)" + Write-Host " Build.StagingDirectory: $(Build.StagingDirectory)" + Write-Host " Build.ArtifactStagingDirectory: $(Build.ArtifactStagingDirectory)" + Write-Host "" + Write-Host "📦 Available artifacts in Pipeline.Workspace:" + Get-ChildItem "$(Pipeline.Workspace)" -Directory | ForEach-Object { + Write-Host " - $($_.Name)" + Get-ChildItem $_.FullName -File | ForEach-Object { Write-Host " $($_.Name) ($($_.Length) bytes)" } + } + Write-Host "========================================" + displayName: '🔍 Log parameters and environment' + - task: NuGetToolInstaller@1 displayName: Install NuGet @@ -44,36 +62,11 @@ steps: restoreDirectory: '$(Build.SourcesDirectory)/packages' nugetConfigPath: '$(Build.SourcesDirectory)/build/NuGet.config' - - powershell: | - New-Item -ItemType Directory -Path "$(Build.StagingDirectory)\drop" -Force | Out-Null; Copy-Item "$(Build.SourcesDirectory)\$(VsixName)" "$(Build.StagingDirectory)\drop\$(VsixName)" -Force; if (!(Test-Path "$(Build.StagingDirectory)\drop\$(VsixName)")) { Write-Error 'VSIX copy failed'; exit 1 }; Get-Item "$(Build.StagingDirectory)\drop\$(VsixName)" | Format-Table Name,Length,LastWriteTime -AutoSize - displayName: Copy VSIX into drop - - - script: npx vsce generate-manifest -i "$(Build.StagingDirectory)\drop\$(VsixName)" -o "$(Build.StagingDirectory)\drop\extension.manifest" - displayName: Generate extension manifest - - - task: PowerShell@2 - displayName: Pre-sign inspection - inputs: - targetType: inline - script: | - $wd = "${{ parameters.workingDirectory }}" - $vsixName = "${{ parameters.vsixName }}" - $manifestName = "${{ parameters.manifestName }}" - $signatureName = "${{ parameters.signatureName }}" - Write-Host "Pre-sign contents of working directory: $wd" - Get-ChildItem -Recurse $wd | Select-Object FullName,Length | Format-Table -AutoSize - $vsix = Join-Path $wd $vsixName - if (!(Test-Path $vsix)) { Write-Error "VSIX missing: $vsix"; exit 1 } - $manifest = Join-Path $wd $manifestName - if (!(Test-Path $manifest)) { Write-Error "Manifest missing: $manifest"; exit 1 } - $sig = Join-Path $wd $signatureName - if (!(Test-Path $sig)) { Write-Warning "Signature placeholder missing (will attempt signing anyway)." } - - # ✅ Added MicroBuildSigningPlugin for PME enforcement + # ✅ Enable MicroBuildSigningPlugin for PME enforcement (once for all platforms) - task: MicroBuildSigningPlugin@4 displayName: Enable MicroBuild Signing inputs: - signType: ${{ parameters.signType }} # 'real' or 'test' + signType: ${{ parameters.signType }} zipSources: false feedSource: 'https://devdiv.pkgs.visualstudio.com/DefaultCollection/_packaging/MicroBuildToolset/nuget/v3/index.json' ConnectedServiceName: 'MicroBuild Signing Task (DevDiv)' @@ -82,75 +75,263 @@ steps: SYSTEM_ACCESSTOKEN: $(System.AccessToken) TeamName: ${{ parameters.teamName }} - - task: MSBuild@1 - displayName: Run signing (MSBuild) - inputs: - solution: '$(Build.SourcesDirectory)/build/sign.proj' - msbuildArguments: > - /verbosity:detailed - /bl:"${{ parameters.workingDirectory }}\\signing.binlog" - /p:SignType=${{ parameters.signType }} - /p:BaseOutputDirectory=${{ parameters.workingDirectory }} - /p:OutDir=${{ parameters.workingDirectory }} - /p:IntermediateOutputPath=${{ parameters.workingDirectory }}\\intermediate - - - task: PowerShell@2 - displayName: Post-sign inspection - inputs: - targetType: inline - script: | - $wd = "${{ parameters.workingDirectory }}" - $signatureName = "${{ parameters.signatureName }}" - Write-Host "Post-sign file listing:" - Get-ChildItem $wd -File | Select-Object Name,Length | Format-Table -AutoSize - $sig = Join-Path $wd $signatureName - if (Test-Path $sig) { - Write-Host "Signature file present: $sig" + # Process each platform in its own subfolder + - ${{ each platform in parameters.buildPlatforms }}: + - powershell: | + Write-Host "========================================" + Write-Host "📦 Setting up platform: ${{ coalesce(platform.vsceTarget, 'universal') }}" + Write-Host "========================================" + + $platformFolder = "${{ parameters.workingDirectory }}/${{ coalesce(platform.vsceTarget, 'universal') }}" + Write-Host "📁 Creating platform folder: $platformFolder" + New-Item -ItemType Directory -Path $platformFolder -Force | Out-Null + + $artifactName = "vsix-${{ coalesce(platform.vsceTarget, 'universal') }}" + $artifactPath = "$(Pipeline.Workspace)/$artifactName" + Write-Host "🔍 Looking for artifact at: $artifactPath" + + if (Test-Path $artifactPath) { + Write-Host "✅ Artifact folder found" + Write-Host "📄 Files in artifact folder:" + Get-ChildItem "$artifactPath" | ForEach-Object { Write-Host " - $($_.Name) ($($_.Length) bytes)" } + + $vsixFiles = Get-ChildItem "$artifactPath/*.vsix" + Write-Host "📦 Found $($vsixFiles.Count) VSIX file(s) to copy" + + foreach ($vsix in $vsixFiles) { + Write-Host " Copying: $($vsix.Name) -> $platformFolder" + Copy-Item $vsix.FullName -Destination $platformFolder -Force + } + Write-Host "✅ Copied VSIX for ${{ coalesce(platform.vsceTarget, 'universal') }}" + + # List what's in the platform folder + Write-Host "" + Write-Host "📂 Contents of platform folder:" + Get-ChildItem $platformFolder | ForEach-Object { Write-Host " - $($_.Name) ($($_.Length) bytes)" } } else { - Write-Warning "Signature file NOT present after signing step."; exit 0 + Write-Host "❌ Artifact folder not found: $artifactPath" + Write-Host "📂 Contents of Pipeline.Workspace:" + Get-ChildItem "$(Pipeline.Workspace)" | ForEach-Object { Write-Host " - $($_.Name)" } + Write-Error "Artifact folder not found: $artifactPath" + exit 1 } + Write-Host "========================================" + displayName: '📁 Setup folder for ${{ coalesce(platform.vsceTarget, ''universal'') }}' - - task: PowerShell@2 - displayName: Validate signature differs from manifest (hash check) - inputs: - targetType: inline - script: | - $wd = "${{ parameters.workingDirectory }}" - $manifest = Join-Path $wd "${{ parameters.manifestName }}" - $signature = Join-Path $wd "${{ parameters.signatureName }}" - if (!(Test-Path $manifest)) { Write-Error "Manifest missing for hash comparison: $manifest"; exit 1 } - if (!(Test-Path $signature)) { Write-Error "Signature missing for hash comparison: $signature"; exit 1 } - $manifestHash = (Get-FileHash -Algorithm SHA256 $manifest).Hash - $signatureHash = (Get-FileHash -Algorithm SHA256 $signature).Hash - Write-Host "Manifest SHA256 : $manifestHash" - Write-Host "Signature SHA256: $signatureHash" - if ($manifestHash -eq $signatureHash) { - Write-Error "Signature file is identical to manifest (placeholder detected). Failing build."; exit 1 + - powershell: | + Write-Host "========================================" + Write-Host "📝 Generating manifest for: ${{ coalesce(platform.vsceTarget, 'universal') }}" + Write-Host "========================================" + + $platformFolder = "${{ parameters.workingDirectory }}/${{ coalesce(platform.vsceTarget, 'universal') }}" + Write-Host "📂 Platform folder: $platformFolder" + + $vsixFiles = Get-ChildItem "$platformFolder/*.vsix" -ErrorAction SilentlyContinue + if ($null -eq $vsixFiles -or $vsixFiles.Count -eq 0) { + Write-Host "❌ No VSIX files found in platform folder" + Get-ChildItem $platformFolder | ForEach-Object { Write-Host " - $($_.Name)" } + exit 1 + } + + Write-Host "✅ Found $($vsixFiles.Count) VSIX file(s)" + foreach ($vsix in $vsixFiles) { + $manifestPath = "$platformFolder/$($vsix.BaseName).manifest" + Write-Host "📝 Generating manifest:" + Write-Host " Input: $($vsix.FullName)" + Write-Host " Output: $manifestPath" + npx vsce generate-manifest -i "$($vsix.FullName)" -o "$manifestPath" + if (Test-Path $manifestPath) { + Write-Host "✅ Manifest created: $(Get-Item $manifestPath | Select-Object -ExpandProperty Length) bytes" + } else { + Write-Host "❌ Failed to create manifest" + exit 1 + } + } + Write-Host "========================================" + displayName: '📝 Generate manifest for ${{ coalesce(platform.vsceTarget, ''universal'') }}' + + - powershell: | + Write-Host "========================================" + Write-Host "🔍 Pre-sign inspection for: ${{ coalesce(platform.vsceTarget, 'universal') }}" + Write-Host "========================================" + + $platformFolder = "${{ parameters.workingDirectory }}/${{ coalesce(platform.vsceTarget, 'universal') }}" + Write-Host "📂 Platform folder: $platformFolder" + Write-Host "" + Write-Host "📄 Files:" + Get-ChildItem $platformFolder | ForEach-Object { + $icon = switch -Wildcard ($_.Extension) { + ".vsix" { "📦" } + ".manifest" { "📝" } + ".p7s" { "🔐" } + default { "📄" } + } + Write-Host " $icon $($_.Name) ($($_.Length) bytes)" + } + + $vsixCount = (Get-ChildItem "$platformFolder/*.vsix").Count + $manifestCount = (Get-ChildItem "$platformFolder/*.manifest" -ErrorAction SilentlyContinue).Count + Write-Host "" + Write-Host "📊 Summary: $vsixCount VSIX, $manifestCount manifest(s)" + + if ($vsixCount -eq 0) { + Write-Host "❌ No VSIX files found" + exit 1 + } + if ($manifestCount -eq 0) { + Write-Host "❌ No manifest files found" + exit 1 + } + Write-Host "✅ Ready for signing" + Write-Host "========================================" + displayName: '🔍 Pre-sign inspection for ${{ coalesce(platform.vsceTarget, ''universal'') }}' + + - task: MSBuild@1 + displayName: '🔏 Sign ${{ coalesce(platform.vsceTarget, ''universal'') }}' + inputs: + solution: '$(Build.SourcesDirectory)/build/sign.proj' + msbuildArguments: > + /verbosity:detailed + /bl:"${{ parameters.workingDirectory }}/${{ coalesce(platform.vsceTarget, 'universal') }}/signing.binlog" + /p:SignType=${{ parameters.signType }} + /p:BaseOutputDirectory=${{ parameters.workingDirectory }}/${{ coalesce(platform.vsceTarget, 'universal') }} + /p:OutDir=${{ parameters.workingDirectory }}/${{ coalesce(platform.vsceTarget, 'universal') }} + /p:IntermediateOutputPath=${{ parameters.workingDirectory }}/${{ coalesce(platform.vsceTarget, 'universal') }}/intermediate + + - powershell: | + Write-Host "========================================" + Write-Host "🔍 Post-sign inspection for: ${{ coalesce(platform.vsceTarget, 'universal') }}" + Write-Host "========================================" + + $platformFolder = "${{ parameters.workingDirectory }}/${{ coalesce(platform.vsceTarget, 'universal') }}" + Write-Host "📂 Platform folder: $platformFolder" + Write-Host "" + Write-Host "📄 Files after signing:" + Get-ChildItem $platformFolder -File | ForEach-Object { + $icon = switch -Wildcard ($_.Extension) { + ".vsix" { "📦" } + ".manifest" { "📝" } + ".p7s" { "🔐" } + ".binlog" { "📋" } + default { "📄" } + } + Write-Host " $icon $($_.Name) ($($_.Length) bytes)" + } + + $vsixCount = (Get-ChildItem "$platformFolder/*.vsix").Count + $manifestCount = (Get-ChildItem "$platformFolder/*.manifest" -ErrorAction SilentlyContinue).Count + $p7sCount = (Get-ChildItem "$platformFolder/*.p7s" -ErrorAction SilentlyContinue).Count + Write-Host "" + Write-Host "📊 Summary: $vsixCount VSIX, $manifestCount manifest(s), $p7sCount signature(s)" + + if ($p7sCount -gt 0) { + Write-Host "✅ Signature files found" } else { - Write-Host "Hashes differ ✅ (signature not a direct copy of manifest)" + Write-Host "⚠️ No signature files found after signing" + } + Write-Host "========================================" + displayName: '🔍 Post-sign inspection for ${{ coalesce(platform.vsceTarget, ''universal'') }}' + + - powershell: | + Write-Host "========================================" + Write-Host "✅ Validating signature for: ${{ coalesce(platform.vsceTarget, 'universal') }}" + Write-Host "========================================" + + $platformFolder = "${{ parameters.workingDirectory }}/${{ coalesce(platform.vsceTarget, 'universal') }}" + $vsixFiles = Get-ChildItem "$platformFolder/*.vsix" + + foreach ($vsix in $vsixFiles) { + Write-Host "📦 Validating: $($vsix.Name)" + $manifestPath = "$platformFolder/$($vsix.BaseName).manifest" + $signaturePath = "$platformFolder/$($vsix.BaseName).signature.p7s" + + Write-Host " Manifest: $manifestPath" + Write-Host " Signature: $signaturePath" + + if (!(Test-Path $manifestPath)) { + Write-Host "❌ Manifest missing" + exit 1 + } + if (!(Test-Path $signaturePath)) { + Write-Host "❌ Signature missing" + exit 1 + } + + $manifestHash = (Get-FileHash -Algorithm SHA256 $manifestPath).Hash + $signatureHash = (Get-FileHash -Algorithm SHA256 $signaturePath).Hash + Write-Host " Manifest SHA256: $manifestHash" + Write-Host " Signature SHA256: $signatureHash" + + if ($manifestHash -eq $signatureHash) { + Write-Host "❌ Signature file is identical to manifest (placeholder detected)" + exit 1 + } else { + Write-Host "✅ Hashes differ - signature is valid" + } } + Write-Host "========================================" + displayName: '✅ Validate signature for ${{ coalesce(platform.vsceTarget, ''universal'') }}' - - ${{ if eq(parameters.verifySignature, true) }}: - - task: PowerShell@2 - displayName: Verify VSIX signature - inputs: - targetType: inline - script: | - $wd = "${{ parameters.workingDirectory }}" - $vsix = Join-Path $wd "${{ parameters.vsixName }}" - $manifest = Join-Path $wd "${{ parameters.manifestName }}" - $signature = Join-Path $wd "${{ parameters.signatureName }}" - Write-Host "Verifying signature:" - Write-Host " packagePath : $vsix" - Write-Host " manifestPath : $manifest" - Write-Host " signaturePath: $signature" - if (!(Test-Path $vsix)) { Write-Error "Missing VSIX: $vsix"; exit 1 } - if (!(Test-Path $manifest)) { Write-Error "Missing manifest: $manifest"; exit 1 } - if (!(Test-Path $signature)) { Write-Error "Missing signature file: $signature"; exit 1 } - npx @vscode/vsce verify-signature --packagePath "$vsix" --manifestPath "$manifest" --signaturePath "$signature" - if ($LASTEXITCODE -ne 0) { - Write-Error "vsce verify-signature failed with exit code $LASTEXITCODE" - exit $LASTEXITCODE - } else { - Write-Host "vsce verify-signature succeeded ✅" + - ${{ if eq(parameters.verifySignature, true) }}: + - powershell: | + Write-Host "========================================" + Write-Host "🔐 Verifying signature for: ${{ coalesce(platform.vsceTarget, 'universal') }}" + Write-Host "========================================" + + $platformFolder = "${{ parameters.workingDirectory }}/${{ coalesce(platform.vsceTarget, 'universal') }}" + $vsixFiles = Get-ChildItem "$platformFolder/*.vsix" + + foreach ($vsix in $vsixFiles) { + Write-Host "📦 Verifying: $($vsix.Name)" + $manifestPath = "$platformFolder/$($vsix.BaseName).manifest" + $signaturePath = "$platformFolder/$($vsix.BaseName).signature.p7s" + + Write-Host " Package: $($vsix.FullName)" + Write-Host " Manifest: $manifestPath" + Write-Host " Signature: $signaturePath" + + if (!(Test-Path $vsix.FullName)) { Write-Host "❌ Missing VSIX"; exit 1 } + if (!(Test-Path $manifestPath)) { Write-Host "❌ Missing manifest"; exit 1 } + if (!(Test-Path $signaturePath)) { Write-Host "❌ Missing signature"; exit 1 } + + Write-Host "🔄 Running vsce verify-signature..." + npx @vscode/vsce verify-signature --packagePath "$($vsix.FullName)" --manifestPath "$manifestPath" --signaturePath "$signaturePath" + + if ($LASTEXITCODE -ne 0) { + Write-Host "❌ vsce verify-signature failed with exit code $LASTEXITCODE" + exit $LASTEXITCODE + } else { + Write-Host "✅ Signature verification succeeded" + } } + Write-Host "========================================" + displayName: '🔐 Verify signature for ${{ coalesce(platform.vsceTarget, ''universal'') }}' + + # Final summary of all signed artifacts + - powershell: | + Write-Host "========================================" + Write-Host "📊 Final Summary - All Signed Platforms" + Write-Host "========================================" + + $baseDir = "${{ parameters.workingDirectory }}" + $platformFolders = Get-ChildItem $baseDir -Directory + + foreach ($folder in $platformFolders) { + Write-Host "" + Write-Host "📁 Platform: $($folder.Name)" + $vsixFiles = Get-ChildItem "$($folder.FullName)/*.vsix" -ErrorAction SilentlyContinue + $p7sFiles = Get-ChildItem "$($folder.FullName)/*.p7s" -ErrorAction SilentlyContinue + + if ($vsixFiles) { + foreach ($vsix in $vsixFiles) { + $hasSig = Test-Path "$($folder.FullName)/$($vsix.BaseName).signature.p7s" + $status = if ($hasSig) { "✅ Signed" } else { "❌ Not signed" } + Write-Host " 📦 $($vsix.Name) - $status" + } + } else { + Write-Host " ⚠️ No VSIX files found" + } + } + Write-Host "" + Write-Host "========================================" + displayName: '📊 Final summary' From 4061c2c2d711587125702ae18f2436de164f85a8 Mon Sep 17 00:00:00 2001 From: bschnurr Date: Fri, 9 Jan 2026 17:49:25 -0800 Subject: [PATCH 20/59] npm install for sign --- build/templates/sign.yml | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/build/templates/sign.yml b/build/templates/sign.yml index 9853396a..6218c307 100644 --- a/build/templates/sign.yml +++ b/build/templates/sign.yml @@ -62,6 +62,15 @@ steps: restoreDirectory: '$(Build.SourcesDirectory)/packages' nugetConfigPath: '$(Build.SourcesDirectory)/build/NuGet.config' + # Setup Node.js and npm authentication + - template: setup.yml@self + + - task: Npm@1 + displayName: 'npm ci (install vsce)' + inputs: + command: ci + workingDir: '$(Build.SourcesDirectory)' + # ✅ Enable MicroBuildSigningPlugin for PME enforcement (once for all platforms) - task: MicroBuildSigningPlugin@4 displayName: Enable MicroBuild Signing @@ -139,7 +148,7 @@ steps: Write-Host "📝 Generating manifest:" Write-Host " Input: $($vsix.FullName)" Write-Host " Output: $manifestPath" - npx vsce generate-manifest -i "$($vsix.FullName)" -o "$manifestPath" + & "$(Build.SourcesDirectory)/node_modules/.bin/vsce" generate-manifest -i "$($vsix.FullName)" -o "$manifestPath" if (Test-Path $manifestPath) { Write-Host "✅ Manifest created: $(Get-Item $manifestPath | Select-Object -ExpandProperty Length) bytes" } else { @@ -295,7 +304,7 @@ steps: if (!(Test-Path $signaturePath)) { Write-Host "❌ Missing signature"; exit 1 } Write-Host "🔄 Running vsce verify-signature..." - npx @vscode/vsce verify-signature --packagePath "$($vsix.FullName)" --manifestPath "$manifestPath" --signaturePath "$signaturePath" + & "$(Build.SourcesDirectory)/node_modules/.bin/vsce" verify-signature --packagePath "$($vsix.FullName)" --manifestPath "$manifestPath" --signaturePath "$signaturePath" if ($LASTEXITCODE -ne 0) { Write-Host "❌ vsce verify-signature failed with exit code $LASTEXITCODE" From d6280220944c6bebb30b6f6ff221ddd79cc8eef8 Mon Sep 17 00:00:00 2001 From: bschnurr Date: Fri, 9 Jan 2026 19:48:23 -0800 Subject: [PATCH 21/59] check manifest --- build/templates/sign.yml | 27 +++++++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/build/templates/sign.yml b/build/templates/sign.yml index 6218c307..886fc466 100644 --- a/build/templates/sign.yml +++ b/build/templates/sign.yml @@ -142,17 +142,40 @@ steps: exit 1 } + # Check vsce installation + $vscePath = "$(Build.SourcesDirectory)/node_modules/.bin/vsce.cmd" + Write-Host "🔍 Looking for vsce at: $vscePath" + if (Test-Path $vscePath) { + Write-Host "✅ vsce found" + } else { + Write-Host "❌ vsce not found at $vscePath" + Write-Host "📂 Contents of node_modules/.bin:" + Get-ChildItem "$(Build.SourcesDirectory)/node_modules/.bin" -ErrorAction SilentlyContinue | ForEach-Object { Write-Host " - $($_.Name)" } + exit 1 + } + Write-Host "✅ Found $($vsixFiles.Count) VSIX file(s)" foreach ($vsix in $vsixFiles) { $manifestPath = "$platformFolder/$($vsix.BaseName).manifest" Write-Host "📝 Generating manifest:" Write-Host " Input: $($vsix.FullName)" Write-Host " Output: $manifestPath" - & "$(Build.SourcesDirectory)/node_modules/.bin/vsce" generate-manifest -i "$($vsix.FullName)" -o "$manifestPath" + + Write-Host "🔄 Running vsce generate-manifest..." + $output = & $vscePath generate-manifest -i "$($vsix.FullName)" -o "$manifestPath" 2>&1 + $exitCode = $LASTEXITCODE + Write-Host " Output: $output" + Write-Host " Exit code: $exitCode" + + if ($exitCode -ne 0) { + Write-Host "❌ vsce generate-manifest failed with exit code $exitCode" + exit $exitCode + } + if (Test-Path $manifestPath) { Write-Host "✅ Manifest created: $(Get-Item $manifestPath | Select-Object -ExpandProperty Length) bytes" } else { - Write-Host "❌ Failed to create manifest" + Write-Host "❌ Failed to create manifest file" exit 1 } } From 5e2e39d00752231d989a3289940af403e5fe5136 Mon Sep 17 00:00:00 2001 From: bschnurr Date: Fri, 9 Jan 2026 20:24:23 -0800 Subject: [PATCH 22/59] simplify manifest --- build/templates/sign.yml | 175 ++++++++++++--------------------------- 1 file changed, 52 insertions(+), 123 deletions(-) diff --git a/build/templates/sign.yml b/build/templates/sign.yml index 886fc466..fbaf4fec 100644 --- a/build/templates/sign.yml +++ b/build/templates/sign.yml @@ -128,58 +128,22 @@ steps: displayName: '📁 Setup folder for ${{ coalesce(platform.vsceTarget, ''universal'') }}' - powershell: | - Write-Host "========================================" - Write-Host "📝 Generating manifest for: ${{ coalesce(platform.vsceTarget, 'universal') }}" - Write-Host "========================================" - $platformFolder = "${{ parameters.workingDirectory }}/${{ coalesce(platform.vsceTarget, 'universal') }}" - Write-Host "📂 Platform folder: $platformFolder" - - $vsixFiles = Get-ChildItem "$platformFolder/*.vsix" -ErrorAction SilentlyContinue - if ($null -eq $vsixFiles -or $vsixFiles.Count -eq 0) { - Write-Host "❌ No VSIX files found in platform folder" - Get-ChildItem $platformFolder | ForEach-Object { Write-Host " - $($_.Name)" } - exit 1 - } - - # Check vsce installation - $vscePath = "$(Build.SourcesDirectory)/node_modules/.bin/vsce.cmd" - Write-Host "🔍 Looking for vsce at: $vscePath" - if (Test-Path $vscePath) { - Write-Host "✅ vsce found" - } else { - Write-Host "❌ vsce not found at $vscePath" - Write-Host "📂 Contents of node_modules/.bin:" - Get-ChildItem "$(Build.SourcesDirectory)/node_modules/.bin" -ErrorAction SilentlyContinue | ForEach-Object { Write-Host " - $($_.Name)" } + $vsixFile = Get-ChildItem "$platformFolder/*.vsix" | Select-Object -First 1 + if ($null -eq $vsixFile) { + Write-Host "##vso[task.logissue type=error]No VSIX file found in $platformFolder" exit 1 } - - Write-Host "✅ Found $($vsixFiles.Count) VSIX file(s)" - foreach ($vsix in $vsixFiles) { - $manifestPath = "$platformFolder/$($vsix.BaseName).manifest" - Write-Host "📝 Generating manifest:" - Write-Host " Input: $($vsix.FullName)" - Write-Host " Output: $manifestPath" - - Write-Host "🔄 Running vsce generate-manifest..." - $output = & $vscePath generate-manifest -i "$($vsix.FullName)" -o "$manifestPath" 2>&1 - $exitCode = $LASTEXITCODE - Write-Host " Output: $output" - Write-Host " Exit code: $exitCode" - - if ($exitCode -ne 0) { - Write-Host "❌ vsce generate-manifest failed with exit code $exitCode" - exit $exitCode - } - - if (Test-Path $manifestPath) { - Write-Host "✅ Manifest created: $(Get-Item $manifestPath | Select-Object -ExpandProperty Length) bytes" - } else { - Write-Host "❌ Failed to create manifest file" - exit 1 - } - } - Write-Host "========================================" + $vsixPath = $vsixFile.FullName + # Use fixed name extension.manifest as expected by sign.proj + $manifestPath = "$platformFolder/extension.manifest" + Write-Host "##vso[task.setvariable variable=VSIX_PATH_${{ coalesce(platform.vsceTarget, 'universal') }}]$vsixPath" + Write-Host "##vso[task.setvariable variable=MANIFEST_PATH_${{ coalesce(platform.vsceTarget, 'universal') }}]$manifestPath" + Write-Host "VSIX: $vsixPath" + Write-Host "Manifest: $manifestPath" + displayName: '🔍 Find VSIX for ${{ coalesce(platform.vsceTarget, ''universal'') }}' + + - script: npx vsce generate-manifest -i "$(VSIX_PATH_${{ coalesce(platform.vsceTarget, 'universal') }})" -o "$(MANIFEST_PATH_${{ coalesce(platform.vsceTarget, 'universal') }})" displayName: '📝 Generate manifest for ${{ coalesce(platform.vsceTarget, ''universal'') }}' - powershell: | @@ -202,16 +166,16 @@ steps: } $vsixCount = (Get-ChildItem "$platformFolder/*.vsix").Count - $manifestCount = (Get-ChildItem "$platformFolder/*.manifest" -ErrorAction SilentlyContinue).Count + $manifestPath = "$platformFolder/extension.manifest" Write-Host "" - Write-Host "📊 Summary: $vsixCount VSIX, $manifestCount manifest(s)" + Write-Host "📊 Summary: $vsixCount VSIX, manifest exists: $(Test-Path $manifestPath)" if ($vsixCount -eq 0) { Write-Host "❌ No VSIX files found" exit 1 } - if ($manifestCount -eq 0) { - Write-Host "❌ No manifest files found" + if (!(Test-Path $manifestPath)) { + Write-Host "❌ extension.manifest not found" exit 1 } Write-Host "✅ Ready for signing" @@ -250,16 +214,14 @@ steps: Write-Host " $icon $($_.Name) ($($_.Length) bytes)" } - $vsixCount = (Get-ChildItem "$platformFolder/*.vsix").Count - $manifestCount = (Get-ChildItem "$platformFolder/*.manifest" -ErrorAction SilentlyContinue).Count - $p7sCount = (Get-ChildItem "$platformFolder/*.p7s" -ErrorAction SilentlyContinue).Count + $signaturePath = "$platformFolder/extension.signature.p7s" Write-Host "" - Write-Host "📊 Summary: $vsixCount VSIX, $manifestCount manifest(s), $p7sCount signature(s)" + Write-Host "📊 Signature exists: $(Test-Path $signaturePath)" - if ($p7sCount -gt 0) { - Write-Host "✅ Signature files found" + if (Test-Path $signaturePath) { + Write-Host "✅ extension.signature.p7s found" } else { - Write-Host "⚠️ No signature files found after signing" + Write-Host "⚠️ extension.signature.p7s not found after signing" } Write-Host "========================================" displayName: '🔍 Post-sign inspection for ${{ coalesce(platform.vsceTarget, ''universal'') }}' @@ -270,73 +232,40 @@ steps: Write-Host "========================================" $platformFolder = "${{ parameters.workingDirectory }}/${{ coalesce(platform.vsceTarget, 'universal') }}" - $vsixFiles = Get-ChildItem "$platformFolder/*.vsix" + $manifestPath = "$platformFolder/extension.manifest" + $signaturePath = "$platformFolder/extension.signature.p7s" - foreach ($vsix in $vsixFiles) { - Write-Host "📦 Validating: $($vsix.Name)" - $manifestPath = "$platformFolder/$($vsix.BaseName).manifest" - $signaturePath = "$platformFolder/$($vsix.BaseName).signature.p7s" - - Write-Host " Manifest: $manifestPath" - Write-Host " Signature: $signaturePath" - - if (!(Test-Path $manifestPath)) { - Write-Host "❌ Manifest missing" - exit 1 - } - if (!(Test-Path $signaturePath)) { - Write-Host "❌ Signature missing" - exit 1 - } - - $manifestHash = (Get-FileHash -Algorithm SHA256 $manifestPath).Hash - $signatureHash = (Get-FileHash -Algorithm SHA256 $signaturePath).Hash - Write-Host " Manifest SHA256: $manifestHash" - Write-Host " Signature SHA256: $signatureHash" - - if ($manifestHash -eq $signatureHash) { - Write-Host "❌ Signature file is identical to manifest (placeholder detected)" - exit 1 - } else { - Write-Host "✅ Hashes differ - signature is valid" - } + Write-Host " Manifest: $manifestPath" + Write-Host " Signature: $signaturePath" + + if (!(Test-Path $manifestPath)) { + Write-Host "❌ Manifest missing" + exit 1 + } + if (!(Test-Path $signaturePath)) { + Write-Host "❌ Signature missing" + exit 1 } + + $manifestHash = (Get-FileHash -Algorithm SHA256 $manifestPath).Hash + $signatureHash = (Get-FileHash -Algorithm SHA256 $signaturePath).Hash + Write-Host " Manifest SHA256: $manifestHash" + Write-Host " Signature SHA256: $signatureHash" + + if ($manifestHash -eq $signatureHash) { + Write-Host "❌ Signature file is identical to manifest (placeholder detected)" + exit 1 + } else { + Write-Host "✅ Hashes differ - signature is valid" + } + + # Set signature path variable for verify step + Write-Host "##vso[task.setvariable variable=SIGNATURE_PATH_${{ coalesce(platform.vsceTarget, 'universal') }}]$signaturePath" Write-Host "========================================" displayName: '✅ Validate signature for ${{ coalesce(platform.vsceTarget, ''universal'') }}' - ${{ if eq(parameters.verifySignature, true) }}: - - powershell: | - Write-Host "========================================" - Write-Host "🔐 Verifying signature for: ${{ coalesce(platform.vsceTarget, 'universal') }}" - Write-Host "========================================" - - $platformFolder = "${{ parameters.workingDirectory }}/${{ coalesce(platform.vsceTarget, 'universal') }}" - $vsixFiles = Get-ChildItem "$platformFolder/*.vsix" - - foreach ($vsix in $vsixFiles) { - Write-Host "📦 Verifying: $($vsix.Name)" - $manifestPath = "$platformFolder/$($vsix.BaseName).manifest" - $signaturePath = "$platformFolder/$($vsix.BaseName).signature.p7s" - - Write-Host " Package: $($vsix.FullName)" - Write-Host " Manifest: $manifestPath" - Write-Host " Signature: $signaturePath" - - if (!(Test-Path $vsix.FullName)) { Write-Host "❌ Missing VSIX"; exit 1 } - if (!(Test-Path $manifestPath)) { Write-Host "❌ Missing manifest"; exit 1 } - if (!(Test-Path $signaturePath)) { Write-Host "❌ Missing signature"; exit 1 } - - Write-Host "🔄 Running vsce verify-signature..." - & "$(Build.SourcesDirectory)/node_modules/.bin/vsce" verify-signature --packagePath "$($vsix.FullName)" --manifestPath "$manifestPath" --signaturePath "$signaturePath" - - if ($LASTEXITCODE -ne 0) { - Write-Host "❌ vsce verify-signature failed with exit code $LASTEXITCODE" - exit $LASTEXITCODE - } else { - Write-Host "✅ Signature verification succeeded" - } - } - Write-Host "========================================" + - script: npx vsce verify-signature --packagePath "$(VSIX_PATH_${{ coalesce(platform.vsceTarget, 'universal') }})" --manifestPath "$(MANIFEST_PATH_${{ coalesce(platform.vsceTarget, 'universal') }})" --signaturePath "$(SIGNATURE_PATH_${{ coalesce(platform.vsceTarget, 'universal') }})" displayName: '🔐 Verify signature for ${{ coalesce(platform.vsceTarget, ''universal'') }}' # Final summary of all signed artifacts @@ -352,11 +281,11 @@ steps: Write-Host "" Write-Host "📁 Platform: $($folder.Name)" $vsixFiles = Get-ChildItem "$($folder.FullName)/*.vsix" -ErrorAction SilentlyContinue - $p7sFiles = Get-ChildItem "$($folder.FullName)/*.p7s" -ErrorAction SilentlyContinue + $signaturePath = "$($folder.FullName)/extension.signature.p7s" if ($vsixFiles) { foreach ($vsix in $vsixFiles) { - $hasSig = Test-Path "$($folder.FullName)/$($vsix.BaseName).signature.p7s" + $hasSig = Test-Path $signaturePath $status = if ($hasSig) { "✅ Signed" } else { "❌ Not signed" } Write-Host " 📦 $($vsix.Name) - $status" } From b74ea41cd715b7c9766a5131b86c83424235fb2e Mon Sep 17 00:00:00 2001 From: bschnurr Date: Sat, 10 Jan 2026 13:00:39 -0800 Subject: [PATCH 23/59] upate stable with multiplatform sign --- build/azure-devdiv-pipeline.stable.yml | 5 +++-- package.json | 5 +---- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/build/azure-devdiv-pipeline.stable.yml b/build/azure-devdiv-pipeline.stable.yml index 26d7c538..22c146ca 100644 --- a/build/azure-devdiv-pipeline.stable.yml +++ b/build/azure-devdiv-pipeline.stable.yml @@ -72,7 +72,7 @@ parameters: - script: python ./build/update_ext_version.py --release --for-publishing displayName: Update build number - - script: npm run vsce-package + - script: npm run package displayName: Build extension extends: @@ -98,6 +98,7 @@ extends: parameters: buildPlatforms: ${{ parameters.buildPlatforms }} buildSteps: ${{ parameters.buildSteps }} + isPreRelease: false - stage: Sign displayName: Sign Extension @@ -126,7 +127,7 @@ extends: - template: build/templates/sign.yml@self parameters: - vsixName: $(VsixName) + buildPlatforms: ${{ parameters.buildPlatforms }} workingDirectory: $(Build.StagingDirectory)\drop signType: real verifySignature: true diff --git a/package.json b/package.json index 53fdb416..92a6b18d 100644 --- a/package.json +++ b/package.json @@ -644,10 +644,7 @@ "lint": "eslint src --ext ts", "format-check": "prettier --check 'src/**/*.ts' 'build/**/*.yml' '.github/**/*.yml'", "format-fix": "prettier --write 'src/**/*.ts' 'build/**/*.yml' '.github/**/*.yml'", - "test": "node ./out/test/runTest.js", - "vsce-package": "npx @vscode/vsce package -o python-debugger.vsix", - "vsce-package-pre": "vsce package -o python-debugger.vsix --pre-release" - }, + "test": "node ./out/test/runTest.js" }, "devDependencies": { "@types/chai": "^4.1.2", "@types/chai-as-promised": "^7.1.0", From 1629d51ab5de42ef6825e6b81d7a32a350f02fd5 Mon Sep 17 00:00:00 2001 From: bschnurr Date: Sat, 10 Jan 2026 18:05:27 -0800 Subject: [PATCH 24/59] multiplatform publish --- build/azure-devdiv-pipeline.pre-release.yml | 2 +- build/azure-devdiv-pipeline.stable.yml | 2 +- build/templates/publish.yml | 127 +++++++++++--------- 3 files changed, 75 insertions(+), 56 deletions(-) diff --git a/build/azure-devdiv-pipeline.pre-release.yml b/build/azure-devdiv-pipeline.pre-release.yml index 44963523..77a8f3ca 100644 --- a/build/azure-devdiv-pipeline.pre-release.yml +++ b/build/azure-devdiv-pipeline.pre-release.yml @@ -142,7 +142,7 @@ extends: - template: build/templates/publish.yml@self parameters: azureSubscription: PylancePublishPipelineSecureConnectionWithManagedIdentity - vsixName: $(VsixName) + buildPlatforms: ${{ parameters.buildPlatforms }} manifestName: extension.manifest signatureName: extension.signature.p7s publishFolder: drop diff --git a/build/azure-devdiv-pipeline.stable.yml b/build/azure-devdiv-pipeline.stable.yml index 22c146ca..d8777ea6 100644 --- a/build/azure-devdiv-pipeline.stable.yml +++ b/build/azure-devdiv-pipeline.stable.yml @@ -137,7 +137,7 @@ extends: - template: build/templates/publish.yml@self parameters: azureSubscription: PylancePublishPipelineSecureConnectionWithManagedIdentity - vsixName: $(VsixName) + buildPlatforms: ${{ parameters.buildPlatforms }} manifestName: extension.manifest signatureName: extension.signature.p7s publishFolder: drop diff --git a/build/templates/publish.yml b/build/templates/publish.yml index 2e4764b7..af5615d0 100644 --- a/build/templates/publish.yml +++ b/build/templates/publish.yml @@ -1,32 +1,35 @@ -# Template (steps): PublishMarketplace for autopep8 extension -# Expects working directory already populated (or artifact previously downloaded) with: autopep8.vsix, extension.manifest, extension.signature.p7s -# Provides optional prerelease publishing via parameter. +# Template (steps): PublishMarketplace for VS Code extension +# Publishes platform-specific VSIX packages to the VS Code Marketplace. +# Iterates over buildPlatforms to publish each platform's signed artifacts. # # Usage (example inside a stage job): # steps: # - template: build/templates/publish.yml@self # parameters: -# azureSubscription: Autopep8PublishServiceConnection -# artifactName: drop -# vsixName: autopep8.vsix +# azureSubscription: PublishServiceConnectionWithManagedIdentity +# buildPlatforms: +# - name: Linux +# vsceTarget: '' +# - name: Linux +# vsceTarget: linux-arm64 # manifestName: extension.manifest # signatureName: extension.signature.p7s -# publishFolder: vscode-autopep8 +# publishFolder: drop # preRelease: true -# noVerify: true # # Notes: # - Azure DevOps Marketplace resource GUID (499b84ac-1321-427f-aa17-267ca6975798) is hardcoded in publish script. # - This uses Managed Identity via AzureCLI@2 to acquire an AAD token and passes it as a PAT. # - Requires extension artifacts already signed (signature file present). # - Node & vsce expected to be prepared by parent pipeline; omit local installation here. +# - Artifacts are expected at: $(Build.ArtifactStagingDirectory)/publishFolder/{platform}/ parameters: - name: azureSubscription type: string - - name: vsixName - type: string - default: autopep8.vsix + - name: buildPlatforms + type: object + displayName: 'List of platforms to publish' - name: manifestName type: string default: extension.manifest @@ -35,7 +38,7 @@ parameters: default: extension.signature.p7s - name: publishFolder type: string - default: vscode-autopep8 + default: drop - name: preRelease type: boolean default: false @@ -43,7 +46,7 @@ parameters: steps: # Node & vsce expected to be prepared by parent pipeline; omit local installation. - # Assumes files already present at $(Build.ArtifactStagingDirectory)/publishFolder + # Assumes files already present at $(Build.ArtifactStagingDirectory)/publishFolder/{platform}/ # Step 1: Acquire token only (store secret variable MarketplaceAADToken) - task: AzureCLI@2 @@ -61,52 +64,68 @@ steps: Write-Host "##vso[task.setvariable variable=MarketplaceAADToken;isSecret=true]$aadToken" Write-Host "Token stored in secret variable MarketplaceAADToken" - # Step 2: Validate artifacts & publish - - task: PowerShell@2 - displayName: Publish extension (vsce) - inputs: - targetType: inline - script: | - $aadToken = "$(MarketplaceAADToken)" - if (-not $aadToken) { Write-Error 'MarketplaceAADToken is empty (token acquisition failed).'; exit 1 } + # Step 2: Publish each platform + - ${{ each platform in parameters.buildPlatforms }}: + - task: PowerShell@2 + displayName: 'Publish extension (${{ coalesce(platform.vsceTarget, ''universal'') }})' + inputs: + targetType: inline + script: | + $aadToken = "$(MarketplaceAADToken)" + if (-not $aadToken) { Write-Error 'MarketplaceAADToken is empty (token acquisition failed).'; exit 1 } - $root = "$(Build.ArtifactStagingDirectory)/${{ parameters.publishFolder }}" - $vsixPath = Join-Path $root "${{ parameters.vsixName }}" - $manifestPath = Join-Path $root "${{ parameters.manifestName }}" - $signaturePath = Join-Path $root "${{ parameters.signatureName }}" - - Write-Host "VSIX Path: $vsixPath" - Write-Host "Manifest Path: $manifestPath" - Write-Host "Signature Path: $signaturePath" - - if (-not (Test-Path $vsixPath)) { Write-Error "VSIX file not found: $vsixPath"; exit 1 } - if (-not (Test-Path $manifestPath)) { Write-Error "Manifest file not found: $manifestPath"; exit 1 } - if (-not (Test-Path $signaturePath)) { Write-Error "Signature file not found: $signaturePath"; exit 1 } - - Write-Host "Listing publish folder contents: $root" - Get-ChildItem -Recurse $root | Select-Object FullName,Length | Format-Table -AutoSize - - if ('${{ parameters.preRelease }}' -eq 'True') { - Write-Host 'Publishing as pre-release' - Write-Host "Executing: npx vsce publish --pat *** --packagePath $vsixPath --manifestPath $manifestPath --signaturePath $signaturePath --pre-release" - npx vsce publish --pat $aadToken --packagePath $vsixPath --manifestPath $manifestPath --signaturePath $signaturePath --pre-release - } else { - Write-Host 'Publishing as stable release' - Write-Host "Executing: npx vsce publish --pat *** --packagePath $vsixPath --manifestPath $manifestPath --signaturePath $signaturePath" - npx vsce publish --pat $aadToken --packagePath $vsixPath --manifestPath $manifestPath --signaturePath $signaturePath - } + $platformFolder = "${{ coalesce(platform.vsceTarget, 'universal') }}" + $root = "$(Build.ArtifactStagingDirectory)/${{ parameters.publishFolder }}/$platformFolder" - if ($LASTEXITCODE -ne 0) { - Write-Error "vsce publish failed with exit code $LASTEXITCODE" - exit $LASTEXITCODE - } - Write-Host 'Publish step completed (publish command currently disabled).' + Write-Host "Publishing platform: $platformFolder" + Write-Host "Artifact folder: $root" + + if (-not (Test-Path $root)) { Write-Error "Platform folder not found: $root"; exit 1 } + # Find VSIX file dynamically + $vsixFile = Get-ChildItem -Path $root -Filter "*.vsix" | Select-Object -First 1 + if (-not $vsixFile) { Write-Error "No VSIX file found in: $root"; exit 1 } + + $vsixPath = $vsixFile.FullName + $manifestPath = Join-Path $root "${{ parameters.manifestName }}" + $signaturePath = Join-Path $root "${{ parameters.signatureName }}" + + Write-Host "VSIX Path: $vsixPath" + Write-Host "Manifest Path: $manifestPath" + Write-Host "Signature Path: $signaturePath" + + if (-not (Test-Path $manifestPath)) { Write-Error "Manifest file not found: $manifestPath"; exit 1 } + if (-not (Test-Path $signaturePath)) { Write-Error "Signature file not found: $signaturePath"; exit 1 } + + Write-Host "Listing platform folder contents:" + Get-ChildItem $root | Select-Object Name,Length | Format-Table -AutoSize + + if ('${{ parameters.preRelease }}' -eq 'True') { + Write-Host 'Publishing as pre-release' + Write-Host "Executing: npx vsce publish --pat *** --packagePath $vsixPath --manifestPath $manifestPath --signaturePath $signaturePath --pre-release" + #npx vsce publish --pat $aadToken --packagePath $vsixPath --manifestPath $manifestPath --signaturePath $signaturePath --pre-release + } else { + Write-Host 'Publishing as stable release' + Write-Host "Executing: npx vsce publish --pat *** --packagePath $vsixPath --manifestPath $manifestPath --signaturePath $signaturePath" + #npx vsce publish --pat $aadToken --packagePath $vsixPath --manifestPath $manifestPath --signaturePath $signaturePath + } + + if ($LASTEXITCODE -ne 0) { + Write-Error "vsce publish failed for $platformFolder with exit code $LASTEXITCODE" + exit $LASTEXITCODE + } + Write-Host "Successfully published $platformFolder" + + # Step 3: Post-publish summary - task: PowerShell@2 displayName: Post-publish summary inputs: targetType: inline script: | - Write-Host 'Published extension artifacts:' - Get-ChildItem "$(Build.ArtifactStagingDirectory)/${{ parameters.publishFolder }}" -File | Select-Object Name,Length | Format-Table -AutoSize - Write-Host "Pre-release parameter: ${{ parameters.preRelease }}" + Write-Host 'Published extension artifacts by platform:' + $root = "$(Build.ArtifactStagingDirectory)/${{ parameters.publishFolder }}" + Get-ChildItem $root -Directory | ForEach-Object { + Write-Host "`nPlatform: $($_.Name)" + Get-ChildItem $_.FullName -File | Select-Object Name,Length | Format-Table -AutoSize + } + Write-Host "`nPre-release parameter: ${{ parameters.preRelease }}" From 0d6e9b7b7514c82301e492e17a23224c82e27b83 Mon Sep 17 00:00:00 2001 From: bschnurr Date: Mon, 12 Jan 2026 10:47:41 -0800 Subject: [PATCH 25/59] Refactor publish pipeline with multi-platform support and manual validation - Add publish-extension.yml template with Sign, WaitForValidation, and Publish jobs - Add createGitHubRelease.yml template for GitHub release creation - Update publish.yml to iterate over buildPlatforms and publish each platform - Rename artifact folder from 'drop' to 'extension' - Rename pipeline stage from 'Sign' to 'Publish' - Add manual validation gate before marketplace publishing (default enabled) - Download platform-specific artifacts (vsix-universal, vsix-linux-arm64, etc.) - Extract version from VSIX filename for GitHub release tagging --- build/azure-devdiv-pipeline.pre-release.yml | 48 +--- build/azure-devdiv-pipeline.stable.yml | 48 +--- build/templates/createGithubRelease.yml | 27 +++ build/templates/publish-extension.yml | 254 ++++++++++++++++++++ build/templates/publish.yml | 4 +- 5 files changed, 299 insertions(+), 82 deletions(-) create mode 100644 build/templates/createGithubRelease.yml create mode 100644 build/templates/publish-extension.yml diff --git a/build/azure-devdiv-pipeline.pre-release.yml b/build/azure-devdiv-pipeline.pre-release.yml index 77a8f3ca..2c7cdf62 100644 --- a/build/azure-devdiv-pipeline.pre-release.yml +++ b/build/azure-devdiv-pipeline.pre-release.yml @@ -105,45 +105,13 @@ extends: buildSteps: ${{ parameters.buildSteps }} isPreRelease: true - - stage: Sign - displayName: Sign Extension + - stage: Publish + displayName: Publish Extension dependsOn: Build jobs: - - job: Sign - displayName: Sign Job - pool: - name: VSEngSS-MicroBuild2022-1ES - os: windows - templateContext: - mb: - signing: - enabled: true - signType: real - signWithProd: true - outputs: - - output: pipelineArtifact - displayName: 'Publish Drop Artifact' - targetPath: '$(Build.StagingDirectory)\drop' - artifactName: drop - sbomEnabled: true - steps: - - download: current - displayName: Download all build artifacts - - - template: build/templates/sign.yml@self - parameters: - buildPlatforms: ${{ parameters.buildPlatforms }} - workingDirectory: $(Build.StagingDirectory)\drop - signType: real - verifySignature: true - teamName: $(TeamName) - - - ${{ if eq(parameters.publishExtension, true) }}: - - template: build/templates/publish.yml@self - parameters: - azureSubscription: PylancePublishPipelineSecureConnectionWithManagedIdentity - buildPlatforms: ${{ parameters.buildPlatforms }} - manifestName: extension.manifest - signatureName: extension.signature.p7s - publishFolder: drop - preRelease: true + - template: build/templates/publish-extension.yml@self + parameters: + buildPlatforms: ${{ parameters.buildPlatforms }} + publishExtension: ${{ parameters.publishExtension }} + preRelease: true + teamName: $(TeamName) diff --git a/build/azure-devdiv-pipeline.stable.yml b/build/azure-devdiv-pipeline.stable.yml index d8777ea6..3a6b3f5f 100644 --- a/build/azure-devdiv-pipeline.stable.yml +++ b/build/azure-devdiv-pipeline.stable.yml @@ -100,45 +100,13 @@ extends: buildSteps: ${{ parameters.buildSteps }} isPreRelease: false - - stage: Sign - displayName: Sign Extension + - stage: Publish + displayName: Publish Extension dependsOn: Build jobs: - - job: Sign - displayName: Sign Job - pool: - name: VSEngSS-MicroBuild2022-1ES - os: windows - templateContext: - mb: - signing: - enabled: true - signType: real - signWithProd: true - outputs: - - output: pipelineArtifact - displayName: 'Publish Drop Artifact' - targetPath: '$(Build.StagingDirectory)\drop' - artifactName: drop - sbomEnabled: true - steps: - - download: current - displayName: Download all build artifacts - - - template: build/templates/sign.yml@self - parameters: - buildPlatforms: ${{ parameters.buildPlatforms }} - workingDirectory: $(Build.StagingDirectory)\drop - signType: real - verifySignature: true - teamName: $(TeamName) - - - ${{ if eq(parameters.publishExtension, true) }}: - - template: build/templates/publish.yml@self - parameters: - azureSubscription: PylancePublishPipelineSecureConnectionWithManagedIdentity - buildPlatforms: ${{ parameters.buildPlatforms }} - manifestName: extension.manifest - signatureName: extension.signature.p7s - publishFolder: drop - preRelease: false + - template: build/templates/publish-extension.yml@self + parameters: + buildPlatforms: ${{ parameters.buildPlatforms }} + publishExtension: ${{ parameters.publishExtension }} + preRelease: false + teamName: $(TeamName) diff --git a/build/templates/createGithubRelease.yml b/build/templates/createGithubRelease.yml new file mode 100644 index 00000000..ea852996 --- /dev/null +++ b/build/templates/createGithubRelease.yml @@ -0,0 +1,27 @@ +parameters: + - name: isPreRelease + type: boolean + - name: ghReleaseAddChangeLog + type: boolean + - name: tagName + type: string + +steps: + - task: GitHubRelease@1 + inputs: + gitHubConnection: 'Github-Pylance' # The name of the GitHub service connection + repositoryName: $(Build.Repository.Name) + action: edit # Creates a new release if one does not exist (https://github.com/microsoft/azure-pipelines-tasks/blob/master/Tasks/GitHubReleaseV1/main.ts#85) + addChangelog: ${{ parameters.ghReleaseAddChangeLog }} + changeLogType: issueBased + changeLogLabels : '[{ "label" : "feature-request", "displayName" : "Feature Requests", "state" : "closed" }, { "label" : "bug", "displayName" : "Bugs", "state" : "closed" }]' + tagSource: userSpecifiedTag + tag: ${{ parameters.tagName }} + title: ${{ parameters.tagName }} + isPreRelease: ${{ parameters.isPreRelease }} + ${{ if eq(parameters.isPreRelease, true) }}: + changeLogCompareToRelease: lastNonDraftRelease + ${{ else }}: + changeLogCompareToRelease: lastFullRelease + displayName: 🐙 Github release + continueOnError: true \ No newline at end of file diff --git a/build/templates/publish-extension.yml b/build/templates/publish-extension.yml new file mode 100644 index 00000000..2f7eef05 --- /dev/null +++ b/build/templates/publish-extension.yml @@ -0,0 +1,254 @@ +# Template (jobs): Sign and Publish Extension +# Encapsulates Sign, optional manual validation, and Publish jobs with MicroBuild signing. +# This template defines multiple jobs with templateContext for MicroBuild signing. +# +# Usage (example inside a stage): +# jobs: +# - template: build/templates/publish-extension.yml@self +# parameters: +# buildPlatforms: ${{ parameters.buildPlatforms }} +# publishExtension: ${{ parameters.publishExtension }} +# preRelease: false +# teamName: $(TeamName) +# ghCreateRelease: true +# ghCreateTag: true +# waitForValidation: true +# +# Notes: +# - Requires MicroBuild pool (VSEngSS-MicroBuild2022-1ES) for signing. +# - Downloads platform-specific artifacts from previous stage. +# - Publishes signed artifacts as 'extension' pipeline artifact with SBOM. +# - Optionally creates a GitHub release and waits for manual validation before marketplace publishing. + +parameters: + # Build platforms + - name: buildPlatforms + type: object + displayName: 'List of platforms to sign and publish' + + # Signing parameters + - name: signType + type: string + default: real + displayName: 'MicroBuild sign type (real or test)' + - name: verifySignature + type: boolean + default: true + displayName: 'Verify signature after signing' + - name: teamName + type: string + default: VSCode-python-debugger + displayName: 'Team name for signing' + + # Publishing parameters + - name: publishExtension + type: boolean + default: false + displayName: 'Publish extension to marketplace' + - name: preRelease + type: boolean + default: false + displayName: 'Publish as pre-release' + - name: azureSubscription + type: string + default: PylancePublishPipelineSecureConnectionWithManagedIdentity + displayName: 'Azure subscription for marketplace auth' + + # GitHub Release parameters + - name: ghCreateTag + type: boolean + default: false + displayName: 'Create GitHub tag' + - name: ghCreateRelease + type: boolean + default: false + displayName: 'Create GitHub release' + - name: ghReleaseAddChangeLog + type: boolean + default: true + displayName: 'Add changelog to GitHub release' + - name: ghTagPrefix + type: string + default: 'v' + displayName: 'Prefix for GitHub tag (e.g., v for v2025.1.0)' + + # Manual validation parameters + - name: waitForValidation + type: boolean + default: true + displayName: 'Wait for manual validation before publishing' + - name: validationNotifyUsers + type: string + default: '' + displayName: 'Users to notify for manual validation (comma-separated emails)' + - name: validationInstructions + type: string + default: 'Please test the latest draft release then approve to publish to marketplace.' + displayName: 'Instructions for manual validation' + - name: validationTimeoutInMinutes + type: number + default: 1440 + displayName: 'Timeout for manual validation in minutes (default: 1 day)' + + # Paths + - name: workingDirectory + type: string + default: '$(Build.StagingDirectory)\extension' + displayName: 'Working directory for signing artifacts' + - name: publishFolder + type: string + default: extension + displayName: 'Folder containing signed artifacts for publishing' + - name: manifestName + type: string + default: extension.manifest + displayName: 'Manifest filename' + - name: signatureName + type: string + default: extension.signature.p7s + displayName: 'Signature filename' + +jobs: + # Job 1: Sign extension and create GitHub release + - job: Sign + displayName: Sign Extension + pool: + name: VSEngSS-MicroBuild2022-1ES + os: windows + templateContext: + mb: + signing: + enabled: true + signType: ${{ parameters.signType }} + signWithProd: true + outputs: + - output: pipelineArtifact + displayName: 'Publish Extension Artifact' + targetPath: '${{ parameters.workingDirectory }}' + artifactName: extension + sbomEnabled: true + steps: + # Download platform-specific artifacts to Pipeline.Workspace (where sign.yml expects them) + - ${{ each platform in parameters.buildPlatforms }}: + - ${{ if eq(platform.vsceTarget, '') }}: + - task: 1ES.DownloadPipelineArtifact@1 + inputs: + artifactName: vsix-universal + targetPath: $(Pipeline.Workspace)/vsix-universal + displayName: 🚛 Download extension (universal) + + - ${{ if ne(platform.vsceTarget, '') }}: + - task: 1ES.DownloadPipelineArtifact@1 + inputs: + artifactName: vsix-${{ platform.vsceTarget }} + targetPath: $(Pipeline.Workspace)/vsix-${{ platform.vsceTarget }} + displayName: 🚛 Download extension (${{ platform.vsceTarget }}) + + - template: sign.yml + parameters: + buildPlatforms: ${{ parameters.buildPlatforms }} + workingDirectory: ${{ parameters.workingDirectory }} + signType: ${{ parameters.signType }} + verifySignature: ${{ parameters.verifySignature }} + teamName: ${{ parameters.teamName }} + + # Get version from package.json for GitHub release tagging + - ${{ if and(eq(parameters.ghCreateTag, true), eq(parameters.ghCreateRelease, true)) }}: + - task: PowerShell@2 + name: GetVersion + displayName: 📋 Get Publisher & Version + inputs: + targetType: inline + script: | + # Look in the workingDirectory where signed artifacts are stored + $workDir = "${{ parameters.workingDirectory }}" + Write-Host "Looking for package.json in: $workDir" + + # Find any platform subfolder that has a VSIX (e.g., universal, linux-arm64) + $platformDirs = Get-ChildItem -Path $workDir -Directory -ErrorAction SilentlyContinue + if (-not $platformDirs) { + Write-Error "No platform directories found in $workDir" + exit 1 + } + + # Use the first platform folder to extract version from VSIX filename + $firstPlatform = $platformDirs | Select-Object -First 1 + $vsixFile = Get-ChildItem -Path $firstPlatform.FullName -Filter "*.vsix" | Select-Object -First 1 + if (-not $vsixFile) { + Write-Error "No VSIX file found in $($firstPlatform.FullName)" + exit 1 + } + + # Extract version from VSIX filename (e.g., ms-python.debugpy.2025.1.0.universal.vsix) + $vsixName = $vsixFile.BaseName + Write-Host "VSIX filename: $vsixName" + + # Pattern: publisher.name.version.platform + $parts = $vsixName -split '\.' + if ($parts.Length -ge 4) { + $publisher = $parts[0] + # Version is typically in format YYYY.M.patch or major.minor.patch + # Find the version part (starts with digit, contains dots) + $versionParts = @() + for ($i = 2; $i -lt $parts.Length - 1; $i++) { + if ($parts[$i] -match '^\d') { + $versionParts += $parts[$i] + } + } + $version = $versionParts -join '.' + } else { + Write-Error "Cannot parse version from VSIX filename: $vsixName" + exit 1 + } + + Write-Host "Publisher: $publisher" + Write-Host "Version: $version" + Write-Host "##vso[task.setvariable variable=publisher;isOutput=true]$publisher" + Write-Host "##vso[task.setvariable variable=version;isOutput=true]$version" + + - template: createGitHubRelease.yml + parameters: + isPreRelease: ${{ parameters.preRelease }} + ghReleaseAddChangeLog: ${{ parameters.ghReleaseAddChangeLog }} + tagName: ${{ parameters.ghTagPrefix }}$(GetVersion.version) + + # Job 2: Wait for manual validation (optional) + - ${{ if and(eq(parameters.waitForValidation, true), eq(parameters.publishExtension, true)) }}: + - job: WaitForValidation + displayName: Wait for manual validation + dependsOn: Sign + pool: server + steps: + - task: ManualValidation@0 + timeoutInMinutes: ${{ parameters.validationTimeoutInMinutes }} + inputs: + notifyUsers: '${{ parameters.validationNotifyUsers }}' + instructions: '${{ parameters.validationInstructions }}' + onTimeout: 'reject' + + # Job 3: Publish to marketplace + - ${{ if eq(parameters.publishExtension, true) }}: + - job: Publish + displayName: Publish to Marketplace + ${{ if eq(parameters.waitForValidation, true) }}: + dependsOn: WaitForValidation + ${{ else }}: + dependsOn: Sign + pool: + name: VSEngSS-MicroBuild2022-1ES + os: windows + steps: + - task: 1ES.DownloadPipelineArtifact@1 + inputs: + artifactName: extension + targetPath: $(Build.ArtifactStagingDirectory)/${{ parameters.publishFolder }} + displayName: 🚛 Download signed extension + + - template: publish.yml + parameters: + azureSubscription: ${{ parameters.azureSubscription }} + buildPlatforms: ${{ parameters.buildPlatforms }} + manifestName: ${{ parameters.manifestName }} + signatureName: ${{ parameters.signatureName }} + publishFolder: ${{ parameters.publishFolder }} + preRelease: ${{ parameters.preRelease }} diff --git a/build/templates/publish.yml b/build/templates/publish.yml index af5615d0..af256843 100644 --- a/build/templates/publish.yml +++ b/build/templates/publish.yml @@ -14,7 +14,7 @@ # vsceTarget: linux-arm64 # manifestName: extension.manifest # signatureName: extension.signature.p7s -# publishFolder: drop +# publishFolder: extension # preRelease: true # # Notes: @@ -38,7 +38,7 @@ parameters: default: extension.signature.p7s - name: publishFolder type: string - default: drop + default: extension - name: preRelease type: boolean default: false From 989c7e59c8c8db742c0b9e7914558f22ed16c178 Mon Sep 17 00:00:00 2001 From: bschnurr Date: Mon, 12 Jan 2026 11:02:40 -0800 Subject: [PATCH 26/59] try to fix download --- build/templates/publish-extension.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/build/templates/publish-extension.yml b/build/templates/publish-extension.yml index 2f7eef05..4263ee22 100644 --- a/build/templates/publish-extension.yml +++ b/build/templates/publish-extension.yml @@ -131,14 +131,14 @@ jobs: # Download platform-specific artifacts to Pipeline.Workspace (where sign.yml expects them) - ${{ each platform in parameters.buildPlatforms }}: - ${{ if eq(platform.vsceTarget, '') }}: - - task: 1ES.DownloadPipelineArtifact@1 + - task: DownloadPipelineArtifact@2 inputs: artifactName: vsix-universal targetPath: $(Pipeline.Workspace)/vsix-universal displayName: 🚛 Download extension (universal) - ${{ if ne(platform.vsceTarget, '') }}: - - task: 1ES.DownloadPipelineArtifact@1 + - task: DownloadPipelineArtifact@2 inputs: artifactName: vsix-${{ platform.vsceTarget }} targetPath: $(Pipeline.Workspace)/vsix-${{ platform.vsceTarget }} @@ -238,7 +238,7 @@ jobs: name: VSEngSS-MicroBuild2022-1ES os: windows steps: - - task: 1ES.DownloadPipelineArtifact@1 + - task: DownloadPipelineArtifact@2 inputs: artifactName: extension targetPath: $(Build.ArtifactStagingDirectory)/${{ parameters.publishFolder }} From e3a2cbd10fc31709048cacc93c5baf05adec6811 Mon Sep 17 00:00:00 2001 From: bschnurr Date: Mon, 12 Jan 2026 13:06:59 -0800 Subject: [PATCH 27/59] create github release --- build/azure-devdiv-pipeline.pre-release.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/build/azure-devdiv-pipeline.pre-release.yml b/build/azure-devdiv-pipeline.pre-release.yml index 2c7cdf62..dfc6209d 100644 --- a/build/azure-devdiv-pipeline.pre-release.yml +++ b/build/azure-devdiv-pipeline.pre-release.yml @@ -115,3 +115,6 @@ extends: publishExtension: ${{ parameters.publishExtension }} preRelease: true teamName: $(TeamName) + ghCreateTag: true + ghCreateRelease: true + ghReleaseAddChangeLog: true From f3ee1c15757c6a84d4095db9446becde00845c80 Mon Sep 17 00:00:00 2001 From: bschnurr Date: Mon, 12 Jan 2026 13:11:15 -0800 Subject: [PATCH 28/59] rename GitHubRelease --- .../{createGithubRelease.yml => createGitHubRelease.yml} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename build/templates/{createGithubRelease.yml => createGitHubRelease.yml} (100%) diff --git a/build/templates/createGithubRelease.yml b/build/templates/createGitHubRelease.yml similarity index 100% rename from build/templates/createGithubRelease.yml rename to build/templates/createGitHubRelease.yml From 2ab0bf53dbdda2d2e9feeeda069ac16b262487df Mon Sep 17 00:00:00 2001 From: bschnurr Date: Mon, 12 Jan 2026 13:52:12 -0800 Subject: [PATCH 29/59] read publisher and version from package.json --- build/templates/publish-extension.yml | 49 ++++++--------------------- 1 file changed, 11 insertions(+), 38 deletions(-) diff --git a/build/templates/publish-extension.yml b/build/templates/publish-extension.yml index 4263ee22..a50ca9a9 100644 --- a/build/templates/publish-extension.yml +++ b/build/templates/publish-extension.yml @@ -111,7 +111,7 @@ parameters: jobs: # Job 1: Sign extension and create GitHub release - job: Sign - displayName: Sign Extension + displayName: Sign Extension and Create GitHub Release pool: name: VSEngSS-MicroBuild2022-1ES os: windows @@ -159,47 +159,20 @@ jobs: displayName: 📋 Get Publisher & Version inputs: targetType: inline + workingDirectory: ${{ parameters.workingDirectory }} script: | - # Look in the workingDirectory where signed artifacts are stored - $workDir = "${{ parameters.workingDirectory }}" - Write-Host "Looking for package.json in: $workDir" - - # Find any platform subfolder that has a VSIX (e.g., universal, linux-arm64) - $platformDirs = Get-ChildItem -Path $workDir -Directory -ErrorAction SilentlyContinue - if (-not $platformDirs) { - Write-Error "No platform directories found in $workDir" - exit 1 - } - - # Use the first platform folder to extract version from VSIX filename - $firstPlatform = $platformDirs | Select-Object -First 1 - $vsixFile = Get-ChildItem -Path $firstPlatform.FullName -Filter "*.vsix" | Select-Object -First 1 - if (-not $vsixFile) { - Write-Error "No VSIX file found in $($firstPlatform.FullName)" + # Find the first extension platform folder containing package.json + $extensionDir = Get-ChildItem -Directory | Where-Object { Test-Path "$($_.FullName)/package.json" } | Select-Object -First 1 + if (-not $extensionDir) { + Write-Error "No extension directory with package.json found" exit 1 } + Write-Host "Extension directory: $($extensionDir.FullName)" - # Extract version from VSIX filename (e.g., ms-python.debugpy.2025.1.0.universal.vsix) - $vsixName = $vsixFile.BaseName - Write-Host "VSIX filename: $vsixName" - - # Pattern: publisher.name.version.platform - $parts = $vsixName -split '\.' - if ($parts.Length -ge 4) { - $publisher = $parts[0] - # Version is typically in format YYYY.M.patch or major.minor.patch - # Find the version part (starts with digit, contains dots) - $versionParts = @() - for ($i = 2; $i -lt $parts.Length - 1; $i++) { - if ($parts[$i] -match '^\d') { - $versionParts += $parts[$i] - } - } - $version = $versionParts -join '.' - } else { - Write-Error "Cannot parse version from VSIX filename: $vsixName" - exit 1 - } + # Read publisher and version from package.json using Node.js + $packageJsonPath = "$($extensionDir.FullName)/package.json" + $publisher = node -p "require('$($packageJsonPath.Replace('\', '/'))').publisher" + $version = node -p "require('$($packageJsonPath.Replace('\', '/'))').version" Write-Host "Publisher: $publisher" Write-Host "Version: $version" From 3e7798d86a506788b1a51e976ec23956c9d2abeb Mon Sep 17 00:00:00 2001 From: bschnurr Date: Mon, 12 Jan 2026 13:54:46 -0800 Subject: [PATCH 30/59] disable stabel release on tag --- build/azure-devdiv-pipeline.stable.yml | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/build/azure-devdiv-pipeline.stable.yml b/build/azure-devdiv-pipeline.stable.yml index 3a6b3f5f..1fa495ab 100644 --- a/build/azure-devdiv-pipeline.stable.yml +++ b/build/azure-devdiv-pipeline.stable.yml @@ -1,8 +1,11 @@ name: Publish Release -trigger: - branches: - include: - - refs/tags/* +trigger: none +# branches: +# include: +# - release* +# tags: +# include: ['*'] +pr: none resources: repositories: From 2de03161fff0c4bc7a291145e7a114afedeb670d Mon Sep 17 00:00:00 2001 From: bschnurr Date: Mon, 12 Jan 2026 15:20:41 -0800 Subject: [PATCH 31/59] try to get version and publisher from extracted vsix data --- build/templates/publish-extension.yml | 37 +++++++++++---------------- 1 file changed, 15 insertions(+), 22 deletions(-) diff --git a/build/templates/publish-extension.yml b/build/templates/publish-extension.yml index a50ca9a9..14fb5b26 100644 --- a/build/templates/publish-extension.yml +++ b/build/templates/publish-extension.yml @@ -154,30 +154,23 @@ jobs: # Get version from package.json for GitHub release tagging - ${{ if and(eq(parameters.ghCreateTag, true), eq(parameters.ghCreateRelease, true)) }}: - - task: PowerShell@2 + - task: ExtractFiles@1 + inputs: + archiveFilePatterns: ${{ parameters.workingDirectory }}/*/*.vsix + destinationFolder: $(Build.ArtifactStagingDirectory) + cleanDestinationFolder: true + overwriteExistingFiles: true + displayName: 📦 Extract VSIX package + + - script: | + EXTENSION_DIR=$(find "." -mindepth 1 -maxdepth 1 -type d -name "extension*" | head -n 1) + PUBLISHER=$(node -p "require(\"$EXTENSION_DIR/package.json\").publisher") + VERSION=$(node -p "require(\"$EXTENSION_DIR/package.json\").version") + echo "##vso[task.setvariable variable=publisher;isOutput=true]$PUBLISHER" + echo "##vso[task.setvariable variable=version;isOutput=true]$VERSION" name: GetVersion displayName: 📋 Get Publisher & Version - inputs: - targetType: inline - workingDirectory: ${{ parameters.workingDirectory }} - script: | - # Find the first extension platform folder containing package.json - $extensionDir = Get-ChildItem -Directory | Where-Object { Test-Path "$($_.FullName)/package.json" } | Select-Object -First 1 - if (-not $extensionDir) { - Write-Error "No extension directory with package.json found" - exit 1 - } - Write-Host "Extension directory: $($extensionDir.FullName)" - - # Read publisher and version from package.json using Node.js - $packageJsonPath = "$($extensionDir.FullName)/package.json" - $publisher = node -p "require('$($packageJsonPath.Replace('\', '/'))').publisher" - $version = node -p "require('$($packageJsonPath.Replace('\', '/'))').version" - - Write-Host "Publisher: $publisher" - Write-Host "Version: $version" - Write-Host "##vso[task.setvariable variable=publisher;isOutput=true]$publisher" - Write-Host "##vso[task.setvariable variable=version;isOutput=true]$version" + workingDirectory: $(Build.ArtifactStagingDirectory) - template: createGitHubRelease.yml parameters: From a5aa875ef570a6ada80ad1b67b1f5007901eb201 Mon Sep 17 00:00:00 2001 From: bschnurr Date: Mon, 12 Jan 2026 15:36:45 -0800 Subject: [PATCH 32/59] dont publish to github if not publishing --- build/templates/publish-extension.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build/templates/publish-extension.yml b/build/templates/publish-extension.yml index 14fb5b26..71ca73d5 100644 --- a/build/templates/publish-extension.yml +++ b/build/templates/publish-extension.yml @@ -153,7 +153,7 @@ jobs: teamName: ${{ parameters.teamName }} # Get version from package.json for GitHub release tagging - - ${{ if and(eq(parameters.ghCreateTag, true), eq(parameters.ghCreateRelease, true)) }}: + - ${{ if and(eq(parameters.publishExtension, true), eq(parameters.ghCreateTag, true), eq(parameters.ghCreateRelease, true)) }}: - task: ExtractFiles@1 inputs: archiveFilePatterns: ${{ parameters.workingDirectory }}/*/*.vsix From 8563705def787ac04a556af97bad0631ee7c4899 Mon Sep 17 00:00:00 2001 From: bschnurr Date: Mon, 12 Jan 2026 18:17:54 -0800 Subject: [PATCH 33/59] update extracting files and folders. Using "Multi-Replace String in Files" ``` ``` Done. Updated folder usage is now: | Folder | Purpose | |--------|---------| | `$(Build.BinariesDirectory)/vsix-*` | Downloaded VSIX inputs | | `$(Agent.TempDirectory)/vsix-extracted` | Temporary extraction for reading version | | `$(Build.StagingDirectory)\extension` | Signing working directory & output artifact | | `$(Build.ArtifactStagingDirectory)` | Reserved for final artifact staging (Publish job) | Made changes. --- build/templates/publish-extension.yml | 53 ++++++++++++++++----------- build/templates/sign.yml | 24 +++++++++--- 2 files changed, 51 insertions(+), 26 deletions(-) diff --git a/build/templates/publish-extension.yml b/build/templates/publish-extension.yml index 71ca73d5..d404ffd4 100644 --- a/build/templates/publish-extension.yml +++ b/build/templates/publish-extension.yml @@ -128,22 +128,51 @@ jobs: artifactName: extension sbomEnabled: true steps: - # Download platform-specific artifacts to Pipeline.Workspace (where sign.yml expects them) + # Download platform-specific artifacts to Build.BinariesDirectory - ${{ each platform in parameters.buildPlatforms }}: - ${{ if eq(platform.vsceTarget, '') }}: - task: DownloadPipelineArtifact@2 inputs: artifactName: vsix-universal - targetPath: $(Pipeline.Workspace)/vsix-universal + targetPath: $(Build.BinariesDirectory)/vsix-universal displayName: 🚛 Download extension (universal) - ${{ if ne(platform.vsceTarget, '') }}: - task: DownloadPipelineArtifact@2 inputs: artifactName: vsix-${{ platform.vsceTarget }} - targetPath: $(Pipeline.Workspace)/vsix-${{ platform.vsceTarget }} + targetPath: $(Build.BinariesDirectory)/vsix-${{ platform.vsceTarget }} displayName: 🚛 Download extension (${{ platform.vsceTarget }}) + # Extract VSIX to read publisher/version for GitHub release tagging. + # Use Agent.TempDirectory to avoid reusing Build.ArtifactStagingDirectory which + # is reserved for final artifact staging. + - task: ExtractFiles@1 + inputs: + archiveFilePatterns: $(Build.BinariesDirectory)/vsix-*/*.vsix + destinationFolder: $(Agent.TempDirectory)/vsix-extracted + cleanDestinationFolder: true + overwriteExistingFiles: true + displayName: 📦 Extract VSIX package + + - pwsh: | + $extensionDir = Get-ChildItem -Path . -Directory -Filter 'extension*' | Select-Object -First 1 + if (-not $extensionDir) { + throw "Could not find extracted extension folder under: $PWD" + } + + $packageJsonPath = Join-Path $extensionDir.FullName 'package.json' + if (-not (Test-Path $packageJsonPath)) { + throw "Could not find package.json at: $packageJsonPath" + } + + $package = Get-Content $packageJsonPath -Raw | ConvertFrom-Json + Write-Host "##vso[task.setvariable variable=publisher;isOutput=true]$($package.publisher)" + Write-Host "##vso[task.setvariable variable=version;isOutput=true]$($package.version)" + name: GetVersion + displayName: 📋 Get Publisher & Version + workingDirectory: $(Agent.TempDirectory)/vsix-extracted + - template: sign.yml parameters: buildPlatforms: ${{ parameters.buildPlatforms }} @@ -154,24 +183,6 @@ jobs: # Get version from package.json for GitHub release tagging - ${{ if and(eq(parameters.publishExtension, true), eq(parameters.ghCreateTag, true), eq(parameters.ghCreateRelease, true)) }}: - - task: ExtractFiles@1 - inputs: - archiveFilePatterns: ${{ parameters.workingDirectory }}/*/*.vsix - destinationFolder: $(Build.ArtifactStagingDirectory) - cleanDestinationFolder: true - overwriteExistingFiles: true - displayName: 📦 Extract VSIX package - - - script: | - EXTENSION_DIR=$(find "." -mindepth 1 -maxdepth 1 -type d -name "extension*" | head -n 1) - PUBLISHER=$(node -p "require(\"$EXTENSION_DIR/package.json\").publisher") - VERSION=$(node -p "require(\"$EXTENSION_DIR/package.json\").version") - echo "##vso[task.setvariable variable=publisher;isOutput=true]$PUBLISHER" - echo "##vso[task.setvariable variable=version;isOutput=true]$VERSION" - name: GetVersion - displayName: 📋 Get Publisher & Version - workingDirectory: $(Build.ArtifactStagingDirectory) - - template: createGitHubRelease.yml parameters: isPreRelease: ${{ parameters.preRelease }} diff --git a/build/templates/sign.yml b/build/templates/sign.yml index fbaf4fec..d91c3017 100644 --- a/build/templates/sign.yml +++ b/build/templates/sign.yml @@ -38,14 +38,25 @@ steps: Write-Host "" Write-Host "📂 Key Paths:" Write-Host " Pipeline.Workspace: $(Pipeline.Workspace)" + Write-Host " Build.BinariesDirectory: $(Build.BinariesDirectory)" Write-Host " Build.SourcesDirectory: $(Build.SourcesDirectory)" Write-Host " Build.StagingDirectory: $(Build.StagingDirectory)" Write-Host " Build.ArtifactStagingDirectory: $(Build.ArtifactStagingDirectory)" Write-Host "" + Write-Host "📦 Available artifacts in Build.BinariesDirectory:" + if (Test-Path "$(Build.BinariesDirectory)") { + Get-ChildItem "$(Build.BinariesDirectory)" -Directory -ErrorAction SilentlyContinue | ForEach-Object { + Write-Host " - $($_.Name)" + Get-ChildItem $_.FullName -File -ErrorAction SilentlyContinue | ForEach-Object { Write-Host " $($_.Name) ($($_.Length) bytes)" } + } + } + Write-Host "📦 Available artifacts in Pipeline.Workspace:" - Get-ChildItem "$(Pipeline.Workspace)" -Directory | ForEach-Object { - Write-Host " - $($_.Name)" - Get-ChildItem $_.FullName -File | ForEach-Object { Write-Host " $($_.Name) ($($_.Length) bytes)" } + if (Test-Path "$(Pipeline.Workspace)") { + Get-ChildItem "$(Pipeline.Workspace)" -Directory -ErrorAction SilentlyContinue | ForEach-Object { + Write-Host " - $($_.Name)" + Get-ChildItem $_.FullName -File -ErrorAction SilentlyContinue | ForEach-Object { Write-Host " $($_.Name) ($($_.Length) bytes)" } + } } Write-Host "========================================" displayName: '🔍 Log parameters and environment' @@ -96,9 +107,12 @@ steps: New-Item -ItemType Directory -Path $platformFolder -Force | Out-Null $artifactName = "vsix-${{ coalesce(platform.vsceTarget, 'universal') }}" - $artifactPath = "$(Pipeline.Workspace)/$artifactName" + $artifactPath = "$(Build.BinariesDirectory)/$artifactName" + if (-not (Test-Path $artifactPath)) { + $artifactPath = "$(Pipeline.Workspace)/$artifactName" + } Write-Host "🔍 Looking for artifact at: $artifactPath" - + if (Test-Path $artifactPath) { Write-Host "✅ Artifact folder found" Write-Host "📄 Files in artifact folder:" From 32ae290659e2e3d0851ed3f9f83be38a7faa47ca Mon Sep 17 00:00:00 2001 From: bschnurr Date: Tue, 13 Jan 2026 00:01:53 -0800 Subject: [PATCH 34/59] Updates extension version in package.json using the Azure DevOps build number. --- build/azure-devdiv-pipeline.pre-release.yml | 1 + build/templates/modify-extension-version.yml | 42 ++++++++++++++++++++ build/templates/package.yml | 10 +++++ 3 files changed, 53 insertions(+) create mode 100644 build/templates/modify-extension-version.yml diff --git a/build/azure-devdiv-pipeline.pre-release.yml b/build/azure-devdiv-pipeline.pre-release.yml index dfc6209d..a656ebd7 100644 --- a/build/azure-devdiv-pipeline.pre-release.yml +++ b/build/azure-devdiv-pipeline.pre-release.yml @@ -104,6 +104,7 @@ extends: buildPlatforms: ${{ parameters.buildPlatforms }} buildSteps: ${{ parameters.buildSteps }} isPreRelease: true + standardizedVersioning: true - stage: Publish displayName: Publish Extension diff --git a/build/templates/modify-extension-version.yml b/build/templates/modify-extension-version.yml new file mode 100644 index 00000000..b3391a5b --- /dev/null +++ b/build/templates/modify-extension-version.yml @@ -0,0 +1,42 @@ +parameters: + - name: workingDirectory + type: string + +steps: + # Updates extension version in package.json using the Azure DevOps build number. + # + # Build number format: YYYYMMDD.R (e.g., 20260112.3) + # - YYYYMMDD: date segment + # - R: revision number (1, 2, 3... for builds on the same day) + # + # Resulting version: {major}.{minor}.{YYYYMMDDRR} + # - The revision is zero-padded to 2 digits (e.g., 03) + # - Example: 2025.19.2026011203 + # + # This keeps versions unique and monotonically increasing across builds. + - pwsh: | + $packagejsonPath = './package.json' + + $json = Get-Content $packagejsonPath | ConvertFrom-Json -Depth 100 + + $newProps = @{ } + + $stableVersion = $json.version -split '\.' + $major = $stableVersion[0] + $minor = $stableVersion[1] + + # Build number format: YYYYMMDD.R (e.g., 20260112.3) + $buildNumber = '$(Build.BuildNumber)' + $dateSegment, $revisionSegment = $buildNumber -split '\.' + + # Combine date + zero-padded revision to form the patch version + # e.g., 20260112 + 03 = 2026011203 + $patch = $dateSegment + ($revisionSegment.PadLeft(2, '0')) + $newProps.version = "$major.$minor.$patch" + + Write-Host "Updating version FROM: $($json.version) TO: $($newProps.version)" + + $prereleasePackageJson = $json | Add-Member -NotePropertyMembers $newProps -PassThru -Force + $prereleasePackageJson | ConvertTo-Json -Depth 100 | Set-Content $packagejsonPath + displayName: Update the extension version in package.json + workingDirectory: ${{ parameters.workingDirectory }} \ No newline at end of file diff --git a/build/templates/package.yml b/build/templates/package.yml index 12335ccd..befb5b14 100644 --- a/build/templates/package.yml +++ b/build/templates/package.yml @@ -20,6 +20,11 @@ parameters: default: false displayName: 'Is this a pre-release build' + - name: standardizedVersioning + type: boolean + default: false + displayName: 'Use standardized versioning (YYYYMMDDRR format)' + - name: vscePackageArgs type: string default: '' @@ -69,6 +74,11 @@ jobs: steps: - template: setup.yml@self + - ${{ if and(eq(parameters.isPreRelease, 'true'), eq(parameters.standardizedVersioning, 'true')) }}: + - template: modify-extension-version.yml@self + parameters: + workingDirectory: ${{ parameters.workingDirectory }} + - bash: | echo "##vso[task.setvariable variable=VSCETARGET]${{ platform.vsceTarget }}" echo "Building for target: ${{ platform.vsceTarget }}" From 4b0d144fa0ae6596fee4455a7d34b1104b9700f8 Mon Sep 17 00:00:00 2001 From: bschnurr Date: Tue, 13 Jan 2026 09:53:56 -0800 Subject: [PATCH 35/59] make sure we get version from package.json --- build/templates/publish-extension.yml | 24 ++++-------------------- 1 file changed, 4 insertions(+), 20 deletions(-) diff --git a/build/templates/publish-extension.yml b/build/templates/publish-extension.yml index d404ffd4..c0da78e2 100644 --- a/build/templates/publish-extension.yml +++ b/build/templates/publish-extension.yml @@ -110,7 +110,7 @@ parameters: jobs: # Job 1: Sign extension and create GitHub release - - job: Sign + - job: Sign and GitHubRelease displayName: Sign Extension and Create GitHub Release pool: name: VSEngSS-MicroBuild2022-1ES @@ -169,7 +169,7 @@ jobs: $package = Get-Content $packageJsonPath -Raw | ConvertFrom-Json Write-Host "##vso[task.setvariable variable=publisher;isOutput=true]$($package.publisher)" Write-Host "##vso[task.setvariable variable=version;isOutput=true]$($package.version)" - name: GetVersion + name: SetPublisherAndVersion displayName: 📋 Get Publisher & Version workingDirectory: $(Agent.TempDirectory)/vsix-extracted @@ -187,30 +187,14 @@ jobs: parameters: isPreRelease: ${{ parameters.preRelease }} ghReleaseAddChangeLog: ${{ parameters.ghReleaseAddChangeLog }} - tagName: ${{ parameters.ghTagPrefix }}$(GetVersion.version) + tagName: ${{ parameters.ghTagPrefix }}$(SetPublisherAndVersion.version) - # Job 2: Wait for manual validation (optional) - - ${{ if and(eq(parameters.waitForValidation, true), eq(parameters.publishExtension, true)) }}: - - job: WaitForValidation - displayName: Wait for manual validation - dependsOn: Sign - pool: server - steps: - - task: ManualValidation@0 - timeoutInMinutes: ${{ parameters.validationTimeoutInMinutes }} - inputs: - notifyUsers: '${{ parameters.validationNotifyUsers }}' - instructions: '${{ parameters.validationInstructions }}' - onTimeout: 'reject' # Job 3: Publish to marketplace - ${{ if eq(parameters.publishExtension, true) }}: - job: Publish displayName: Publish to Marketplace - ${{ if eq(parameters.waitForValidation, true) }}: - dependsOn: WaitForValidation - ${{ else }}: - dependsOn: Sign + dependsOn: Sign pool: name: VSEngSS-MicroBuild2022-1ES os: windows From dc4908543616c965e69a2371fd378a177c085afa Mon Sep 17 00:00:00 2001 From: bschnurr Date: Tue, 13 Jan 2026 09:55:49 -0800 Subject: [PATCH 36/59] fix job name --- build/templates/publish-extension.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/build/templates/publish-extension.yml b/build/templates/publish-extension.yml index c0da78e2..8b49c307 100644 --- a/build/templates/publish-extension.yml +++ b/build/templates/publish-extension.yml @@ -110,7 +110,7 @@ parameters: jobs: # Job 1: Sign extension and create GitHub release - - job: Sign and GitHubRelease + - job: Sign_and_GitHubRelease displayName: Sign Extension and Create GitHub Release pool: name: VSEngSS-MicroBuild2022-1ES @@ -190,11 +190,11 @@ jobs: tagName: ${{ parameters.ghTagPrefix }}$(SetPublisherAndVersion.version) - # Job 3: Publish to marketplace + # Job 2: Publish to marketplace - ${{ if eq(parameters.publishExtension, true) }}: - job: Publish displayName: Publish to Marketplace - dependsOn: Sign + dependsOn: Sign_and_GitHubRelease pool: name: VSEngSS-MicroBuild2022-1ES os: windows From bc630e51972ef55094ee941e307102c46f30fafa Mon Sep 17 00:00:00 2001 From: bschnurr Date: Tue, 13 Jan 2026 09:58:07 -0800 Subject: [PATCH 37/59] add 'releaseJob' --- build/templates/publish-extension.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/build/templates/publish-extension.yml b/build/templates/publish-extension.yml index 8b49c307..797d8930 100644 --- a/build/templates/publish-extension.yml +++ b/build/templates/publish-extension.yml @@ -116,6 +116,8 @@ jobs: name: VSEngSS-MicroBuild2022-1ES os: windows templateContext: + type: releaseJob # This makes a job a release job + isProduction: true # Indicates a production release mb: signing: enabled: true From fe11e506a862f6aa5f845e8873613346388d6a7d Mon Sep 17 00:00:00 2001 From: bschnurr Date: Tue, 13 Jan 2026 10:16:39 -0800 Subject: [PATCH 38/59] move github release to release job with no outputs. --- build/templates/publish-extension.yml | 88 ++++++++++++++------------- 1 file changed, 45 insertions(+), 43 deletions(-) diff --git a/build/templates/publish-extension.yml b/build/templates/publish-extension.yml index 797d8930..276f8025 100644 --- a/build/templates/publish-extension.yml +++ b/build/templates/publish-extension.yml @@ -110,8 +110,8 @@ parameters: jobs: # Job 1: Sign extension and create GitHub release - - job: Sign_and_GitHubRelease - displayName: Sign Extension and Create GitHub Release + - job: Sign + displayName: Sign Extension pool: name: VSEngSS-MicroBuild2022-1ES os: windows @@ -144,36 +144,7 @@ jobs: inputs: artifactName: vsix-${{ platform.vsceTarget }} targetPath: $(Build.BinariesDirectory)/vsix-${{ platform.vsceTarget }} - displayName: 🚛 Download extension (${{ platform.vsceTarget }}) - - # Extract VSIX to read publisher/version for GitHub release tagging. - # Use Agent.TempDirectory to avoid reusing Build.ArtifactStagingDirectory which - # is reserved for final artifact staging. - - task: ExtractFiles@1 - inputs: - archiveFilePatterns: $(Build.BinariesDirectory)/vsix-*/*.vsix - destinationFolder: $(Agent.TempDirectory)/vsix-extracted - cleanDestinationFolder: true - overwriteExistingFiles: true - displayName: 📦 Extract VSIX package - - - pwsh: | - $extensionDir = Get-ChildItem -Path . -Directory -Filter 'extension*' | Select-Object -First 1 - if (-not $extensionDir) { - throw "Could not find extracted extension folder under: $PWD" - } - - $packageJsonPath = Join-Path $extensionDir.FullName 'package.json' - if (-not (Test-Path $packageJsonPath)) { - throw "Could not find package.json at: $packageJsonPath" - } - - $package = Get-Content $packageJsonPath -Raw | ConvertFrom-Json - Write-Host "##vso[task.setvariable variable=publisher;isOutput=true]$($package.publisher)" - Write-Host "##vso[task.setvariable variable=version;isOutput=true]$($package.version)" - name: SetPublisherAndVersion - displayName: 📋 Get Publisher & Version - workingDirectory: $(Agent.TempDirectory)/vsix-extracted + displayName: 🚛 Download extension (${{ platform.vsceTarget }}) - template: sign.yml parameters: @@ -183,23 +154,17 @@ jobs: verifySignature: ${{ parameters.verifySignature }} teamName: ${{ parameters.teamName }} - # Get version from package.json for GitHub release tagging - - ${{ if and(eq(parameters.publishExtension, true), eq(parameters.ghCreateTag, true), eq(parameters.ghCreateRelease, true)) }}: - - template: createGitHubRelease.yml - parameters: - isPreRelease: ${{ parameters.preRelease }} - ghReleaseAddChangeLog: ${{ parameters.ghReleaseAddChangeLog }} - tagName: ${{ parameters.ghTagPrefix }}$(SetPublisherAndVersion.version) - - # Job 2: Publish to marketplace - ${{ if eq(parameters.publishExtension, true) }}: - job: Publish - displayName: Publish to Marketplace - dependsOn: Sign_and_GitHubRelease + displayName: Publish to Marketplace and GitHub + dependsOn: Sign pool: name: VSEngSS-MicroBuild2022-1ES os: windows + templateContext: + type: releaseJob # This makes a job a release job + isProduction: true # Indicates a production release steps: - task: DownloadPipelineArtifact@2 inputs: @@ -207,6 +172,43 @@ jobs: targetPath: $(Build.ArtifactStagingDirectory)/${{ parameters.publishFolder }} displayName: 🚛 Download signed extension + # Extract VSIX to read publisher/version for GitHub release tagging. + # Use Agent.TempDirectory to avoid reusing Build.ArtifactStagingDirectory which + # is reserved for final artifact staging. + - task: ExtractFiles@1 + inputs: + archiveFilePatterns: $(Build.BinariesDirectory)/vsix-*/*.vsix + destinationFolder: $(Agent.TempDirectory)/vsix-extracted + cleanDestinationFolder: true + overwriteExistingFiles: true + displayName: 📦 Extract VSIX package + + - pwsh: | + $extensionDir = Get-ChildItem -Path . -Directory -Filter 'extension*' | Select-Object -First 1 + if (-not $extensionDir) { + throw "Could not find extracted extension folder under: $PWD" + } + + $packageJsonPath = Join-Path $extensionDir.FullName 'package.json' + if (-not (Test-Path $packageJsonPath)) { + throw "Could not find package.json at: $packageJsonPath" + } + + $package = Get-Content $packageJsonPath -Raw | ConvertFrom-Json + Write-Host "##vso[task.setvariable variable=publisher;isOutput=true]$($package.publisher)" + Write-Host "##vso[task.setvariable variable=version;isOutput=true]$($package.version)" + name: SetPublisherAndVersion + displayName: 📋 Get Publisher & Version + workingDirectory: $(Agent.TempDirectory)/vsix-extracted + + # Get version from package.json for GitHub release tagging + - ${{ if and(eq(parameters.ghCreateTag, true), eq(parameters.ghCreateRelease, true)) }}: + - template: createGitHubRelease.yml + parameters: + isPreRelease: ${{ parameters.preRelease }} + ghReleaseAddChangeLog: ${{ parameters.ghReleaseAddChangeLog }} + tagName: ${{ parameters.ghTagPrefix }}$(SetPublisherAndVersion.version) + - template: publish.yml parameters: azureSubscription: ${{ parameters.azureSubscription }} From 6f7fce9bed100b3aaa8120a221ffb0f53d1acf3f Mon Sep 17 00:00:00 2001 From: bschnurr Date: Tue, 13 Jan 2026 10:19:10 -0800 Subject: [PATCH 39/59] remove old releaseJob tag --- build/templates/publish-extension.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/build/templates/publish-extension.yml b/build/templates/publish-extension.yml index 276f8025..b4d75d69 100644 --- a/build/templates/publish-extension.yml +++ b/build/templates/publish-extension.yml @@ -116,8 +116,6 @@ jobs: name: VSEngSS-MicroBuild2022-1ES os: windows templateContext: - type: releaseJob # This makes a job a release job - isProduction: true # Indicates a production release mb: signing: enabled: true From 6b9c9f8d2040c36580b42d5b087d617d5686ced0 Mon Sep 17 00:00:00 2001 From: bschnurr Date: Tue, 13 Jan 2026 10:20:32 -0800 Subject: [PATCH 40/59] use 1ES.DownloadPipelineArtifact@1 --- build/templates/publish-extension.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/build/templates/publish-extension.yml b/build/templates/publish-extension.yml index b4d75d69..5bce5a61 100644 --- a/build/templates/publish-extension.yml +++ b/build/templates/publish-extension.yml @@ -131,14 +131,14 @@ jobs: # Download platform-specific artifacts to Build.BinariesDirectory - ${{ each platform in parameters.buildPlatforms }}: - ${{ if eq(platform.vsceTarget, '') }}: - - task: DownloadPipelineArtifact@2 + - task: 1ES.DownloadPipelineArtifact@1 inputs: artifactName: vsix-universal targetPath: $(Build.BinariesDirectory)/vsix-universal displayName: 🚛 Download extension (universal) - ${{ if ne(platform.vsceTarget, '') }}: - - task: DownloadPipelineArtifact@2 + - task: 1ES.DownloadPipelineArtifact@1 inputs: artifactName: vsix-${{ platform.vsceTarget }} targetPath: $(Build.BinariesDirectory)/vsix-${{ platform.vsceTarget }} @@ -164,7 +164,7 @@ jobs: type: releaseJob # This makes a job a release job isProduction: true # Indicates a production release steps: - - task: DownloadPipelineArtifact@2 + - task: 1ES.DownloadPipelineArtifact@1 inputs: artifactName: extension targetPath: $(Build.ArtifactStagingDirectory)/${{ parameters.publishFolder }} From 297659f887a87110b3769aadcf527c9d0946774e Mon Sep 17 00:00:00 2001 From: bschnurr Date: Tue, 13 Jan 2026 10:21:45 -0800 Subject: [PATCH 41/59] use DownloadPipelineArtifact in non release jobs --- build/templates/publish-extension.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build/templates/publish-extension.yml b/build/templates/publish-extension.yml index 5bce5a61..3e595102 100644 --- a/build/templates/publish-extension.yml +++ b/build/templates/publish-extension.yml @@ -131,14 +131,14 @@ jobs: # Download platform-specific artifacts to Build.BinariesDirectory - ${{ each platform in parameters.buildPlatforms }}: - ${{ if eq(platform.vsceTarget, '') }}: - - task: 1ES.DownloadPipelineArtifact@1 + - task: DownloadPipelineArtifact@2 inputs: artifactName: vsix-universal targetPath: $(Build.BinariesDirectory)/vsix-universal displayName: 🚛 Download extension (universal) - ${{ if ne(platform.vsceTarget, '') }}: - - task: 1ES.DownloadPipelineArtifact@1 + - task: DownloadPipelineArtifact@2 inputs: artifactName: vsix-${{ platform.vsceTarget }} targetPath: $(Build.BinariesDirectory)/vsix-${{ platform.vsceTarget }} From 355c52a4f9f453a06aeaee7461db8bde6fb6fb18 Mon Sep 17 00:00:00 2001 From: bschnurr Date: Tue, 13 Jan 2026 11:11:04 -0800 Subject: [PATCH 42/59] fix extract path --- build/templates/publish-extension.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build/templates/publish-extension.yml b/build/templates/publish-extension.yml index 3e595102..792b49c9 100644 --- a/build/templates/publish-extension.yml +++ b/build/templates/publish-extension.yml @@ -175,7 +175,7 @@ jobs: # is reserved for final artifact staging. - task: ExtractFiles@1 inputs: - archiveFilePatterns: $(Build.BinariesDirectory)/vsix-*/*.vsix + archiveFilePatterns: $(Build.ArtifactStagingDirectory)/${{ parameters.publishFolder }}/**/*.vsix destinationFolder: $(Agent.TempDirectory)/vsix-extracted cleanDestinationFolder: true overwriteExistingFiles: true From fd0e4f0fbedec6be27f8e9688d9f6dafc299c11b Mon Sep 17 00:00:00 2001 From: bschnurr Date: Tue, 13 Jan 2026 11:23:41 -0800 Subject: [PATCH 43/59] use general pool for publish --- build/templates/publish-extension.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/build/templates/publish-extension.yml b/build/templates/publish-extension.yml index 792b49c9..9d262e43 100644 --- a/build/templates/publish-extension.yml +++ b/build/templates/publish-extension.yml @@ -158,8 +158,9 @@ jobs: displayName: Publish to Marketplace and GitHub dependsOn: Sign pool: - name: VSEngSS-MicroBuild2022-1ES - os: windows + name: AzurePipelines-EO + image: 1ESPT-Windows2022 + os: windows templateContext: type: releaseJob # This makes a job a release job isProduction: true # Indicates a production release From 5b06802b6d89998b97ad42db0c58d770f64ef21d Mon Sep 17 00:00:00 2001 From: bschnurr Date: Tue, 13 Jan 2026 11:24:06 -0800 Subject: [PATCH 44/59] fix spacing --- build/templates/publish-extension.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/build/templates/publish-extension.yml b/build/templates/publish-extension.yml index 9d262e43..938f3d7e 100644 --- a/build/templates/publish-extension.yml +++ b/build/templates/publish-extension.yml @@ -158,9 +158,9 @@ jobs: displayName: Publish to Marketplace and GitHub dependsOn: Sign pool: - name: AzurePipelines-EO - image: 1ESPT-Windows2022 - os: windows + name: AzurePipelines-EO + image: 1ESPT-Windows2022 + os: windows templateContext: type: releaseJob # This makes a job a release job isProduction: true # Indicates a production release From 11ffe849b622136d1f8efa23eee1302a48b14b3f Mon Sep 17 00:00:00 2001 From: bschnurr Date: Tue, 13 Jan 2026 13:10:25 -0800 Subject: [PATCH 45/59] trun on publish to marketplace --- build/templates/publish.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build/templates/publish.yml b/build/templates/publish.yml index af256843..6b0c6b80 100644 --- a/build/templates/publish.yml +++ b/build/templates/publish.yml @@ -103,11 +103,11 @@ steps: if ('${{ parameters.preRelease }}' -eq 'True') { Write-Host 'Publishing as pre-release' Write-Host "Executing: npx vsce publish --pat *** --packagePath $vsixPath --manifestPath $manifestPath --signaturePath $signaturePath --pre-release" - #npx vsce publish --pat $aadToken --packagePath $vsixPath --manifestPath $manifestPath --signaturePath $signaturePath --pre-release + npx vsce publish --pat $aadToken --packagePath $vsixPath --manifestPath $manifestPath --signaturePath $signaturePath --pre-release } else { Write-Host 'Publishing as stable release' Write-Host "Executing: npx vsce publish --pat *** --packagePath $vsixPath --manifestPath $manifestPath --signaturePath $signaturePath" - #npx vsce publish --pat $aadToken --packagePath $vsixPath --manifestPath $manifestPath --signaturePath $signaturePath + npx vsce publish --pat $aadToken --packagePath $vsixPath --manifestPath $manifestPath --signaturePath $signaturePath } if ($LASTEXITCODE -ne 0) { From 627a75000a50b582a02e8aa6e6503794b1c0bbc9 Mon Sep 17 00:00:00 2001 From: bschnurr Date: Tue, 13 Jan 2026 14:55:30 -0800 Subject: [PATCH 46/59] fix linting and lint check quotes --- build/templates/createGitHubRelease.yml | 4 +- build/templates/modify-extension-version.yml | 4 +- build/templates/package.yml | 174 ++++----- build/templates/publish-extension.yml | 148 ++++---- build/templates/publish.yml | 98 ++--- build/templates/sign.yml | 360 +++++++++---------- package.json | 4 +- 7 files changed, 396 insertions(+), 396 deletions(-) diff --git a/build/templates/createGitHubRelease.yml b/build/templates/createGitHubRelease.yml index ea852996..7c136696 100644 --- a/build/templates/createGitHubRelease.yml +++ b/build/templates/createGitHubRelease.yml @@ -14,7 +14,7 @@ steps: action: edit # Creates a new release if one does not exist (https://github.com/microsoft/azure-pipelines-tasks/blob/master/Tasks/GitHubReleaseV1/main.ts#85) addChangelog: ${{ parameters.ghReleaseAddChangeLog }} changeLogType: issueBased - changeLogLabels : '[{ "label" : "feature-request", "displayName" : "Feature Requests", "state" : "closed" }, { "label" : "bug", "displayName" : "Bugs", "state" : "closed" }]' + changeLogLabels: '[{ "label" : "feature-request", "displayName" : "Feature Requests", "state" : "closed" }, { "label" : "bug", "displayName" : "Bugs", "state" : "closed" }]' tagSource: userSpecifiedTag tag: ${{ parameters.tagName }} title: ${{ parameters.tagName }} @@ -24,4 +24,4 @@ steps: ${{ else }}: changeLogCompareToRelease: lastFullRelease displayName: 🐙 Github release - continueOnError: true \ No newline at end of file + continueOnError: true diff --git a/build/templates/modify-extension-version.yml b/build/templates/modify-extension-version.yml index b3391a5b..810049d7 100644 --- a/build/templates/modify-extension-version.yml +++ b/build/templates/modify-extension-version.yml @@ -28,7 +28,7 @@ steps: # Build number format: YYYYMMDD.R (e.g., 20260112.3) $buildNumber = '$(Build.BuildNumber)' $dateSegment, $revisionSegment = $buildNumber -split '\.' - + # Combine date + zero-padded revision to form the patch version # e.g., 20260112 + 03 = 2026011203 $patch = $dateSegment + ($revisionSegment.PadLeft(2, '0')) @@ -39,4 +39,4 @@ steps: $prereleasePackageJson = $json | Add-Member -NotePropertyMembers $newProps -PassThru -Force $prereleasePackageJson | ConvertTo-Json -Depth 100 | Set-Content $packagejsonPath displayName: Update the extension version in package.json - workingDirectory: ${{ parameters.workingDirectory }} \ No newline at end of file + workingDirectory: ${{ parameters.workingDirectory }} diff --git a/build/templates/package.yml b/build/templates/package.yml index befb5b14..32a55438 100644 --- a/build/templates/package.yml +++ b/build/templates/package.yml @@ -37,97 +37,97 @@ parameters: jobs: - ${{ each platform in parameters.buildPlatforms }}: - - job: Build_${{ replace(coalesce(platform.vsceTarget, 'universal'), '-', '_') }} - displayName: 'Build ${{ coalesce(platform.vsceTarget, ''universal'') }}' - - ${{ if eq(platform.name, 'Linux') }}: - pool: - name: AzurePipelines-EO - image: 1ESPT-Ubuntu22.04 - os: linux - - ${{ if eq(platform.name, 'MacOS') }}: - pool: - name: Azure Pipelines - image: macos-latest - os: macOS - - ${{ if eq(platform.name, 'Windows') }}: - pool: - name: AzurePipelines-EO - image: 1ESPT-Windows2022 - os: windows - - variables: - packageArch: ${{ coalesce(platform.packageArch, '') }} - vsceTarget: ${{ platform.vsceTarget }} - ${{ if eq(platform.name, 'MacOS') }}: - BUILDSECMON_OPT_IN: false - - templateContext: - outputs: - - output: pipelineArtifact - displayName: 'Publish VSIX for ${{ coalesce(platform.vsceTarget, ''universal'') }}' - targetPath: '$(Build.ArtifactStagingDirectory)/drop' - artifactName: vsix-${{ coalesce(platform.vsceTarget, 'universal') }} - - steps: - - template: setup.yml@self + - job: Build_${{ replace(coalesce(platform.vsceTarget, 'universal'), '-', '_') }} + displayName: "Build ${{ coalesce(platform.vsceTarget, 'universal') }}" - - ${{ if and(eq(parameters.isPreRelease, 'true'), eq(parameters.standardizedVersioning, 'true')) }}: - - template: modify-extension-version.yml@self - parameters: - workingDirectory: ${{ parameters.workingDirectory }} + ${{ if eq(platform.name, 'Linux') }}: + pool: + name: AzurePipelines-EO + image: 1ESPT-Ubuntu22.04 + os: linux - - bash: | - echo "##vso[task.setvariable variable=VSCETARGET]${{ platform.vsceTarget }}" - echo "Building for target: ${{ platform.vsceTarget }}" - displayName: 'Set VSCETARGET variable' - - - ${{ each buildStep in parameters.buildSteps }}: - - ${{ buildStep }} - - - ${{ if eq(platform.vsceTarget, '') }}: - - bash: | - VSIX=$(node -p "require(\"./package.json\").publisher + \".\" + require(\"./package.json\").name + \".\" + require(\"./package.json\").version + \".universal.vsix\"") - echo "##vso[task.setvariable variable=VSIX;isOutput=true]$VSIX" - name: SetExtensionName - displayName: 🗄 Set VSIX file name - workingDirectory: ${{ parameters.workingDirectory }} - - - ${{ if ne(platform.vsceTarget, '') }}: - - bash: | - VSIX=$(node -p "require(\"./package.json\").publisher + \".\" + require(\"./package.json\").name + \".\" + require(\"./package.json\").version + \".\" + \"${{ platform.vsceTarget }}\" + \".vsix\"") - echo "##vso[task.setvariable variable=VSIX;isOutput=true]$VSIX" - name: SetExtensionName - displayName: 🗄 Set VSIX file name - workingDirectory: ${{ parameters.workingDirectory }} - - - ${{ if eq(parameters.isPreRelease, false) }}: - - ${{ if eq(platform.vsceTarget, '') }}: - - script: npx @vscode/vsce@latest package -o $(Build.BinariesDirectory)/$(SetExtensionName.VSIX) ${{ parameters.vscePackageArgs }} - displayName: 💾 Package extension + ${{ if eq(platform.name, 'MacOS') }}: + pool: + name: Azure Pipelines + image: macos-latest + os: macOS + + ${{ if eq(platform.name, 'Windows') }}: + pool: + name: AzurePipelines-EO + image: 1ESPT-Windows2022 + os: windows + + variables: + packageArch: ${{ coalesce(platform.packageArch, '') }} + vsceTarget: ${{ platform.vsceTarget }} + ${{ if eq(platform.name, 'MacOS') }}: + BUILDSECMON_OPT_IN: false + + templateContext: + outputs: + - output: pipelineArtifact + displayName: "Publish VSIX for ${{ coalesce(platform.vsceTarget, 'universal') }}" + targetPath: '$(Build.ArtifactStagingDirectory)/drop' + artifactName: vsix-${{ coalesce(platform.vsceTarget, 'universal') }} + + steps: + - template: setup.yml@self + + - ${{ if and(eq(parameters.isPreRelease, 'true'), eq(parameters.standardizedVersioning, 'true')) }}: + - template: modify-extension-version.yml@self + parameters: workingDirectory: ${{ parameters.workingDirectory }} - - ${{ if ne(platform.vsceTarget, '') }}: - - script: npx @vscode/vsce@latest package -o $(Build.BinariesDirectory)/$(SetExtensionName.VSIX) --target ${{ platform.vsceTarget }} ${{ parameters.vscePackageArgs }} - displayName: 💾 Package extension - workingDirectory: ${{ parameters.workingDirectory }} + - bash: | + echo "##vso[task.setvariable variable=VSCETARGET]${{ platform.vsceTarget }}" + echo "Building for target: ${{ platform.vsceTarget }}" + displayName: 'Set VSCETARGET variable' - - ${{ if eq(parameters.isPreRelease, true) }}: - - ${{ if eq(platform.vsceTarget, '') }}: - - script: npx @vscode/vsce@latest package -o $(Build.BinariesDirectory)/$(SetExtensionName.VSIX) --pre-release ${{ parameters.vscePackageArgs }} - displayName: 💾 Package pre-release extension - workingDirectory: ${{ parameters.workingDirectory }} + - ${{ each buildStep in parameters.buildSteps }}: + - ${{ buildStep }} - - ${{ if ne(platform.vsceTarget, '') }}: - - script: npx @vscode/vsce@latest package -o $(Build.BinariesDirectory)/$(SetExtensionName.VSIX) --target ${{ platform.vsceTarget }} --pre-release ${{ parameters.vscePackageArgs }} - displayName: 💾 Package pre-release extension - workingDirectory: ${{ parameters.workingDirectory }} + - ${{ if eq(platform.vsceTarget, '') }}: + - bash: | + VSIX=$(node -p "require(\"./package.json\").publisher + \".\" + require(\"./package.json\").name + \".\" + require(\"./package.json\").version + \".universal.vsix\"") + echo "##vso[task.setvariable variable=VSIX;isOutput=true]$VSIX" + name: SetExtensionName + displayName: 🗄 Set VSIX file name + workingDirectory: ${{ parameters.workingDirectory }} + + - ${{ if ne(platform.vsceTarget, '') }}: + - bash: | + VSIX=$(node -p "require(\"./package.json\").publisher + \".\" + require(\"./package.json\").name + \".\" + require(\"./package.json\").version + \".\" + \"${{ platform.vsceTarget }}\" + \".vsix\"") + echo "##vso[task.setvariable variable=VSIX;isOutput=true]$VSIX" + name: SetExtensionName + displayName: 🗄 Set VSIX file name + workingDirectory: ${{ parameters.workingDirectory }} - - task: CopyFiles@2 - inputs: - sourceFolder: $(Build.BinariesDirectory) - contents: '*.vsix' - targetFolder: $(Build.ArtifactStagingDirectory)/drop - displayName: 📦 Copy VSIX to staging + - ${{ if eq(parameters.isPreRelease, false) }}: + - ${{ if eq(platform.vsceTarget, '') }}: + - script: npx @vscode/vsce@latest package -o $(Build.BinariesDirectory)/$(SetExtensionName.VSIX) ${{ parameters.vscePackageArgs }} + displayName: 💾 Package extension + workingDirectory: ${{ parameters.workingDirectory }} + + - ${{ if ne(platform.vsceTarget, '') }}: + - script: npx @vscode/vsce@latest package -o $(Build.BinariesDirectory)/$(SetExtensionName.VSIX) --target ${{ platform.vsceTarget }} ${{ parameters.vscePackageArgs }} + displayName: 💾 Package extension + workingDirectory: ${{ parameters.workingDirectory }} + + - ${{ if eq(parameters.isPreRelease, true) }}: + - ${{ if eq(platform.vsceTarget, '') }}: + - script: npx @vscode/vsce@latest package -o $(Build.BinariesDirectory)/$(SetExtensionName.VSIX) --pre-release ${{ parameters.vscePackageArgs }} + displayName: 💾 Package pre-release extension + workingDirectory: ${{ parameters.workingDirectory }} + + - ${{ if ne(platform.vsceTarget, '') }}: + - script: npx @vscode/vsce@latest package -o $(Build.BinariesDirectory)/$(SetExtensionName.VSIX) --target ${{ platform.vsceTarget }} --pre-release ${{ parameters.vscePackageArgs }} + displayName: 💾 Package pre-release extension + workingDirectory: ${{ parameters.workingDirectory }} + + - task: CopyFiles@2 + inputs: + sourceFolder: $(Build.BinariesDirectory) + contents: '*.vsix' + targetFolder: $(Build.ArtifactStagingDirectory)/drop + displayName: 📦 Copy VSIX to staging diff --git a/build/templates/publish-extension.yml b/build/templates/publish-extension.yml index 938f3d7e..a7d5ed46 100644 --- a/build/templates/publish-extension.yml +++ b/build/templates/publish-extension.yml @@ -130,19 +130,19 @@ jobs: steps: # Download platform-specific artifacts to Build.BinariesDirectory - ${{ each platform in parameters.buildPlatforms }}: - - ${{ if eq(platform.vsceTarget, '') }}: - - task: DownloadPipelineArtifact@2 - inputs: - artifactName: vsix-universal - targetPath: $(Build.BinariesDirectory)/vsix-universal - displayName: 🚛 Download extension (universal) - - - ${{ if ne(platform.vsceTarget, '') }}: - - task: DownloadPipelineArtifact@2 - inputs: - artifactName: vsix-${{ platform.vsceTarget }} - targetPath: $(Build.BinariesDirectory)/vsix-${{ platform.vsceTarget }} - displayName: 🚛 Download extension (${{ platform.vsceTarget }}) + - ${{ if eq(platform.vsceTarget, '') }}: + - task: DownloadPipelineArtifact@2 + inputs: + artifactName: vsix-universal + targetPath: $(Build.BinariesDirectory)/vsix-universal + displayName: 🚛 Download extension (universal) + + - ${{ if ne(platform.vsceTarget, '') }}: + - task: DownloadPipelineArtifact@2 + inputs: + artifactName: vsix-${{ platform.vsceTarget }} + targetPath: $(Build.BinariesDirectory)/vsix-${{ platform.vsceTarget }} + displayName: 🚛 Download extension (${{ platform.vsceTarget }}) - template: sign.yml parameters: @@ -154,65 +154,65 @@ jobs: # Job 2: Publish to marketplace - ${{ if eq(parameters.publishExtension, true) }}: - - job: Publish - displayName: Publish to Marketplace and GitHub - dependsOn: Sign - pool: - name: AzurePipelines-EO - image: 1ESPT-Windows2022 - os: windows - templateContext: - type: releaseJob # This makes a job a release job - isProduction: true # Indicates a production release - steps: - - task: 1ES.DownloadPipelineArtifact@1 - inputs: - artifactName: extension - targetPath: $(Build.ArtifactStagingDirectory)/${{ parameters.publishFolder }} - displayName: 🚛 Download signed extension - - # Extract VSIX to read publisher/version for GitHub release tagging. - # Use Agent.TempDirectory to avoid reusing Build.ArtifactStagingDirectory which - # is reserved for final artifact staging. - - task: ExtractFiles@1 - inputs: - archiveFilePatterns: $(Build.ArtifactStagingDirectory)/${{ parameters.publishFolder }}/**/*.vsix - destinationFolder: $(Agent.TempDirectory)/vsix-extracted - cleanDestinationFolder: true - overwriteExistingFiles: true - displayName: 📦 Extract VSIX package - - - pwsh: | - $extensionDir = Get-ChildItem -Path . -Directory -Filter 'extension*' | Select-Object -First 1 - if (-not $extensionDir) { - throw "Could not find extracted extension folder under: $PWD" - } - - $packageJsonPath = Join-Path $extensionDir.FullName 'package.json' - if (-not (Test-Path $packageJsonPath)) { - throw "Could not find package.json at: $packageJsonPath" - } - - $package = Get-Content $packageJsonPath -Raw | ConvertFrom-Json - Write-Host "##vso[task.setvariable variable=publisher;isOutput=true]$($package.publisher)" - Write-Host "##vso[task.setvariable variable=version;isOutput=true]$($package.version)" - name: SetPublisherAndVersion - displayName: 📋 Get Publisher & Version - workingDirectory: $(Agent.TempDirectory)/vsix-extracted - - # Get version from package.json for GitHub release tagging - - ${{ if and(eq(parameters.ghCreateTag, true), eq(parameters.ghCreateRelease, true)) }}: - - template: createGitHubRelease.yml + - job: Publish + displayName: Publish to Marketplace and GitHub + dependsOn: Sign + pool: + name: AzurePipelines-EO + image: 1ESPT-Windows2022 + os: windows + templateContext: + type: releaseJob # This makes a job a release job + isProduction: true # Indicates a production release + steps: + - task: 1ES.DownloadPipelineArtifact@1 + inputs: + artifactName: extension + targetPath: $(Build.ArtifactStagingDirectory)/${{ parameters.publishFolder }} + displayName: 🚛 Download signed extension + + # Extract VSIX to read publisher/version for GitHub release tagging. + # Use Agent.TempDirectory to avoid reusing Build.ArtifactStagingDirectory which + # is reserved for final artifact staging. + - task: ExtractFiles@1 + inputs: + archiveFilePatterns: $(Build.ArtifactStagingDirectory)/${{ parameters.publishFolder }}/**/*.vsix + destinationFolder: $(Agent.TempDirectory)/vsix-extracted + cleanDestinationFolder: true + overwriteExistingFiles: true + displayName: 📦 Extract VSIX package + + - pwsh: | + $extensionDir = Get-ChildItem -Path . -Directory -Filter 'extension*' | Select-Object -First 1 + if (-not $extensionDir) { + throw "Could not find extracted extension folder under: $PWD" + } + + $packageJsonPath = Join-Path $extensionDir.FullName 'package.json' + if (-not (Test-Path $packageJsonPath)) { + throw "Could not find package.json at: $packageJsonPath" + } + + $package = Get-Content $packageJsonPath -Raw | ConvertFrom-Json + Write-Host "##vso[task.setvariable variable=publisher;isOutput=true]$($package.publisher)" + Write-Host "##vso[task.setvariable variable=version;isOutput=true]$($package.version)" + name: SetPublisherAndVersion + displayName: 📋 Get Publisher & Version + workingDirectory: $(Agent.TempDirectory)/vsix-extracted + + # Get version from package.json for GitHub release tagging + - ${{ if and(eq(parameters.ghCreateTag, true), eq(parameters.ghCreateRelease, true)) }}: + - template: createGitHubRelease.yml + parameters: + isPreRelease: ${{ parameters.preRelease }} + ghReleaseAddChangeLog: ${{ parameters.ghReleaseAddChangeLog }} + tagName: ${{ parameters.ghTagPrefix }}$(SetPublisherAndVersion.version) + + - template: publish.yml parameters: - isPreRelease: ${{ parameters.preRelease }} - ghReleaseAddChangeLog: ${{ parameters.ghReleaseAddChangeLog }} - tagName: ${{ parameters.ghTagPrefix }}$(SetPublisherAndVersion.version) - - - template: publish.yml - parameters: - azureSubscription: ${{ parameters.azureSubscription }} - buildPlatforms: ${{ parameters.buildPlatforms }} - manifestName: ${{ parameters.manifestName }} - signatureName: ${{ parameters.signatureName }} - publishFolder: ${{ parameters.publishFolder }} - preRelease: ${{ parameters.preRelease }} + azureSubscription: ${{ parameters.azureSubscription }} + buildPlatforms: ${{ parameters.buildPlatforms }} + manifestName: ${{ parameters.manifestName }} + signatureName: ${{ parameters.signatureName }} + publishFolder: ${{ parameters.publishFolder }} + preRelease: ${{ parameters.preRelease }} diff --git a/build/templates/publish.yml b/build/templates/publish.yml index 6b0c6b80..66ac7f9f 100644 --- a/build/templates/publish.yml +++ b/build/templates/publish.yml @@ -66,55 +66,55 @@ steps: # Step 2: Publish each platform - ${{ each platform in parameters.buildPlatforms }}: - - task: PowerShell@2 - displayName: 'Publish extension (${{ coalesce(platform.vsceTarget, ''universal'') }})' - inputs: - targetType: inline - script: | - $aadToken = "$(MarketplaceAADToken)" - if (-not $aadToken) { Write-Error 'MarketplaceAADToken is empty (token acquisition failed).'; exit 1 } - - $platformFolder = "${{ coalesce(platform.vsceTarget, 'universal') }}" - $root = "$(Build.ArtifactStagingDirectory)/${{ parameters.publishFolder }}/$platformFolder" - - Write-Host "Publishing platform: $platformFolder" - Write-Host "Artifact folder: $root" - - if (-not (Test-Path $root)) { Write-Error "Platform folder not found: $root"; exit 1 } - - # Find VSIX file dynamically - $vsixFile = Get-ChildItem -Path $root -Filter "*.vsix" | Select-Object -First 1 - if (-not $vsixFile) { Write-Error "No VSIX file found in: $root"; exit 1 } - - $vsixPath = $vsixFile.FullName - $manifestPath = Join-Path $root "${{ parameters.manifestName }}" - $signaturePath = Join-Path $root "${{ parameters.signatureName }}" - - Write-Host "VSIX Path: $vsixPath" - Write-Host "Manifest Path: $manifestPath" - Write-Host "Signature Path: $signaturePath" - - if (-not (Test-Path $manifestPath)) { Write-Error "Manifest file not found: $manifestPath"; exit 1 } - if (-not (Test-Path $signaturePath)) { Write-Error "Signature file not found: $signaturePath"; exit 1 } - - Write-Host "Listing platform folder contents:" - Get-ChildItem $root | Select-Object Name,Length | Format-Table -AutoSize - - if ('${{ parameters.preRelease }}' -eq 'True') { - Write-Host 'Publishing as pre-release' - Write-Host "Executing: npx vsce publish --pat *** --packagePath $vsixPath --manifestPath $manifestPath --signaturePath $signaturePath --pre-release" - npx vsce publish --pat $aadToken --packagePath $vsixPath --manifestPath $manifestPath --signaturePath $signaturePath --pre-release - } else { - Write-Host 'Publishing as stable release' - Write-Host "Executing: npx vsce publish --pat *** --packagePath $vsixPath --manifestPath $manifestPath --signaturePath $signaturePath" - npx vsce publish --pat $aadToken --packagePath $vsixPath --manifestPath $manifestPath --signaturePath $signaturePath - } - - if ($LASTEXITCODE -ne 0) { - Write-Error "vsce publish failed for $platformFolder with exit code $LASTEXITCODE" - exit $LASTEXITCODE - } - Write-Host "Successfully published $platformFolder" + - task: PowerShell@2 + displayName: "Publish extension (${{ coalesce(platform.vsceTarget, 'universal') }})" + inputs: + targetType: inline + script: | + $aadToken = "$(MarketplaceAADToken)" + if (-not $aadToken) { Write-Error 'MarketplaceAADToken is empty (token acquisition failed).'; exit 1 } + + $platformFolder = "${{ coalesce(platform.vsceTarget, 'universal') }}" + $root = "$(Build.ArtifactStagingDirectory)/${{ parameters.publishFolder }}/$platformFolder" + + Write-Host "Publishing platform: $platformFolder" + Write-Host "Artifact folder: $root" + + if (-not (Test-Path $root)) { Write-Error "Platform folder not found: $root"; exit 1 } + + # Find VSIX file dynamically + $vsixFile = Get-ChildItem -Path $root -Filter "*.vsix" | Select-Object -First 1 + if (-not $vsixFile) { Write-Error "No VSIX file found in: $root"; exit 1 } + + $vsixPath = $vsixFile.FullName + $manifestPath = Join-Path $root "${{ parameters.manifestName }}" + $signaturePath = Join-Path $root "${{ parameters.signatureName }}" + + Write-Host "VSIX Path: $vsixPath" + Write-Host "Manifest Path: $manifestPath" + Write-Host "Signature Path: $signaturePath" + + if (-not (Test-Path $manifestPath)) { Write-Error "Manifest file not found: $manifestPath"; exit 1 } + if (-not (Test-Path $signaturePath)) { Write-Error "Signature file not found: $signaturePath"; exit 1 } + + Write-Host "Listing platform folder contents:" + Get-ChildItem $root | Select-Object Name,Length | Format-Table -AutoSize + + if ('${{ parameters.preRelease }}' -eq 'True') { + Write-Host 'Publishing as pre-release' + Write-Host "Executing: npx vsce publish --pat *** --packagePath $vsixPath --manifestPath $manifestPath --signaturePath $signaturePath --pre-release" + npx vsce publish --pat $aadToken --packagePath $vsixPath --manifestPath $manifestPath --signaturePath $signaturePath --pre-release + } else { + Write-Host 'Publishing as stable release' + Write-Host "Executing: npx vsce publish --pat *** --packagePath $vsixPath --manifestPath $manifestPath --signaturePath $signaturePath" + npx vsce publish --pat $aadToken --packagePath $vsixPath --manifestPath $manifestPath --signaturePath $signaturePath + } + + if ($LASTEXITCODE -ne 0) { + Write-Error "vsce publish failed for $platformFolder with exit code $LASTEXITCODE" + exit $LASTEXITCODE + } + Write-Host "Successfully published $platformFolder" # Step 3: Post-publish summary - task: PowerShell@2 diff --git a/build/templates/sign.yml b/build/templates/sign.yml index d91c3017..a5201dbb 100644 --- a/build/templates/sign.yml +++ b/build/templates/sign.yml @@ -97,200 +97,200 @@ steps: # Process each platform in its own subfolder - ${{ each platform in parameters.buildPlatforms }}: - - powershell: | - Write-Host "========================================" - Write-Host "📦 Setting up platform: ${{ coalesce(platform.vsceTarget, 'universal') }}" - Write-Host "========================================" - - $platformFolder = "${{ parameters.workingDirectory }}/${{ coalesce(platform.vsceTarget, 'universal') }}" - Write-Host "📁 Creating platform folder: $platformFolder" - New-Item -ItemType Directory -Path $platformFolder -Force | Out-Null - - $artifactName = "vsix-${{ coalesce(platform.vsceTarget, 'universal') }}" - $artifactPath = "$(Build.BinariesDirectory)/$artifactName" - if (-not (Test-Path $artifactPath)) { - $artifactPath = "$(Pipeline.Workspace)/$artifactName" - } - Write-Host "🔍 Looking for artifact at: $artifactPath" - - if (Test-Path $artifactPath) { - Write-Host "✅ Artifact folder found" - Write-Host "📄 Files in artifact folder:" - Get-ChildItem "$artifactPath" | ForEach-Object { Write-Host " - $($_.Name) ($($_.Length) bytes)" } - - $vsixFiles = Get-ChildItem "$artifactPath/*.vsix" - Write-Host "📦 Found $($vsixFiles.Count) VSIX file(s) to copy" - - foreach ($vsix in $vsixFiles) { - Write-Host " Copying: $($vsix.Name) -> $platformFolder" - Copy-Item $vsix.FullName -Destination $platformFolder -Force + - powershell: | + Write-Host "========================================" + Write-Host "📦 Setting up platform: ${{ coalesce(platform.vsceTarget, 'universal') }}" + Write-Host "========================================" + + $platformFolder = "${{ parameters.workingDirectory }}/${{ coalesce(platform.vsceTarget, 'universal') }}" + Write-Host "📁 Creating platform folder: $platformFolder" + New-Item -ItemType Directory -Path $platformFolder -Force | Out-Null + + $artifactName = "vsix-${{ coalesce(platform.vsceTarget, 'universal') }}" + $artifactPath = "$(Build.BinariesDirectory)/$artifactName" + if (-not (Test-Path $artifactPath)) { + $artifactPath = "$(Pipeline.Workspace)/$artifactName" + } + Write-Host "🔍 Looking for artifact at: $artifactPath" + + if (Test-Path $artifactPath) { + Write-Host "✅ Artifact folder found" + Write-Host "📄 Files in artifact folder:" + Get-ChildItem "$artifactPath" | ForEach-Object { Write-Host " - $($_.Name) ($($_.Length) bytes)" } + + $vsixFiles = Get-ChildItem "$artifactPath/*.vsix" + Write-Host "📦 Found $($vsixFiles.Count) VSIX file(s) to copy" + + foreach ($vsix in $vsixFiles) { + Write-Host " Copying: $($vsix.Name) -> $platformFolder" + Copy-Item $vsix.FullName -Destination $platformFolder -Force + } + Write-Host "✅ Copied VSIX for ${{ coalesce(platform.vsceTarget, 'universal') }}" + + # List what's in the platform folder + Write-Host "" + Write-Host "📂 Contents of platform folder:" + Get-ChildItem $platformFolder | ForEach-Object { Write-Host " - $($_.Name) ($($_.Length) bytes)" } + } else { + Write-Host "❌ Artifact folder not found: $artifactPath" + Write-Host "📂 Contents of Pipeline.Workspace:" + Get-ChildItem "$(Pipeline.Workspace)" | ForEach-Object { Write-Host " - $($_.Name)" } + Write-Error "Artifact folder not found: $artifactPath" + exit 1 } - Write-Host "✅ Copied VSIX for ${{ coalesce(platform.vsceTarget, 'universal') }}" - - # List what's in the platform folder + Write-Host "========================================" + displayName: "📁 Setup folder for ${{ coalesce(platform.vsceTarget, 'universal') }}" + + - powershell: | + $platformFolder = "${{ parameters.workingDirectory }}/${{ coalesce(platform.vsceTarget, 'universal') }}" + $vsixFile = Get-ChildItem "$platformFolder/*.vsix" | Select-Object -First 1 + if ($null -eq $vsixFile) { + Write-Host "##vso[task.logissue type=error]No VSIX file found in $platformFolder" + exit 1 + } + $vsixPath = $vsixFile.FullName + # Use fixed name extension.manifest as expected by sign.proj + $manifestPath = "$platformFolder/extension.manifest" + Write-Host "##vso[task.setvariable variable=VSIX_PATH_${{ coalesce(platform.vsceTarget, 'universal') }}]$vsixPath" + Write-Host "##vso[task.setvariable variable=MANIFEST_PATH_${{ coalesce(platform.vsceTarget, 'universal') }}]$manifestPath" + Write-Host "VSIX: $vsixPath" + Write-Host "Manifest: $manifestPath" + displayName: "🔍 Find VSIX for ${{ coalesce(platform.vsceTarget, 'universal') }}" + + - script: npx vsce generate-manifest -i "$(VSIX_PATH_${{ coalesce(platform.vsceTarget, 'universal') }})" -o "$(MANIFEST_PATH_${{ coalesce(platform.vsceTarget, 'universal') }})" + displayName: "📝 Generate manifest for ${{ coalesce(platform.vsceTarget, 'universal') }}" + + - powershell: | + Write-Host "========================================" + Write-Host "🔍 Pre-sign inspection for: ${{ coalesce(platform.vsceTarget, 'universal') }}" + Write-Host "========================================" + + $platformFolder = "${{ parameters.workingDirectory }}/${{ coalesce(platform.vsceTarget, 'universal') }}" + Write-Host "📂 Platform folder: $platformFolder" Write-Host "" - Write-Host "📂 Contents of platform folder:" - Get-ChildItem $platformFolder | ForEach-Object { Write-Host " - $($_.Name) ($($_.Length) bytes)" } - } else { - Write-Host "❌ Artifact folder not found: $artifactPath" - Write-Host "📂 Contents of Pipeline.Workspace:" - Get-ChildItem "$(Pipeline.Workspace)" | ForEach-Object { Write-Host " - $($_.Name)" } - Write-Error "Artifact folder not found: $artifactPath" - exit 1 - } - Write-Host "========================================" - displayName: '📁 Setup folder for ${{ coalesce(platform.vsceTarget, ''universal'') }}' - - - powershell: | - $platformFolder = "${{ parameters.workingDirectory }}/${{ coalesce(platform.vsceTarget, 'universal') }}" - $vsixFile = Get-ChildItem "$platformFolder/*.vsix" | Select-Object -First 1 - if ($null -eq $vsixFile) { - Write-Host "##vso[task.logissue type=error]No VSIX file found in $platformFolder" - exit 1 - } - $vsixPath = $vsixFile.FullName - # Use fixed name extension.manifest as expected by sign.proj - $manifestPath = "$platformFolder/extension.manifest" - Write-Host "##vso[task.setvariable variable=VSIX_PATH_${{ coalesce(platform.vsceTarget, 'universal') }}]$vsixPath" - Write-Host "##vso[task.setvariable variable=MANIFEST_PATH_${{ coalesce(platform.vsceTarget, 'universal') }}]$manifestPath" - Write-Host "VSIX: $vsixPath" - Write-Host "Manifest: $manifestPath" - displayName: '🔍 Find VSIX for ${{ coalesce(platform.vsceTarget, ''universal'') }}' - - - script: npx vsce generate-manifest -i "$(VSIX_PATH_${{ coalesce(platform.vsceTarget, 'universal') }})" -o "$(MANIFEST_PATH_${{ coalesce(platform.vsceTarget, 'universal') }})" - displayName: '📝 Generate manifest for ${{ coalesce(platform.vsceTarget, ''universal'') }}' - - - powershell: | - Write-Host "========================================" - Write-Host "🔍 Pre-sign inspection for: ${{ coalesce(platform.vsceTarget, 'universal') }}" - Write-Host "========================================" - - $platformFolder = "${{ parameters.workingDirectory }}/${{ coalesce(platform.vsceTarget, 'universal') }}" - Write-Host "📂 Platform folder: $platformFolder" - Write-Host "" - Write-Host "📄 Files:" - Get-ChildItem $platformFolder | ForEach-Object { - $icon = switch -Wildcard ($_.Extension) { - ".vsix" { "📦" } - ".manifest" { "📝" } - ".p7s" { "🔐" } - default { "📄" } + Write-Host "📄 Files:" + Get-ChildItem $platformFolder | ForEach-Object { + $icon = switch -Wildcard ($_.Extension) { + ".vsix" { "📦" } + ".manifest" { "📝" } + ".p7s" { "🔐" } + default { "📄" } + } + Write-Host " $icon $($_.Name) ($($_.Length) bytes)" } - Write-Host " $icon $($_.Name) ($($_.Length) bytes)" - } - - $vsixCount = (Get-ChildItem "$platformFolder/*.vsix").Count - $manifestPath = "$platformFolder/extension.manifest" - Write-Host "" - Write-Host "📊 Summary: $vsixCount VSIX, manifest exists: $(Test-Path $manifestPath)" - - if ($vsixCount -eq 0) { - Write-Host "❌ No VSIX files found" - exit 1 - } - if (!(Test-Path $manifestPath)) { - Write-Host "❌ extension.manifest not found" - exit 1 - } - Write-Host "✅ Ready for signing" - Write-Host "========================================" - displayName: '🔍 Pre-sign inspection for ${{ coalesce(platform.vsceTarget, ''universal'') }}' - - - task: MSBuild@1 - displayName: '🔏 Sign ${{ coalesce(platform.vsceTarget, ''universal'') }}' - inputs: - solution: '$(Build.SourcesDirectory)/build/sign.proj' - msbuildArguments: > - /verbosity:detailed - /bl:"${{ parameters.workingDirectory }}/${{ coalesce(platform.vsceTarget, 'universal') }}/signing.binlog" - /p:SignType=${{ parameters.signType }} - /p:BaseOutputDirectory=${{ parameters.workingDirectory }}/${{ coalesce(platform.vsceTarget, 'universal') }} - /p:OutDir=${{ parameters.workingDirectory }}/${{ coalesce(platform.vsceTarget, 'universal') }} - /p:IntermediateOutputPath=${{ parameters.workingDirectory }}/${{ coalesce(platform.vsceTarget, 'universal') }}/intermediate - - - powershell: | - Write-Host "========================================" - Write-Host "🔍 Post-sign inspection for: ${{ coalesce(platform.vsceTarget, 'universal') }}" - Write-Host "========================================" - - $platformFolder = "${{ parameters.workingDirectory }}/${{ coalesce(platform.vsceTarget, 'universal') }}" - Write-Host "📂 Platform folder: $platformFolder" - Write-Host "" - Write-Host "📄 Files after signing:" - Get-ChildItem $platformFolder -File | ForEach-Object { - $icon = switch -Wildcard ($_.Extension) { - ".vsix" { "📦" } - ".manifest" { "📝" } - ".p7s" { "🔐" } - ".binlog" { "📋" } - default { "📄" } + + $vsixCount = (Get-ChildItem "$platformFolder/*.vsix").Count + $manifestPath = "$platformFolder/extension.manifest" + Write-Host "" + Write-Host "📊 Summary: $vsixCount VSIX, manifest exists: $(Test-Path $manifestPath)" + + if ($vsixCount -eq 0) { + Write-Host "❌ No VSIX files found" + exit 1 } - Write-Host " $icon $($_.Name) ($($_.Length) bytes)" - } - - $signaturePath = "$platformFolder/extension.signature.p7s" - Write-Host "" - Write-Host "📊 Signature exists: $(Test-Path $signaturePath)" - - if (Test-Path $signaturePath) { - Write-Host "✅ extension.signature.p7s found" - } else { - Write-Host "⚠️ extension.signature.p7s not found after signing" - } - Write-Host "========================================" - displayName: '🔍 Post-sign inspection for ${{ coalesce(platform.vsceTarget, ''universal'') }}' + if (!(Test-Path $manifestPath)) { + Write-Host "❌ extension.manifest not found" + exit 1 + } + Write-Host "✅ Ready for signing" + Write-Host "========================================" + displayName: "🔍 Pre-sign inspection for ${{ coalesce(platform.vsceTarget, 'universal') }}" - - powershell: | - Write-Host "========================================" - Write-Host "✅ Validating signature for: ${{ coalesce(platform.vsceTarget, 'universal') }}" - Write-Host "========================================" - - $platformFolder = "${{ parameters.workingDirectory }}/${{ coalesce(platform.vsceTarget, 'universal') }}" - $manifestPath = "$platformFolder/extension.manifest" - $signaturePath = "$platformFolder/extension.signature.p7s" - - Write-Host " Manifest: $manifestPath" - Write-Host " Signature: $signaturePath" - - if (!(Test-Path $manifestPath)) { - Write-Host "❌ Manifest missing" - exit 1 - } - if (!(Test-Path $signaturePath)) { - Write-Host "❌ Signature missing" - exit 1 - } - - $manifestHash = (Get-FileHash -Algorithm SHA256 $manifestPath).Hash - $signatureHash = (Get-FileHash -Algorithm SHA256 $signaturePath).Hash - Write-Host " Manifest SHA256: $manifestHash" - Write-Host " Signature SHA256: $signatureHash" - - if ($manifestHash -eq $signatureHash) { - Write-Host "❌ Signature file is identical to manifest (placeholder detected)" - exit 1 - } else { - Write-Host "✅ Hashes differ - signature is valid" - } - - # Set signature path variable for verify step - Write-Host "##vso[task.setvariable variable=SIGNATURE_PATH_${{ coalesce(platform.vsceTarget, 'universal') }}]$signaturePath" - Write-Host "========================================" - displayName: '✅ Validate signature for ${{ coalesce(platform.vsceTarget, ''universal'') }}' + - task: MSBuild@1 + displayName: "🔏 Sign ${{ coalesce(platform.vsceTarget, 'universal') }}" + inputs: + solution: '$(Build.SourcesDirectory)/build/sign.proj' + msbuildArguments: > + /verbosity:detailed + /bl:"${{ parameters.workingDirectory }}/${{ coalesce(platform.vsceTarget, 'universal') }}/signing.binlog" + /p:SignType=${{ parameters.signType }} + /p:BaseOutputDirectory=${{ parameters.workingDirectory }}/${{ coalesce(platform.vsceTarget, 'universal') }} + /p:OutDir=${{ parameters.workingDirectory }}/${{ coalesce(platform.vsceTarget, 'universal') }} + /p:IntermediateOutputPath=${{ parameters.workingDirectory }}/${{ coalesce(platform.vsceTarget, 'universal') }}/intermediate - - ${{ if eq(parameters.verifySignature, true) }}: - - script: npx vsce verify-signature --packagePath "$(VSIX_PATH_${{ coalesce(platform.vsceTarget, 'universal') }})" --manifestPath "$(MANIFEST_PATH_${{ coalesce(platform.vsceTarget, 'universal') }})" --signaturePath "$(SIGNATURE_PATH_${{ coalesce(platform.vsceTarget, 'universal') }})" - displayName: '🔐 Verify signature for ${{ coalesce(platform.vsceTarget, ''universal'') }}' + - powershell: | + Write-Host "========================================" + Write-Host "🔍 Post-sign inspection for: ${{ coalesce(platform.vsceTarget, 'universal') }}" + Write-Host "========================================" + + $platformFolder = "${{ parameters.workingDirectory }}/${{ coalesce(platform.vsceTarget, 'universal') }}" + Write-Host "📂 Platform folder: $platformFolder" + Write-Host "" + Write-Host "📄 Files after signing:" + Get-ChildItem $platformFolder -File | ForEach-Object { + $icon = switch -Wildcard ($_.Extension) { + ".vsix" { "📦" } + ".manifest" { "📝" } + ".p7s" { "🔐" } + ".binlog" { "📋" } + default { "📄" } + } + Write-Host " $icon $($_.Name) ($($_.Length) bytes)" + } + + $signaturePath = "$platformFolder/extension.signature.p7s" + Write-Host "" + Write-Host "📊 Signature exists: $(Test-Path $signaturePath)" + + if (Test-Path $signaturePath) { + Write-Host "✅ extension.signature.p7s found" + } else { + Write-Host "⚠️ extension.signature.p7s not found after signing" + } + Write-Host "========================================" + displayName: "🔍 Post-sign inspection for ${{ coalesce(platform.vsceTarget, 'universal') }}" + + - powershell: | + Write-Host "========================================" + Write-Host "✅ Validating signature for: ${{ coalesce(platform.vsceTarget, 'universal') }}" + Write-Host "========================================" + + $platformFolder = "${{ parameters.workingDirectory }}/${{ coalesce(platform.vsceTarget, 'universal') }}" + $manifestPath = "$platformFolder/extension.manifest" + $signaturePath = "$platformFolder/extension.signature.p7s" + + Write-Host " Manifest: $manifestPath" + Write-Host " Signature: $signaturePath" + + if (!(Test-Path $manifestPath)) { + Write-Host "❌ Manifest missing" + exit 1 + } + if (!(Test-Path $signaturePath)) { + Write-Host "❌ Signature missing" + exit 1 + } + + $manifestHash = (Get-FileHash -Algorithm SHA256 $manifestPath).Hash + $signatureHash = (Get-FileHash -Algorithm SHA256 $signaturePath).Hash + Write-Host " Manifest SHA256: $manifestHash" + Write-Host " Signature SHA256: $signatureHash" + + if ($manifestHash -eq $signatureHash) { + Write-Host "❌ Signature file is identical to manifest (placeholder detected)" + exit 1 + } else { + Write-Host "✅ Hashes differ - signature is valid" + } + + # Set signature path variable for verify step + Write-Host "##vso[task.setvariable variable=SIGNATURE_PATH_${{ coalesce(platform.vsceTarget, 'universal') }}]$signaturePath" + Write-Host "========================================" + displayName: "✅ Validate signature for ${{ coalesce(platform.vsceTarget, 'universal') }}" + + - ${{ if eq(parameters.verifySignature, true) }}: + - script: npx vsce verify-signature --packagePath "$(VSIX_PATH_${{ coalesce(platform.vsceTarget, 'universal') }})" --manifestPath "$(MANIFEST_PATH_${{ coalesce(platform.vsceTarget, 'universal') }})" --signaturePath "$(SIGNATURE_PATH_${{ coalesce(platform.vsceTarget, 'universal') }})" + displayName: "🔐 Verify signature for ${{ coalesce(platform.vsceTarget, 'universal') }}" # Final summary of all signed artifacts - powershell: | Write-Host "========================================" Write-Host "📊 Final Summary - All Signed Platforms" Write-Host "========================================" - + $baseDir = "${{ parameters.workingDirectory }}" $platformFolders = Get-ChildItem $baseDir -Directory - + foreach ($folder in $platformFolders) { Write-Host "" Write-Host "📁 Platform: $($folder.Name)" diff --git a/package.json b/package.json index 92a6b18d..3d2f5259 100644 --- a/package.json +++ b/package.json @@ -642,8 +642,8 @@ "watch-tests": "tsc -p . -w --outDir out", "pretest": "npm run compile-tests && npm run compile && npm run lint", "lint": "eslint src --ext ts", - "format-check": "prettier --check 'src/**/*.ts' 'build/**/*.yml' '.github/**/*.yml'", - "format-fix": "prettier --write 'src/**/*.ts' 'build/**/*.yml' '.github/**/*.yml'", + "format-check": "prettier --check \"src/**/*.ts\" \"build/**/*.yml\" \".github/**/*.yml\"", + "format-fix": "prettier --write \"src/**/*.ts\" \"build/**/*.yml\" \".github/**/*.yml\"", "test": "node ./out/test/runTest.js" }, "devDependencies": { "@types/chai": "^4.1.2", From 8e676dbc510e62c19fabf4542d81d78db64fc734 Mon Sep 17 00:00:00 2001 From: bschnurr Date: Tue, 13 Jan 2026 15:02:30 -0800 Subject: [PATCH 47/59] fix import re --- noxfile.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/noxfile.py b/noxfile.py index 3a88d02c..3e1e0e94 100644 --- a/noxfile.py +++ b/noxfile.py @@ -7,6 +7,7 @@ import json import os import pathlib +import re import tempfile import urllib.request as url_lib import zipfile @@ -84,8 +85,6 @@ def _parse_wheel_info(url: str) -> dict: Example URL: .../debugpy-1.8.19-cp311-cp311-win_amd64.whl Returns: {"version": "1.8.19", "py_ver": "311", "abi": "cp311", "platform": "win_amd64"} """ - import re - filename = url.rsplit("/", 1)[-1] # Wheel filename format: {name}-{version}-{python}-{abi}-{platform}.whl match = re.match(r"debugpy-([^-]+)-cp(\d+)-([^-]+)-(.+)\.whl", filename) From 5cb04f42cd0fcab1cd175c84ec0702fa38e9ee95 Mon Sep 17 00:00:00 2001 From: bschnurr Date: Tue, 13 Jan 2026 15:07:18 -0800 Subject: [PATCH 48/59] add back vsce-package --- package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/package.json b/package.json index 3d2f5259..07379b58 100644 --- a/package.json +++ b/package.json @@ -645,6 +645,7 @@ "format-check": "prettier --check \"src/**/*.ts\" \"build/**/*.yml\" \".github/**/*.yml\"", "format-fix": "prettier --write \"src/**/*.ts\" \"build/**/*.yml\" \".github/**/*.yml\"", "test": "node ./out/test/runTest.js" }, + "vsce-package": "npx @vscode/vsce package -o python-debugger.vsix", "devDependencies": { "@types/chai": "^4.1.2", "@types/chai-as-promised": "^7.1.0", From d566b1275de6c3d5023698795b6aad0ef5176af0 Mon Sep 17 00:00:00 2001 From: bschnurr Date: Tue, 13 Jan 2026 15:17:36 -0800 Subject: [PATCH 49/59] fix missing vsce-package --- package.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 07379b58..e5334700 100644 --- a/package.json +++ b/package.json @@ -644,8 +644,9 @@ "lint": "eslint src --ext ts", "format-check": "prettier --check \"src/**/*.ts\" \"build/**/*.yml\" \".github/**/*.yml\"", "format-fix": "prettier --write \"src/**/*.ts\" \"build/**/*.yml\" \".github/**/*.yml\"", - "test": "node ./out/test/runTest.js" }, - "vsce-package": "npx @vscode/vsce package -o python-debugger.vsix", + "test": "node ./out/test/runTest.js", + "vsce-package": "npx @vscode/vsce package -o python-debugger.vsix" + }, "devDependencies": { "@types/chai": "^4.1.2", "@types/chai-as-promised": "^7.1.0", From fbbec2ee6ea175f90befbe8978a9fdc105a65879 Mon Sep 17 00:00:00 2001 From: bschnurr Date: Tue, 13 Jan 2026 15:34:07 -0800 Subject: [PATCH 50/59] re-format --- noxfile.py | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/noxfile.py b/noxfile.py index 3e1e0e94..cd935d58 100644 --- a/noxfile.py +++ b/noxfile.py @@ -98,7 +98,12 @@ def _parse_wheel_info(url: str) -> dict: # Fallback for py2.py3-none-any wheels match = re.match(r"debugpy-([^-]+)-py\d\.py\d-none-any\.whl", filename) if match: - return {"version": match.group(1), "py_ver": None, "abi": "none", "platform": "any"} + return { + "version": match.group(1), + "py_ver": None, + "abi": "none", + "platform": "any", + } raise ValueError(f"Could not parse wheel filename: {filename}") @@ -120,11 +125,16 @@ def download_debugpy_via_pip(session: nox.Session, wheels: list) -> None: for info in parsed: args = [ - "python", "-m", "pip", "download", + "python", + "-m", + "pip", + "download", f"debugpy=={version}", "--no-deps", - "--only-binary", ":all:", - "--dest", str(tmp_path), + "--only-binary", + ":all:", + "--dest", + str(tmp_path), ] if info["py_ver"]: # Platform-specific wheel From 645f3e0812ad5e128fbd09c0fc0b20fa63c10625 Mon Sep 17 00:00:00 2001 From: bschnurr Date: Tue, 13 Jan 2026 16:14:41 -0800 Subject: [PATCH 51/59] move loc files and temeletry to separate pre-built folder so we dont break old pipeline --- .gitignore | 7 ++++++- .vscodeignore | 1 + build/azure-devdiv-pipeline.pre-release.yml | 3 +++ build/azure-devdiv-pipeline.stable.yml | 3 +++ package.nls.cs.json | 1 - package.nls.de.json | 1 - package.nls.es.json | 1 - package.nls.fr.json | 1 - package.nls.it.json | 1 - package.nls.ja.json | 1 - package.nls.ko.json | 1 - package.nls.pl.json | 1 - package.nls.pt-br.json | 1 - package.nls.qps-ploc.json | 1 - package.nls.ru.json | 1 - package.nls.tr.json | 1 - package.nls.zh-cn.json | 1 - package.nls.zh-tw.json | 1 - {l10n => pre-built/l10n}/bundle.l10n.cs.json | 0 {l10n => pre-built/l10n}/bundle.l10n.de.json | 0 {l10n => pre-built/l10n}/bundle.l10n.es.json | 0 {l10n => pre-built/l10n}/bundle.l10n.fr.json | 0 {l10n => pre-built/l10n}/bundle.l10n.it.json | 0 {l10n => pre-built/l10n}/bundle.l10n.ja.json | 0 {l10n => pre-built/l10n}/bundle.l10n.ko.json | 0 {l10n => pre-built/l10n}/bundle.l10n.pl.json | 0 {l10n => pre-built/l10n}/bundle.l10n.pt-br.json | 0 {l10n => pre-built/l10n}/bundle.l10n.qps-ploc.json | 0 {l10n => pre-built/l10n}/bundle.l10n.ru.json | 0 {l10n => pre-built/l10n}/bundle.l10n.tr.json | 0 {l10n => pre-built/l10n}/bundle.l10n.zh-cn.json | 0 {l10n => pre-built/l10n}/bundle.l10n.zh-tw.json | 0 telemetry.json | 1 - 33 files changed, 13 insertions(+), 16 deletions(-) delete mode 100644 package.nls.cs.json delete mode 100644 package.nls.de.json delete mode 100644 package.nls.es.json delete mode 100644 package.nls.fr.json delete mode 100644 package.nls.it.json delete mode 100644 package.nls.ja.json delete mode 100644 package.nls.ko.json delete mode 100644 package.nls.pl.json delete mode 100644 package.nls.pt-br.json delete mode 100644 package.nls.qps-ploc.json delete mode 100644 package.nls.ru.json delete mode 100644 package.nls.tr.json delete mode 100644 package.nls.zh-cn.json delete mode 100644 package.nls.zh-tw.json rename {l10n => pre-built/l10n}/bundle.l10n.cs.json (100%) rename {l10n => pre-built/l10n}/bundle.l10n.de.json (100%) rename {l10n => pre-built/l10n}/bundle.l10n.es.json (100%) rename {l10n => pre-built/l10n}/bundle.l10n.fr.json (100%) rename {l10n => pre-built/l10n}/bundle.l10n.it.json (100%) rename {l10n => pre-built/l10n}/bundle.l10n.ja.json (100%) rename {l10n => pre-built/l10n}/bundle.l10n.ko.json (100%) rename {l10n => pre-built/l10n}/bundle.l10n.pl.json (100%) rename {l10n => pre-built/l10n}/bundle.l10n.pt-br.json (100%) rename {l10n => pre-built/l10n}/bundle.l10n.qps-ploc.json (100%) rename {l10n => pre-built/l10n}/bundle.l10n.ru.json (100%) rename {l10n => pre-built/l10n}/bundle.l10n.tr.json (100%) rename {l10n => pre-built/l10n}/bundle.l10n.zh-cn.json (100%) rename {l10n => pre-built/l10n}/bundle.l10n.zh-tw.json (100%) delete mode 100644 telemetry.json diff --git a/.gitignore b/.gitignore index ffe0c9cb..d35af712 100644 --- a/.gitignore +++ b/.gitignore @@ -8,4 +8,9 @@ node_modules bundled/libs/ **/__pycache__ **/.pytest_cache -**/.vs \ No newline at end of file +**/.vs + +# Generated files (sources live in pre-built/) +l10n/bundle.l10n.*.json +package.nls.*.json +telemetry.json \ No newline at end of file diff --git a/.vscodeignore b/.vscodeignore index cb1e5cf4..39c0e6bf 100644 --- a/.vscodeignore +++ b/.vscodeignore @@ -4,6 +4,7 @@ build/** out/** node_modules/** src/** +pre-built/** .gitignore .yarnrc webpack.config.js diff --git a/build/azure-devdiv-pipeline.pre-release.yml b/build/azure-devdiv-pipeline.pre-release.yml index a656ebd7..3ac8ddf4 100644 --- a/build/azure-devdiv-pipeline.pre-release.yml +++ b/build/azure-devdiv-pipeline.pre-release.yml @@ -77,6 +77,9 @@ parameters: - script: python ./build/update_ext_version.py --for-publishing displayName: Update build number + - pwsh: Copy-Item -Path "pre-built/*" -Destination "." -Recurse -Force + displayName: Copy pre-built files + - script: npm run package displayName: Build extension diff --git a/build/azure-devdiv-pipeline.stable.yml b/build/azure-devdiv-pipeline.stable.yml index 1fa495ab..d8219b3e 100644 --- a/build/azure-devdiv-pipeline.stable.yml +++ b/build/azure-devdiv-pipeline.stable.yml @@ -75,6 +75,9 @@ parameters: - script: python ./build/update_ext_version.py --release --for-publishing displayName: Update build number + - pwsh: Copy-Item -Path "pre-built/*" -Destination "." -Recurse -Force + displayName: Copy pre-built files + - script: npm run package displayName: Build extension diff --git a/package.nls.cs.json b/package.nls.cs.json deleted file mode 100644 index 6c8ba379..00000000 --- a/package.nls.cs.json +++ /dev/null @@ -1 +0,0 @@ -{"debugpy.command.clearCacheAndReload.title":"Vymazat okno Mezipaměti a Znovu načíst","debugpy.command.debugInTerminal.title":"Ladicí program Pythonu: Ladit soubor Pythonu","debugpy.command.debugUsingLaunchConfig.title":"Ladicí program Pythonu: Ladit pomocí souboru launch.json","debugpy.command.reportIssue.title":"Nahlásit problém…","debugpy.command.viewOutput.title":"Zobrazit výstup","debugpy.debugJustMyCode.description":"Při ladění proveďte krokování s vnořením pouze do uživatelem napsaného kódu. Pokud chcete povolit krokování s vnořením do kódu knihovny, tuto možnost zakažte.","debugpy.showPythonInlineValues.description":"Určuje, jestli se mají při ladění zobrazovat vložené hodnoty v editoru."} diff --git a/package.nls.de.json b/package.nls.de.json deleted file mode 100644 index 6efd1a65..00000000 --- a/package.nls.de.json +++ /dev/null @@ -1 +0,0 @@ -{"debugpy.command.clearCacheAndReload.title":"Fenster \"Cache löschen und neu laden\"","debugpy.command.debugInTerminal.title":"Python-Debugger: Python-Datei debuggen","debugpy.command.debugUsingLaunchConfig.title":"Python-Debugger: Debuggen mithilfe von launch.json","debugpy.command.reportIssue.title":"Problem melden...","debugpy.command.viewOutput.title":"Ausgabe Anzeigen","debugpy.debugJustMyCode.description":"Beim Debuggen nur vom Benutzer geschriebenen Code durchlaufen. Deaktivieren Sie diese Option, um das Durchlaufen von Bibliothekscode zuzulassen.","debugpy.showPythonInlineValues.description":"Gibt an, ob beim Debuggen Inlinewerte im Editor angezeigt werden sollen."} diff --git a/package.nls.es.json b/package.nls.es.json deleted file mode 100644 index eba8a457..00000000 --- a/package.nls.es.json +++ /dev/null @@ -1 +0,0 @@ -{"debugpy.command.clearCacheAndReload.title":"Borrar la caché y volver a cargar la ventana","debugpy.command.debugInTerminal.title":"Depurador de Python: depurar archivo de Python","debugpy.command.debugUsingLaunchConfig.title":"Depurador de Python: depurar mediante launch.json","debugpy.command.reportIssue.title":"Notificar problema...","debugpy.command.viewOutput.title":"Mostrar salida","debugpy.debugJustMyCode.description":"Al depurar, solo recorrer el código escrito por el usuario. Deshabilite esta opción para permitir recorrer el código de biblioteca.","debugpy.showPythonInlineValues.description":"Si se desean mostrar los valores en línea en el editor durante la depuración."} diff --git a/package.nls.fr.json b/package.nls.fr.json deleted file mode 100644 index dbf12b8e..00000000 --- a/package.nls.fr.json +++ /dev/null @@ -1 +0,0 @@ -{"debugpy.command.clearCacheAndReload.title":"Effacer le cache et recharger la fenêtre","debugpy.command.debugInTerminal.title":"Débogueur Python : déboguer un fichier Python","debugpy.command.debugUsingLaunchConfig.title":"Débogueur Python : déboguer à l’aide de launch.json","debugpy.command.reportIssue.title":"Signaler un problème...","debugpy.command.viewOutput.title":"Afficher la sortie","debugpy.debugJustMyCode.description":"Lors du débogage, parcourez uniquement le code écrit par l'utilisateur. Désactivez cette option pour permettre d'accéder au code de la bibliothèque.","debugpy.showPythonInlineValues.description":"Indique s’il faut afficher les valeurs inline dans l’éditeur pendant le débogage."} diff --git a/package.nls.it.json b/package.nls.it.json deleted file mode 100644 index e8b6ffca..00000000 --- a/package.nls.it.json +++ /dev/null @@ -1 +0,0 @@ -{"debugpy.command.clearCacheAndReload.title":"Cancella la cache e ricarica la finestra","debugpy.command.debugInTerminal.title":"Debugger Python: esegui il debug di un file Python","debugpy.command.debugUsingLaunchConfig.title":"Debugger Python: esegui il debug con launch.json","debugpy.command.reportIssue.title":"Segnala problema...","debugpy.command.viewOutput.title":"Mostra output","debugpy.debugJustMyCode.description":"Durante il debug, eseguire solo il codice scritto dall'utente. Disabilitare questa opzione per consentire l'esecuzione di istruzioni nel codice della libreria.","debugpy.showPythonInlineValues.description":"Indica se visualizzare i valori inline nell'editor durante il debug."} diff --git a/package.nls.ja.json b/package.nls.ja.json deleted file mode 100644 index b6ade88d..00000000 --- a/package.nls.ja.json +++ /dev/null @@ -1 +0,0 @@ -{"debugpy.command.clearCacheAndReload.title":"キャッシュのクリアとウィンドウの再読み込み","debugpy.command.debugInTerminal.title":"Python デバッガー: Python ファイルのデバッグ","debugpy.command.debugUsingLaunchConfig.title":"Python デバッガー: launch.json を使用したデバッグ","debugpy.command.reportIssue.title":"問題の報告...","debugpy.command.viewOutput.title":"出力の表示","debugpy.debugJustMyCode.description":"ユーザーが作成したコードを使ったステップのみをデバッグする場合。これを無効にすると、ライブラリ コードにステップ インできるようになります。","debugpy.showPythonInlineValues.description":"デバッグ中にエディターにインライン値を表示するかどうか。"} diff --git a/package.nls.ko.json b/package.nls.ko.json deleted file mode 100644 index 5da06477..00000000 --- a/package.nls.ko.json +++ /dev/null @@ -1 +0,0 @@ -{"debugpy.command.clearCacheAndReload.title":"캐시 지우기 및 창 다시 로드","debugpy.command.debugInTerminal.title":"Python 디버거: Python 파일 디버그","debugpy.command.debugUsingLaunchConfig.title":"Python 디버거: launch.json을 사용하여 디버그","debugpy.command.reportIssue.title":"문제 보고...","debugpy.command.viewOutput.title":"출력 표시","debugpy.debugJustMyCode.description":"디버깅할 때 사용자가 작성한 코드만 단계별로 실행합니다. 라이브러리 코드를 한 단계씩 실행할 수 있게 하려면 이 기능을 비활성화하세요.","debugpy.showPythonInlineValues.description":"디버깅하는 동안 편집기에서 인라인 값을 표시할지 여부를 지정합니다."} diff --git a/package.nls.pl.json b/package.nls.pl.json deleted file mode 100644 index 46763fe7..00000000 --- a/package.nls.pl.json +++ /dev/null @@ -1 +0,0 @@ -{"debugpy.command.clearCacheAndReload.title":"Wyczyść pamięć podręczną i załaduj ponownie okno","debugpy.command.debugInTerminal.title":"Debuger języka Python: debugowanie pliku języka Python","debugpy.command.debugUsingLaunchConfig.title":"Debuger języka Python: debugowanie przy użyciu pliku launch.json","debugpy.command.reportIssue.title":"Zgłoś problem...","debugpy.command.viewOutput.title":"Pokaż dane wyjściowe","debugpy.debugJustMyCode.description":"Podczas debugowania przejdź przez kod napisany przez użytkownika. Wyłącz tę opcję, aby umożliwić przechodzenie do kodu biblioteki.","debugpy.showPythonInlineValues.description":"Określa, czy wyświetlać wartości śródwierszowe w edytorze podczas debugowania."} diff --git a/package.nls.pt-br.json b/package.nls.pt-br.json deleted file mode 100644 index 16c193ae..00000000 --- a/package.nls.pt-br.json +++ /dev/null @@ -1 +0,0 @@ -{"debugpy.command.clearCacheAndReload.title":"Limpar Cache e Recarregar Janela","debugpy.command.debugInTerminal.title":"Depurador do Python: Depurar Arquivo Python","debugpy.command.debugUsingLaunchConfig.title":"Depurador do Python: depurar usando launch.json","debugpy.command.reportIssue.title":"Relatar um Problema...","debugpy.command.viewOutput.title":"Mostrar Saída","debugpy.debugJustMyCode.description":"Ao depurar, apenas percorra o código escrito pelo usuário. Desabilite isso para permitir a entrada no código da biblioteca.","debugpy.showPythonInlineValues.description":"Se desejar exibir valores em linha no editor durante a depuração."} diff --git a/package.nls.qps-ploc.json b/package.nls.qps-ploc.json deleted file mode 100644 index 36943fd7..00000000 --- a/package.nls.qps-ploc.json +++ /dev/null @@ -1 +0,0 @@ -{"debugpy.command.clearCacheAndReload.title":"Çlëær Çæçhë æñð Rëløæð Wïñðøw","debugpy.command.debugInTerminal.title":"Pÿthøñ Ðëþµggër: Ðëþµg Pÿthøñ Fïlë","debugpy.command.debugUsingLaunchConfig.title":"Pÿthøñ Ðëþµggër: Ðëþµg µsïñg læµñçh.jsøñ","debugpy.command.reportIssue.title":"Rëpørt Ïssµë...","debugpy.command.viewOutput.title":"§høw صtpµt","debugpy.debugJustMyCode.description":"Whëñ ðëþµggïñg øñlÿ stëp thrøµgh µsër-wrïttëñ çøðë. Ðïsæþlë thïs tø ælløw stëppïñg ïñtø lïþrærÿ çøðë.","debugpy.showPythonInlineValues.description":"Whëthër tø ðïsplæÿ ïñlïñë vælµës ïñ thë ëðïtør whïlë ðëþµggïñg."} diff --git a/package.nls.ru.json b/package.nls.ru.json deleted file mode 100644 index dfb27fb3..00000000 --- a/package.nls.ru.json +++ /dev/null @@ -1 +0,0 @@ -{"debugpy.command.clearCacheAndReload.title":"Очистить кэш и перезагрузить окно","debugpy.command.debugInTerminal.title":"Отладчик Python: отладка файла Python","debugpy.command.debugUsingLaunchConfig.title":"Отладчик Python: отладка с помощью launch.json","debugpy.command.reportIssue.title":"Сообщить о проблеме…","debugpy.command.viewOutput.title":"Показать выходные данные","debugpy.debugJustMyCode.description":"При отладке выполнять только обход написанного пользователем кода. Отключите этот параметр, чтобы разрешить обход кода библиотеки.","debugpy.showPythonInlineValues.description":"Следует ли отображать встроенные значения в редакторе при отладке."} diff --git a/package.nls.tr.json b/package.nls.tr.json deleted file mode 100644 index a5f9e2fe..00000000 --- a/package.nls.tr.json +++ /dev/null @@ -1 +0,0 @@ -{"debugpy.command.clearCacheAndReload.title":"Önbelleği Temizleme ve Pencereyi Yeniden Yükleme","debugpy.command.debugInTerminal.title":"Python Hata Ayıklayıcı: Python Dosyasında Hata Ayıklama","debugpy.command.debugUsingLaunchConfig.title":"Python Hata Ayıklayıcı: launch.json kullanarak hata ayıklama","debugpy.command.reportIssue.title":"Sorun Bildir...","debugpy.command.viewOutput.title":"Çıkışı Göster","debugpy.debugJustMyCode.description":"Hata ayıklama sırasında yalnızca kullanıcı tarafından yazılan kod adımlarını izleyin. Kitaplık kodu adımlarını izlemeye izin vermek için bunu devre dışı bırakın.","debugpy.showPythonInlineValues.description":"Hata ayıklama sırasında satır içi değerlerin düzenleyicide gösterilip gösterilmeyeceğini belirler."} diff --git a/package.nls.zh-cn.json b/package.nls.zh-cn.json deleted file mode 100644 index 7e315c0f..00000000 --- a/package.nls.zh-cn.json +++ /dev/null @@ -1 +0,0 @@ -{"debugpy.command.clearCacheAndReload.title":"清除缓存并重新加载窗口","debugpy.command.debugInTerminal.title":"Python 调试程序: 调试 Python 文件","debugpy.command.debugUsingLaunchConfig.title":"Python 调试程序: 使用 launch.json 进行调试","debugpy.command.reportIssue.title":"报告问题...","debugpy.command.viewOutput.title":"显示输出","debugpy.debugJustMyCode.description":"调试时,仅单步执行用户编写的代码。禁用此选项可允许单步执行库代码。","debugpy.showPythonInlineValues.description":"调试时是否在编辑器中显示内联值。"} diff --git a/package.nls.zh-tw.json b/package.nls.zh-tw.json deleted file mode 100644 index 6c69a2e3..00000000 --- a/package.nls.zh-tw.json +++ /dev/null @@ -1 +0,0 @@ -{"debugpy.command.clearCacheAndReload.title":"清除快取並重新載入視窗","debugpy.command.debugInTerminal.title":"Python 偵錯工具: 偵錯 Python 檔案","debugpy.command.debugUsingLaunchConfig.title":"Python 偵錯工具: 使用 launch.json 進行偵錯","debugpy.command.reportIssue.title":"回報問題...","debugpy.command.viewOutput.title":"顯示輸出","debugpy.debugJustMyCode.description":"偵錯時,僅逐步執行使用者寫入的程式碼。停用此選項以允許逐步執行程式庫程式碼。","debugpy.showPythonInlineValues.description":"是否要在偵錯時於編輯器中顯示內嵌值。"} diff --git a/l10n/bundle.l10n.cs.json b/pre-built/l10n/bundle.l10n.cs.json similarity index 100% rename from l10n/bundle.l10n.cs.json rename to pre-built/l10n/bundle.l10n.cs.json diff --git a/l10n/bundle.l10n.de.json b/pre-built/l10n/bundle.l10n.de.json similarity index 100% rename from l10n/bundle.l10n.de.json rename to pre-built/l10n/bundle.l10n.de.json diff --git a/l10n/bundle.l10n.es.json b/pre-built/l10n/bundle.l10n.es.json similarity index 100% rename from l10n/bundle.l10n.es.json rename to pre-built/l10n/bundle.l10n.es.json diff --git a/l10n/bundle.l10n.fr.json b/pre-built/l10n/bundle.l10n.fr.json similarity index 100% rename from l10n/bundle.l10n.fr.json rename to pre-built/l10n/bundle.l10n.fr.json diff --git a/l10n/bundle.l10n.it.json b/pre-built/l10n/bundle.l10n.it.json similarity index 100% rename from l10n/bundle.l10n.it.json rename to pre-built/l10n/bundle.l10n.it.json diff --git a/l10n/bundle.l10n.ja.json b/pre-built/l10n/bundle.l10n.ja.json similarity index 100% rename from l10n/bundle.l10n.ja.json rename to pre-built/l10n/bundle.l10n.ja.json diff --git a/l10n/bundle.l10n.ko.json b/pre-built/l10n/bundle.l10n.ko.json similarity index 100% rename from l10n/bundle.l10n.ko.json rename to pre-built/l10n/bundle.l10n.ko.json diff --git a/l10n/bundle.l10n.pl.json b/pre-built/l10n/bundle.l10n.pl.json similarity index 100% rename from l10n/bundle.l10n.pl.json rename to pre-built/l10n/bundle.l10n.pl.json diff --git a/l10n/bundle.l10n.pt-br.json b/pre-built/l10n/bundle.l10n.pt-br.json similarity index 100% rename from l10n/bundle.l10n.pt-br.json rename to pre-built/l10n/bundle.l10n.pt-br.json diff --git a/l10n/bundle.l10n.qps-ploc.json b/pre-built/l10n/bundle.l10n.qps-ploc.json similarity index 100% rename from l10n/bundle.l10n.qps-ploc.json rename to pre-built/l10n/bundle.l10n.qps-ploc.json diff --git a/l10n/bundle.l10n.ru.json b/pre-built/l10n/bundle.l10n.ru.json similarity index 100% rename from l10n/bundle.l10n.ru.json rename to pre-built/l10n/bundle.l10n.ru.json diff --git a/l10n/bundle.l10n.tr.json b/pre-built/l10n/bundle.l10n.tr.json similarity index 100% rename from l10n/bundle.l10n.tr.json rename to pre-built/l10n/bundle.l10n.tr.json diff --git a/l10n/bundle.l10n.zh-cn.json b/pre-built/l10n/bundle.l10n.zh-cn.json similarity index 100% rename from l10n/bundle.l10n.zh-cn.json rename to pre-built/l10n/bundle.l10n.zh-cn.json diff --git a/l10n/bundle.l10n.zh-tw.json b/pre-built/l10n/bundle.l10n.zh-tw.json similarity index 100% rename from l10n/bundle.l10n.zh-tw.json rename to pre-built/l10n/bundle.l10n.zh-tw.json diff --git a/telemetry.json b/telemetry.json deleted file mode 100644 index 4a5c7e34..00000000 --- a/telemetry.json +++ /dev/null @@ -1 +0,0 @@ -{"events":{"ms-python.debugpydebug.success_activation":{"codeloadingtime":{"classification":"SystemMetaData","purpose":"FeatureInsight","owner":"eleanorjboyd"},"errorname":{"classification":"CallstackOrException","purpose":"PerformanceAndHealth","owner":"eleanorjboyd"}},"ms-python.debugpydebug_in_terminal_button":{"owner":"eleanorjboyd"},"ms-python.debugpydebug_using_launch_config_button":{"owner":"eleanorjboyd"},"ms-python.debugpydebug_adapter.using_wheels_path":{"usingwheels":{"classification":"SystemMetaData","purpose":"FeatureInsight","owner":"eleanorjboyd"}},"ms-python.debugpydebug_session.start":{"duration":{"classification":"SystemMetaData","purpose":"FeatureInsight","owner":"eleanorjboyd"},"trigger":{"classification":"SystemMetaData","purpose":"PerformanceAndHealth","owner":"eleanorjboyd"},"console":{"classification":"SystemMetaData","purpose":"PerformanceAndHealth","owner":"eleanorjboyd"}},"ms-python.debugpydebug_session.error":{"duration":{"classification":"SystemMetaData","purpose":"FeatureInsight","owner":"eleanorjboyd"},"trigger":{"classification":"SystemMetaData","purpose":"PerformanceAndHealth","owner":"eleanorjboyd"},"console":{"classification":"SystemMetaData","purpose":"PerformanceAndHealth","owner":"eleanorjboyd"}},"ms-python.debugpydebug_session.stop":{"duration":{"classification":"SystemMetaData","purpose":"FeatureInsight","owner":"eleanorjboyd"},"trigger":{"classification":"SystemMetaData","purpose":"PerformanceAndHealth","owner":"eleanorjboyd"},"console":{"classification":"SystemMetaData","purpose":"PerformanceAndHealth","owner":"eleanorjboyd"}},"ms-python.debugpydebug_session.user_code_running":{"duration":{"classification":"SystemMetaData","purpose":"FeatureInsight","owner":"eleanorjboyd"},"trigger":{"classification":"SystemMetaData","purpose":"PerformanceAndHealth","owner":"eleanorjboyd"},"console":{"classification":"SystemMetaData","purpose":"PerformanceAndHealth","owner":"eleanorjboyd"}},"ms-python.debugpydebugger":{"trigger":{"classification":"SystemMetaData","purpose":"FeatureInsight","owner":"eleanorjboyd"},"console":{"classification":"SystemMetaData","purpose":"FeatureInsight","owner":"eleanorjboyd"},"hasenvvars":{"classification":"SystemMetaData","purpose":"FeatureInsight","owner":"eleanorjboyd"},"hasargs":{"classification":"SystemMetaData","purpose":"FeatureInsight","owner":"eleanorjboyd"},"django":{"classification":"SystemMetaData","purpose":"FeatureInsight","owner":"eleanorjboyd"},"fastapi":{"classification":"SystemMetaData","purpose":"FeatureInsight","owner":"eleanorjboyd"},"flask":{"classification":"SystemMetaData","purpose":"FeatureInsight","owner":"eleanorjboyd"},"jinja":{"classification":"SystemMetaData","purpose":"FeatureInsight","owner":"eleanorjboyd"},"islocalhost":{"classification":"SystemMetaData","purpose":"FeatureInsight","owner":"eleanorjboyd"},"ismodule":{"classification":"SystemMetaData","purpose":"FeatureInsight","owner":"eleanorjboyd"},"issudo":{"classification":"SystemMetaData","purpose":"FeatureInsight","owner":"eleanorjboyd"},"stoponentry":{"classification":"SystemMetaData","purpose":"FeatureInsight","owner":"eleanorjboyd"},"showreturnvalue":{"classification":"SystemMetaData","purpose":"FeatureInsight","owner":"eleanorjboyd"},"pyramid":{"classification":"SystemMetaData","purpose":"FeatureInsight","owner":"eleanorjboyd"},"subprocess":{"classification":"SystemMetaData","purpose":"FeatureInsight","owner":"eleanorjboyd"},"watson":{"classification":"SystemMetaData","purpose":"FeatureInsight","owner":"eleanorjboyd"},"pyspark":{"classification":"SystemMetaData","purpose":"FeatureInsight","owner":"eleanorjboyd"},"gevent":{"classification":"SystemMetaData","purpose":"FeatureInsight","owner":"eleanorjboyd"},"scrapy":{"classification":"SystemMetaData","purpose":"FeatureInsight","owner":"eleanorjboyd"}},"ms-python.debugpydebugger.attach_to_child_process":{"duration":{"classification":"SystemMetaData","purpose":"FeatureInsight","owner":"eleanorjboyd","isMeasurement":true}},"ms-python.debugpydebugger.attach_to_local_process":{"owner":"eleanorjboyd"},"ms-python.debugpydebugger.configuration.prompts":{"configurationtype":{"classification":"SystemMetaData","purpose":"FeatureInsight","owner":"eleanorjboyd"},"autodetecteddjangomanagepypath":{"classification":"SystemMetaData","purpose":"FeatureInsight","owner":"eleanorjboyd"},"autodetectedpyramidinipath":{"classification":"SystemMetaData","purpose":"FeatureInsight","owner":"eleanorjboyd"},"autodetectedfastapimainpypath":{"classification":"SystemMetaData","purpose":"FeatureInsight","owner":"eleanorjboyd"},"autodetectedflaskapppypath":{"classification":"SystemMetaData","purpose":"FeatureInsight","owner":"eleanorjboyd"},"manuallyenteredavalue":{"classification":"SystemMetaData","purpose":"FeatureInsight","owner":"eleanorjboyd"},"browsefilevalue":{"classification":"SystemMetaData","purpose":"FeatureInsight","owner":"eleanorjboyd"}},"ms-python.debugpydebugger.configuration.prompts.in.launch.json":{"owner":"eleanorjboyd"},"ms-python.debugpyenvfile_variable_substitution":{"owner":"karthiknadig"},"ms-python.debugpyuse_report_issue_command":{"owner":"eleanorjboyd"},"ms-python.debugpydebugger_dynamic_config":{"owner":"eleanorjboyd"},"ms-python.debugpyDEBUGGER_PYTHON_37_DEPRECATED":{"owner":"eleanorjboyd"},"ms-python.debugpyDEBUGGER_SHOW_PYTHON_INLINE_VALUES":{"owner":"eleanorjboyd"},"ms-python.debugpydeprecated_code_path_usage":{"codepath":{"classification":"SystemMetaData","purpose":"FeatureInsight","owner":"eleanorjboyd"}}},"commonProperties":{}} From 2b5b170b217983f38c56a597fb80b30665fbf27a Mon Sep 17 00:00:00 2001 From: bschnurr Date: Tue, 13 Jan 2026 18:56:04 -0800 Subject: [PATCH 52/59] publish job needs npm feed --- build/templates/publish-extension.yml | 5 +++ build/templates/publish.yml | 4 +-- build/templates/setup.yml | 52 ++++++++++++++++----------- 3 files changed, 38 insertions(+), 23 deletions(-) diff --git a/build/templates/publish-extension.yml b/build/templates/publish-extension.yml index a7d5ed46..163cb04d 100644 --- a/build/templates/publish-extension.yml +++ b/build/templates/publish-extension.yml @@ -165,6 +165,11 @@ jobs: type: releaseJob # This makes a job a release job isProduction: true # Indicates a production release steps: + - template: setup.yml + parameters: + installNode: true + installPython: false + - task: 1ES.DownloadPipelineArtifact@1 inputs: artifactName: extension diff --git a/build/templates/publish.yml b/build/templates/publish.yml index 66ac7f9f..53ad3041 100644 --- a/build/templates/publish.yml +++ b/build/templates/publish.yml @@ -103,11 +103,11 @@ steps: if ('${{ parameters.preRelease }}' -eq 'True') { Write-Host 'Publishing as pre-release' Write-Host "Executing: npx vsce publish --pat *** --packagePath $vsixPath --manifestPath $manifestPath --signaturePath $signaturePath --pre-release" - npx vsce publish --pat $aadToken --packagePath $vsixPath --manifestPath $manifestPath --signaturePath $signaturePath --pre-release + # npx vsce publish --pat $aadToken --packagePath $vsixPath --manifestPath $manifestPath --signaturePath $signaturePath --pre-release } else { Write-Host 'Publishing as stable release' Write-Host "Executing: npx vsce publish --pat *** --packagePath $vsixPath --manifestPath $manifestPath --signaturePath $signaturePath" - npx vsce publish --pat $aadToken --packagePath $vsixPath --manifestPath $manifestPath --signaturePath $signaturePath + # npx vsce publish --pat $aadToken --packagePath $vsixPath --manifestPath $manifestPath --signaturePath $signaturePath } if ($LASTEXITCODE -ne 0) { diff --git a/build/templates/setup.yml b/build/templates/setup.yml index 694218b0..01515e17 100644 --- a/build/templates/setup.yml +++ b/build/templates/setup.yml @@ -1,26 +1,36 @@ -# DevDiv pipeline setup steps (no parameters) +# DevDiv pipeline setup steps +parameters: + - name: installNode + type: boolean + default: true + - name: installPython + type: boolean + default: true + steps: - - task: npmAuthenticate@0 - inputs: - workingFile: .npmrc + - ${{ if eq(parameters.installNode, true) }}: + - task: npmAuthenticate@0 + inputs: + workingFile: .npmrc - - script: npm config get registry - displayName: Verify NPM Registry + - script: npm config get registry + displayName: Verify NPM Registry - - task: NodeTool@0 - inputs: - versionSpec: '22.17.0' - checkLatest: true - displayName: Select Node 22 LTS + - task: NodeTool@0 + inputs: + versionSpec: '22.17.0' + checkLatest: true + displayName: Select Node 22 LTS - - task: PipAuthenticate@1 - displayName: 'Pip Authenticate' - inputs: - artifactFeeds: 'DevDiv/debugpy' + - ${{ if eq(parameters.installPython, true) }}: + - task: PipAuthenticate@1 + displayName: 'Pip Authenticate' + inputs: + artifactFeeds: 'DevDiv/debugpy' - - task: UsePythonVersion@0 - inputs: - versionSpec: '3.9' # note Install Python dependencies step below relies on Python 3.9 - addToPath: true - architecture: 'x64' - displayName: Select Python version + - task: UsePythonVersion@0 + inputs: + versionSpec: '3.9' # note Install Python dependencies step below relies on Python 3.9 + addToPath: true + architecture: 'x64' + displayName: Select Python version From 6dad4fa6bfda48d4d8cf8d8b98b3c5717d33539b Mon Sep 17 00:00:00 2001 From: bschnurr Date: Wed, 14 Jan 2026 00:13:30 -0800 Subject: [PATCH 53/59] add missing .npmrc file using checkout --- build/templates/publish-extension.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/build/templates/publish-extension.yml b/build/templates/publish-extension.yml index 163cb04d..986538f1 100644 --- a/build/templates/publish-extension.yml +++ b/build/templates/publish-extension.yml @@ -165,6 +165,10 @@ jobs: type: releaseJob # This makes a job a release job isProduction: true # Indicates a production release steps: + - checkout: self + fetchDepth: 1 + fetchTags: false + - template: setup.yml parameters: installNode: true From 462d01763c84b2ba34ca639748cd82d7fc2516d1 Mon Sep 17 00:00:00 2001 From: bschnurr Date: Wed, 14 Jan 2026 00:19:01 -0800 Subject: [PATCH 54/59] add .npmrc file if one doesn't exist --- build/templates/publish-extension.yml | 3 --- build/templates/setup.yml | 14 ++++++++++++++ 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/build/templates/publish-extension.yml b/build/templates/publish-extension.yml index 986538f1..23b11e50 100644 --- a/build/templates/publish-extension.yml +++ b/build/templates/publish-extension.yml @@ -165,9 +165,6 @@ jobs: type: releaseJob # This makes a job a release job isProduction: true # Indicates a production release steps: - - checkout: self - fetchDepth: 1 - fetchTags: false - template: setup.yml parameters: diff --git a/build/templates/setup.yml b/build/templates/setup.yml index 01515e17..4cd0aa80 100644 --- a/build/templates/setup.yml +++ b/build/templates/setup.yml @@ -9,6 +9,20 @@ parameters: steps: - ${{ if eq(parameters.installNode, true) }}: + - pwsh: | + if (-not (Test-Path '.npmrc')) { + Write-Host 'No .npmrc found, creating one with public npm registry' + @" + # Force public npm registry to avoid CI auth (E401) when no token is provided + registry=https://registry.npmjs.org/ + # Do not require auth for public installs + always-auth=false + "@ | Out-File -FilePath '.npmrc' -Encoding utf8 + } else { + Write-Host '.npmrc already exists' + } + displayName: Ensure .npmrc exists + - task: npmAuthenticate@0 inputs: workingFile: .npmrc From 344513dc020405ce1c23684cbff85922f1b84fbc Mon Sep 17 00:00:00 2001 From: bschnurr Date: Wed, 14 Jan 2026 09:33:59 -0800 Subject: [PATCH 55/59] uncomment vsce publish --- build/templates/publish.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build/templates/publish.yml b/build/templates/publish.yml index 53ad3041..66ac7f9f 100644 --- a/build/templates/publish.yml +++ b/build/templates/publish.yml @@ -103,11 +103,11 @@ steps: if ('${{ parameters.preRelease }}' -eq 'True') { Write-Host 'Publishing as pre-release' Write-Host "Executing: npx vsce publish --pat *** --packagePath $vsixPath --manifestPath $manifestPath --signaturePath $signaturePath --pre-release" - # npx vsce publish --pat $aadToken --packagePath $vsixPath --manifestPath $manifestPath --signaturePath $signaturePath --pre-release + npx vsce publish --pat $aadToken --packagePath $vsixPath --manifestPath $manifestPath --signaturePath $signaturePath --pre-release } else { Write-Host 'Publishing as stable release' Write-Host "Executing: npx vsce publish --pat *** --packagePath $vsixPath --manifestPath $manifestPath --signaturePath $signaturePath" - # npx vsce publish --pat $aadToken --packagePath $vsixPath --manifestPath $manifestPath --signaturePath $signaturePath + npx vsce publish --pat $aadToken --packagePath $vsixPath --manifestPath $manifestPath --signaturePath $signaturePath } if ($LASTEXITCODE -ne 0) { From c59e9023c9a8647a9947f1a3b09bba13235f7170 Mon Sep 17 00:00:00 2001 From: Bill Schnurr Date: Wed, 14 Jan 2026 10:00:18 -0800 Subject: [PATCH 56/59] Update build/templates/package.yml Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- build/templates/package.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build/templates/package.yml b/build/templates/package.yml index 32a55438..1ed988eb 100644 --- a/build/templates/package.yml +++ b/build/templates/package.yml @@ -74,7 +74,7 @@ jobs: steps: - template: setup.yml@self - - ${{ if and(eq(parameters.isPreRelease, 'true'), eq(parameters.standardizedVersioning, 'true')) }}: + - ${{ if and(eq(parameters.isPreRelease, true), eq(parameters.standardizedVersioning, true)) }}: - template: modify-extension-version.yml@self parameters: workingDirectory: ${{ parameters.workingDirectory }} From 578aafac99f1c571797d5eff454deedaf8500235 Mon Sep 17 00:00:00 2001 From: bschnurr Date: Wed, 14 Jan 2026 10:04:10 -0800 Subject: [PATCH 57/59] disable publish once more --- build/templates/publish.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build/templates/publish.yml b/build/templates/publish.yml index 66ac7f9f..53ad3041 100644 --- a/build/templates/publish.yml +++ b/build/templates/publish.yml @@ -103,11 +103,11 @@ steps: if ('${{ parameters.preRelease }}' -eq 'True') { Write-Host 'Publishing as pre-release' Write-Host "Executing: npx vsce publish --pat *** --packagePath $vsixPath --manifestPath $manifestPath --signaturePath $signaturePath --pre-release" - npx vsce publish --pat $aadToken --packagePath $vsixPath --manifestPath $manifestPath --signaturePath $signaturePath --pre-release + # npx vsce publish --pat $aadToken --packagePath $vsixPath --manifestPath $manifestPath --signaturePath $signaturePath --pre-release } else { Write-Host 'Publishing as stable release' Write-Host "Executing: npx vsce publish --pat *** --packagePath $vsixPath --manifestPath $manifestPath --signaturePath $signaturePath" - npx vsce publish --pat $aadToken --packagePath $vsixPath --manifestPath $manifestPath --signaturePath $signaturePath + # npx vsce publish --pat $aadToken --packagePath $vsixPath --manifestPath $manifestPath --signaturePath $signaturePath } if ($LASTEXITCODE -ne 0) { From a0c16fca0ad8ca608d5b3db9838f5c7f97282fff Mon Sep 17 00:00:00 2001 From: bschnurr Date: Wed, 14 Jan 2026 10:47:15 -0800 Subject: [PATCH 58/59] fix pretteier --- build/templates/publish-extension.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/build/templates/publish-extension.yml b/build/templates/publish-extension.yml index 23b11e50..163cb04d 100644 --- a/build/templates/publish-extension.yml +++ b/build/templates/publish-extension.yml @@ -165,7 +165,6 @@ jobs: type: releaseJob # This makes a job a release job isProduction: true # Indicates a production release steps: - - template: setup.yml parameters: installNode: true From cc60007d77f96e2d2d0eb97d6b1ebf84a5c2211e Mon Sep 17 00:00:00 2001 From: bschnurr Date: Wed, 14 Jan 2026 11:10:12 -0800 Subject: [PATCH 59/59] re-enable vsce publish --- build/templates/publish.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build/templates/publish.yml b/build/templates/publish.yml index 53ad3041..66ac7f9f 100644 --- a/build/templates/publish.yml +++ b/build/templates/publish.yml @@ -103,11 +103,11 @@ steps: if ('${{ parameters.preRelease }}' -eq 'True') { Write-Host 'Publishing as pre-release' Write-Host "Executing: npx vsce publish --pat *** --packagePath $vsixPath --manifestPath $manifestPath --signaturePath $signaturePath --pre-release" - # npx vsce publish --pat $aadToken --packagePath $vsixPath --manifestPath $manifestPath --signaturePath $signaturePath --pre-release + npx vsce publish --pat $aadToken --packagePath $vsixPath --manifestPath $manifestPath --signaturePath $signaturePath --pre-release } else { Write-Host 'Publishing as stable release' Write-Host "Executing: npx vsce publish --pat *** --packagePath $vsixPath --manifestPath $manifestPath --signaturePath $signaturePath" - # npx vsce publish --pat $aadToken --packagePath $vsixPath --manifestPath $manifestPath --signaturePath $signaturePath + npx vsce publish --pat $aadToken --packagePath $vsixPath --manifestPath $manifestPath --signaturePath $signaturePath } if ($LASTEXITCODE -ne 0) {