CarrotStash/CarrotStash.ps1

91 lines
2.5 KiB
PowerShell

#////////// PROJECT FILE SEPARATION LINE ////////// CODE AFTER THIS LINE ARE FROM: <ProjectRoot>/CarrotStash.ps1
# ------------------------------------------
# SYMBOLS
# ------------------------------------------
$Symbol_Pending = [char]0x23FA
$Symbol_Working = [char]0x23F3
$Symbol_Completed = [char]0x2705
# ------------------------------------------
# STEP FUNCTION
# ------------------------------------------
function Run-Step {
param (
[string]$Label,
[scriptblock]$Action
)
Write-Host "$Symbol_Working $Label..."
try {
& $Action
Write-Host "$Symbol_Completed $Label`n"
}
catch {
Write-Error "❌ Failed: $Label"
exit 1
}
}
# ------------------------------------------
# CONFIG
# ------------------------------------------
$ProjectRoot = $PSScriptRoot
$NodePath = Join-Path $ProjectRoot "NodeJS\node.exe"
$NpmCliJs = Join-Path $ProjectRoot "NodeJS\node_modules\npm\bin\npm-cli.js"
$NodeDir = Split-Path $NodePath
$PackageJsonPath = Join-Path $ProjectRoot "package.json"
$ViteConfigPath = Join-Path $ProjectRoot "vite.config.mjs"
# ------------------------------------------
# VALIDATION
# ------------------------------------------
if (-not (Test-Path $NodePath)) {
Write-Error "❌ NodeJS not found in: $NodePath"
exit 1
}
if (-not (Test-Path $NpmCliJs)) {
Write-Error "❌ npm-cli.js not found in: $NpmCliJs"
exit 1
}
if (-not (Test-Path $PackageJsonPath)) {
Write-Error "❌ package.json not found in project root."
exit 1
}
if (-not (Test-Path $ViteConfigPath)) {
Write-Error "❌ vite.config.mjs not found in project root."
exit 1
}
# ------------------------------------------
# PATCH ENVIRONMENT PATH
# ------------------------------------------
$env:PATH = "$NodeDir;$env:PATH"
# ------------------------------------------
# FUNCTION: Run-Npm
# ------------------------------------------
function Run-Npm {
param (
[Parameter(ValueFromRemainingArguments = $true)]
[string[]]$Args
)
Write-Host "📦 Running: $NodePath $NpmCliJs $($Args -join ' ')" -ForegroundColor DarkGray
& $NodePath $NpmCliJs @Args
}
# ------------------------------------------
# EXECUTION
# ------------------------------------------
Run-Step "Installing project dependencies from package.json" {
Run-Npm @("install")
}
# ------------------------------------------
# Launch App
# ------------------------------------------
Write-Host "`n🎉 CarrotStash setup complete!" -ForegroundColor Green
& $NodePath $NpmCliJs exec vite