#!/usr/bin/env pwsh # migrate-types.ps1 - 类型导入迁移脚本 # 用法: ./scripts/migrate-types.ps1 [-DryRun] param( [switch]$DryRun ) $ErrorActionPreference = "Stop" $ProjectRoot = Split-Path -Parent $PSScriptRoot Write-Host "========================================" -ForegroundColor Cyan Write-Host " Type Import Migration Script" -ForegroundColor Cyan Write-Host "========================================" -ForegroundColor Cyan Write-Host "" if ($DryRun) { Write-Host "🔍 DRY RUN MODE - No files will be modified" -ForegroundColor Yellow Write-Host "" } # 定义迁移规则 $MigrationRules = @( @{ Pattern = "from ['`"]\.\.\/models\/User['`"]" Replacement = "from '@shared/types'" Description = "User model import" }, @{ Pattern = "from ['`"]\.\.\/models\/Product['`"]" Replacement = "from '@shared/types'" Description = "Product model import" }, @{ Pattern = "from ['`"]\.\.\/models\/Order['`"]" Replacement = "from '@shared/types'" Description = "Order model import" }, @{ Pattern = "from ['`"]\.\.\/types\/user['`"]" Replacement = "from '@shared/types'" Description = "User type import (frontend)" }, @{ Pattern = "from ['`"]\.\.\/types\/product['`"]" Replacement = "from '@shared/types'" Description = "Product type import (frontend)" }, @{ Pattern = "from ['`"]\.\.\/types\/order['`"]" Replacement = "from '@shared/types'" Description = "Order type import (frontend)" } ) $TotalFiles = 0 $TotalChanges = 0 # 迁移后端文件 Write-Host "[1/2] Migrating server files..." -ForegroundColor Yellow $ServerFiles = Get-ChildItem -Path "$ProjectRoot/server/src" -Include "*.ts" -Recurse foreach ($File in $ServerFiles) { $Content = Get-Content $File.FullName -Raw $OriginalContent = $Content $FileChanged = $false foreach ($Rule in $MigrationRules) { if ($Content -match $Rule.Pattern) { $Content = $Content -replace $Rule.Pattern, $Rule.Replacement Write-Host " 📝 $($File.Name): $($Rule.Description)" -ForegroundColor Gray $FileChanged = $true } } if ($FileChanged) { $TotalFiles++ $TotalChanges++ if (-not $DryRun) { Set-Content -Path $File.FullName -Value $Content -NoNewline } } } # 迁移前端文件 Write-Host "[2/2] Migrating dashboard files..." -ForegroundColor Yellow $DashboardFiles = Get-ChildItem -Path "$ProjectRoot/dashboard/src" -Include "*.ts", "*.tsx" -Recurse foreach ($File in $DashboardFiles) { $Content = Get-Content $File.FullName -Raw $OriginalContent = $Content $FileChanged = $false foreach ($Rule in $MigrationRules) { if ($Content -match $Rule.Pattern) { $Content = $Content -replace $Rule.Pattern, $Rule.Replacement Write-Host " 📝 $($File.Name): $($Rule.Description)" -ForegroundColor Gray $FileChanged = $true } } if ($FileChanged) { $TotalFiles++ $TotalChanges++ if (-not $DryRun) { Set-Content -Path $File.FullName -Value $Content -NoNewline } } } Write-Host "" Write-Host "========================================" -ForegroundColor Cyan Write-Host " Migration Summary" -ForegroundColor Cyan Write-Host "========================================" -ForegroundColor Cyan Write-Host " Files processed: $TotalFiles" -ForegroundColor White Write-Host " Total changes: $TotalChanges" -ForegroundColor White if ($DryRun) { Write-Host "" Write-Host " This was a DRY RUN. Run without -DryRun to apply changes." -ForegroundColor Yellow } else { Write-Host "" Write-Host " ✅ Migration complete!" -ForegroundColor Green Write-Host " Please run: ./scripts/check-types.ps1" -ForegroundColor Yellow } Write-Host "========================================" -ForegroundColor Cyan