# ============================================================================== # LAUNCHER.PS1 - Обработка файлов для Node.js (Windows PowerShell) # Использует: Node.js + strip-comments для безопасной очистки # Поддерживает: .js, .css, .ejs # ВАЖНО: Файл создан с кодировкой UTF-8 BOM # ============================================================================== # --- Настройка путей --- $ScriptDirectory = Split-Path -Parent $MyInvocation.MyCommand.Path $DevDirectory = Join-Path $ScriptDirectory "!DEV" $InputDirectory = Join-Path $ScriptDirectory "!DEV\input" $OutputDirectory = Join-Path $ScriptDirectory "!DEV\output" $CombinedFile = Join-Path $OutputDirectory "Combined_All_Files.txt" $CleanerScript = Join-Path $ScriptDirectory "cleaner.js" # --- Настройки --- $Global:RemoveComments = $true $SupportedExts = @('.js', '.css', '.ejs') # --- Цвета --- $C_CYAN = [ConsoleColor]::Cyan; $C_YELLOW = [ConsoleColor]::Yellow $C_GREEN = [ConsoleColor]::Green; $C_RED = [ConsoleColor]::Red $C_WHITE = [ConsoleColor]::White; $C_GRAY = [ConsoleColor]::DarkGray $C_MAGENTA = [ConsoleColor]::Magenta function Write-Color { param([string]$Text, $Color = $C_WHITE) Write-Host $Text -ForegroundColor $Color } # --- Проверка зависимостей --- function Check-Deps { if (-not (Get-Command node -ErrorAction SilentlyContinue)) { Write-Color "[ERR] Node.js не установлен!" $C_RED return $false } if (-not (Test-Path $CleanerScript)) { Write-Color "[ERR] Не найден: cleaner.js" $C_RED return $false } return $true } # --- Создание папок --- function Setup-Folders { if (-not (Test-Path $DevDirectory)) { New-Item -ItemType Directory -Force -Path $InputDirectory,$OutputDirectory | Out-Null Write-Color "[OK] Папка !DEV создана" $C_GREEN } else { if (-not (Test-Path $InputDirectory)) { New-Item -ItemType Directory -Force -Path $InputDirectory | Out-Null } if (-not (Test-Path $OutputDirectory)) { New-Item -ItemType Directory -Force -Path $OutputDirectory | Out-Null } } } # --- Очистка комментариев через Node.js --- function Clean-AllComments { Write-Color "=== ОЧИСТКА КОММЕНТАРИЕВ (.js/.css/.ejs) ===" $C_CYAN Write-Color "Режим: $(if ($Global:RemoveComments) { 'ВКЛ' } else { 'ВЫКЛ' })" $C_GRAY Write-Host "" if (-not $Global:RemoveComments) { Write-Color "Очистка отключена" $C_YELLOW; Write-Host ""; return } if (-not (Check-Deps)) { return } if (-not (Test-Path $InputDirectory)) { Write-Color "[ERR] Папка не найдена" $C_RED; return } $result = & node $CleanerScript dir $InputDirectory 2>&1 | Out-String Write-Host $result Write-Color "[OK] Очистка завершена" $C_GREEN Write-Host "" } # --- Конвертация в .txt --- function Convert-ToTxt { Write-Color "=== КОНВЕРТАЦИЯ В .TXT ===" $C_CYAN; Write-Host "" if (-not (Test-Path $InputDirectory)) { Write-Color "[ERR] Папка не найдена" $C_RED; return } $Count = 0 Get-ChildItem -Path $InputDirectory -File -Recurse -ErrorAction SilentlyContinue | Where-Object { $SupportedExts -contains $_.Extension -and $_.Extension -ne '.txt' } | ForEach-Object { $NewName = "$($_.BaseName).txt" try { Rename-Item -Path $_.FullName -NewName $NewName -Force Write-Color "[OK] $($_.Name)" $C_GREEN $Count++ } catch { Write-Color "[ERR] $($_.Name)" $C_RED } } Write-Color "Конвертировано: $Count" $C_WHITE; Write-Host "" } # --- Объединение файлов --- function Combine-Files { Write-Color "=== ОБЪЕДИНЕНИЕ ФАЙЛОВ ===" $C_CYAN; Write-Host "" if (-not (Test-Path $InputDirectory)) { Write-Color "[ERR] Папка не найдена" $C_RED; return } $TxtFiles = Get-ChildItem -Path $InputDirectory -Filter "*.txt" -File -Recurse -ErrorAction SilentlyContinue if (-not $TxtFiles) { Write-Color "[ERR] Нет .txt файлов" $C_RED; return } Write-Color "Найдено: $($TxtFiles.Count)" $C_WHITE; Write-Host "" if (-not (Test-Path $OutputDirectory)) { New-Item -ItemType Directory -Force -Path $OutputDirectory | Out-Null } $Header = @( "ОБЪЕДИНЁННЫЙ ФАЙЛ (Node.js)", "Создан: $(Get-Date -Format 'yyyy-MM-dd HH:mm:ss')", "Источник: $InputDirectory", "Файлов: $($TxtFiles.Count)", "Комментарии: $(if ($Global:RemoveComments) { 'УДАЛЕНЫ' } else { 'ОСТАВЛЕНЫ' })", "" ) $Header | Set-Content -Path $CombinedFile -Encoding UTF8 foreach ($File in $TxtFiles | Sort-Object FullName) { try { ("=" * 80) | Add-Content -Path $CombinedFile -Encoding UTF8 "ФАЙЛ: $($File.FullName)" | Add-Content -Path $CombinedFile -Encoding UTF8 ("=" * 80) | Add-Content -Path $CombinedFile -Encoding UTF8 $Content = Get-Content -Path $File.FullName -Encoding UTF8 | Where-Object { $_ -match '\S' } if ($Content) { $Content | Add-Content -Path $CombinedFile -Encoding UTF8 } "" | Add-Content -Path $CombinedFile -Encoding UTF8 Write-Color "[OK] $($File.Name)" $C_GREEN } catch { Write-Color "[ERR] $($File.Name)" $C_RED } } if (Test-Path $CombinedFile) { $SizeKB = [math]::Round((Get-Item $CombinedFile).Length / 1KB, 2) Write-Host ""; Write-Color "[OK] Создан: $CombinedFile ($SizeKB KB)" $C_GREEN } Write-Host "" } # --- Переключить очистку --- function Toggle-Comments { Write-Color "=== НАСТРОЙКА ===" $C_CYAN; Write-Host "" $Global:RemoveComments = -not $Global:RemoveComments $Status = if ($Global:RemoveComments) { "ВКЛ" } else { "ВЫКЛ" } $Color = if ($Global:RemoveComments) { $C_GREEN } else { $C_YELLOW } Write-Color "Очистка комментариев: $Status" $Color Write-Host "" } # --- Сброс проекта --- function Clean-All { Write-Color "=== СБРОС ПРОЕКТА ===" $C_RED; Write-Host "" if (Test-Path $DevDirectory) { Remove-Item -Path $DevDirectory -Recurse -Force Write-Color "[OK] !DEV удалена" $C_GREEN } Setup-Folders Write-Color "[OK] Структура восстановлена" $C_GREEN Write-Host "" } # --- Открыть папку --- function Open-Folder { if (Test-Path $DevDirectory) { Start-Process "explorer.exe" $DevDirectory Write-Color "[OK] Открыта !DEV" $C_GREEN } else { Write-Color "[ERR] !DEV не найдена" $C_RED } Write-Host "" } # --- Показать структуру --- function Show-Structure { Write-Color "=== СТРУКТУРА ===" $C_CYAN; Write-Host "" Write-Color "Корень: $ScriptDirectory" $C_WHITE if (Test-Path $DevDirectory) { Write-Color "!DEV/" $C_YELLOW $In = (Get-ChildItem $InputDirectory -File -Recurse -ErrorAction SilentlyContinue).Count $Out = (Get-ChildItem $OutputDirectory -File -Recurse -ErrorAction SilentlyContinue).Count Write-Color " input/ ($In файлов)" $C_GREEN Write-Color " output/ ($Out файлов)" $C_GREEN } Write-Color "Поддержка: $($SupportedExts -join ', ')" $C_CYAN $Status = if ($Global:RemoveComments) { "ВКЛ" } else { "ВЫКЛ" } $Color = if ($Global:RemoveComments) { $C_GREEN } else { $C_RED } Write-Color "Очистка: $Status" $Color Write-Host "" } # --- Заголовок и меню --- function Show-Header { Clear-Host Write-Color "==================================================" $C_CYAN Write-Color " ОБРАБОТКА ФАЙЛОВ (Node.js + PowerShell)" $C_CYAN Write-Color "==================================================" $C_CYAN Write-Color "Скрипт: $ScriptDirectory\launcher.ps1" $C_GRAY Write-Host "" } function Show-Menu { Write-Color "Действия:" $C_YELLOW Write-Color "1. [ОЧИСТКА] Удалить комментарии (.js/.css/.ejs)" $C_MAGENTA Write-Color "2. [КОНВЕРТ] Конвертировать в .txt" $C_CYAN Write-Color "3. [ОБЪЕДИН] Объединить .txt в один файл" $C_CYAN Write-Color "4. [ВСЁ] Очистка -> Конвертация -> Объединение" $C_GREEN Write-Color "5. [НАСТР] Очистка $(if ($Global:RemoveComments) { '[ВКЛ]' } else { '[ВЫКЛ]' })" $C_WHITE Write-Color "6. [ПАПКА] Открыть !DEV" $C_MAGENTA Write-Color "7. [ИНФО] Показать структуру" $C_WHITE Write-Color "8. [СБРОС] Полная очистка" $C_RED Write-Color "0. [ВЫХОД] Завершить" $C_RED Write-Host "" } function Wait-ForUser { Write-Host "" Write-Color "Нажмите любую клавишу..." $C_GRAY $null = $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown") } # ============================================================================== # === ЗАПУСК === # ============================================================================== Setup-Folders do { Show-Header Show-Menu $Choice = Read-Host "Выберите (0-8)" Write-Host "" switch ($Choice) { "1" { Clean-AllComments; Wait-ForUser } "2" { Convert-ToTxt; Wait-ForUser } "3" { Combine-Files; Wait-ForUser } "4" { Clean-AllComments; Convert-ToTxt; Combine-Files; Wait-ForUser } "5" { Toggle-Comments; Wait-ForUser } "6" { Open-Folder; Wait-ForUser } "7" { Show-Structure; Wait-ForUser } "8" { Clean-All; Wait-ForUser } "0" { Write-Color "Выход..." $C_YELLOW; exit } default { Write-Color "Неверный выбор!" $C_RED; Start-Sleep -Seconds 2 } } } while ($true)