modules/core/Test-Prerequisites.ps1
|
param( [string]$FrontendMode, # "ReactTS" | "ReactJS" | "NextJS" [string]$Language = 'tr' ) $ModulesDir = Split-Path -Parent $MyInvocation.MyCommand.Path . "$ModulesDir\Utils.ps1" . "$ModulesDir\Get-Locale.ps1" $L = Get-Locale -Language $Language $ManifestPath = Join-Path (Split-Path $ModulesDir) "generator.manifest.json" function Test-Cmd($cmd) { $null -ne (Get-Command $cmd -ErrorAction SilentlyContinue) } function Refresh-Path { $machine = [System.Environment]::GetEnvironmentVariable("PATH", "Machine") $user = [System.Environment]::GetEnvironmentVariable("PATH", "User") $env:PATH = "$machine;$user" } function Install-WithWinget($packageId, $displayName) { if (-not (Test-Cmd "winget")) { Write-Err ($L.prereqWingetMissing -f $displayName) "E007" exit 1 } Write-Warn ($L.prereqInstalling -f $displayName) winget install $packageId --silent --accept-source-agreements --accept-package-agreements 2>&1 | Out-Null Refresh-Path } if ($script:PrereqChecked) { return } $Global:PrereqVersions = @{ Dotnet = "" Node = "" Npm = "" Docker = "" } Write-Host "" Write-Host $L.prereqChecking -ForegroundColor White Write-Host "----------------------------------------------" -ForegroundColor DarkGray # --- .NET SDK -------------------------------------------- if (Test-Cmd "dotnet") { $v = dotnet --version 2>&1 $Global:PrereqVersions.Dotnet = $v $minDotnet = Get-MinVer "minDotnetVersion" "8.0" if ([version]$v -lt [version]$minDotnet) { Write-Err ($L.prereqDotnetLow -f $minDotnet, $v) "E004" exit 1 } Write-Ok ".NET SDK : $v" } else { Install-WithWinget "Microsoft.DotNet.SDK.8" ".NET SDK 8" Refresh-Path if (Test-Cmd "dotnet") { $v = dotnet --version 2>&1 $Global:PrereqVersions.Dotnet = $v Write-Ok ".NET SDK : $v$($L.prereqFreshInstall)" } else { Write-Err $L.prereqDotnetMissing exit 1 } } # --- Node.js + npm (sadece frontend icin) ---------------- $needsNode = $FrontendMode -in @("ReactTS","ReactJS","NextJS") if ($needsNode) { if (Test-Cmd "node") { $nodeV = (node --version 2>&1).Trim().TrimStart('v') $npmV = npm --version 2>&1 $Global:PrereqVersions.Node = "v$nodeV" $Global:PrereqVersions.Npm = $npmV $minNode = Get-MinVer "minNodeVersion" "18.0" if ([version]$nodeV -lt [version]$minNode) { Write-Err ($L.prereqNodeLow -f $minNode, $nodeV) "E005" exit 1 } Write-Ok "Node.js : v$nodeV" Write-Ok "npm : $npmV" } else { Install-WithWinget "OpenJS.NodeJS.LTS" "Node.js LTS" Refresh-Path if (Test-Cmd "node") { $nodeV = node --version 2>&1 $npmV = npm --version 2>&1 $Global:PrereqVersions.Node = $nodeV $Global:PrereqVersions.Npm = $npmV Write-Ok "Node.js : $nodeV$($L.prereqFreshInstall)" Write-Ok "npm : $npmV" } else { Write-Err $L.prereqNodeMissing exit 1 } } } # --- Docker (opsiyonel) ----------------------------------- if (Test-Cmd "docker") { $dockerV = docker --version 2>&1 $Global:PrereqVersions.Docker = $dockerV Write-Ok "Docker : $dockerV" } else { Write-Warn $L.prereqDockerMissing Write-Warn $L.prereqDockerUrl } Write-Host "----------------------------------------------" -ForegroundColor DarkGray Write-Host "" $script:PrereqChecked = $true |