Param(
[Parameter(ValueFromRemainingArguments=$true)]
[string[]]$Args
)
function Get-LatestDir($root) {
if (-not (Test-Path $root)) { return $null }
Get-ChildItem -Path $root -Directory -ErrorAction SilentlyContinue |
Where-Object { $_.Name -match '^[0-9]' } |
Sort-Object {[version]($_.Name)} -Descending |
Select-Object -First 1 -ExpandProperty FullName
}
# Windows Kits (Program Files (x86))
$kitsRoot = "${env:ProgramFiles(x86)}\Windows Kits\10\bin"
$kitsLatest = Get-LatestDir $kitsRoot
$kitsBinX64 = if ($kitsLatest) { Join-Path $kitsLatest 'x64' } else { $null }
# MSVC (search common Program Files locations)
$msvcDirs = @()
$possibleRoots = @(
"${env:ProgramFiles}\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC",
"${env:ProgramFiles(x86)}\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC"
)
foreach ($pr in $possibleRoots) {
if (Test-Path $pr) {
$msvcDirs += Get-ChildItem -Path $pr -Directory -ErrorAction SilentlyContinue | Select-Object -ExpandProperty FullName
}
}
$msvcLatest = $null
if ($msvcDirs.Count -gt 0) {
$msvcLatest = $msvcDirs | Sort-Object { [version]((Split-Path $_ -Leaf)) } -Descending | Select-Object -First 1
}
$msvcBin = if ($msvcLatest) { Join-Path $msvcLatest 'bin\Hostx64\x64' } else { $null }
$added = @()
if ($msvcBin -and (Test-Path $msvcBin)) { $env:PATH = $msvcBin + ';' + $env:PATH; $added += $msvcBin }
if ($kitsBinX64 -and (Test-Path $kitsBinX64)) { $env:PATH = $kitsBinX64 + ';' + $env:PATH; $added += $kitsBinX64 }
Write-Host "Prepended to PATH:" -ForegroundColor Cyan
if ($added.Count -eq 0) { Write-Host " (no toolchain bins found; building with current PATH)" -ForegroundColor Yellow }
foreach ($p in $added) { Write-Host " - $p" }
# Execute prepare step then build (same sequence as existing package.json 'build')
try {
& node scripts/prepare-resources.cjs
if ($LASTEXITCODE -ne 0) { throw 'prepare-resources.cjs failed' }
} catch {
Write-Error "prepare-resources.cjs failed: $_"
exit 1
}
if (Get-Command bun -ErrorAction SilentlyContinue) {
& bun run build @Args
exit $LASTEXITCODE
} else {
& tauri build --config src/backend/tauri.conf.json @Args
exit $LASTEXITCODE
}