mirror of
https://github.com/Raphire/Win11Debloat.git
synced 2026-08-23 08:02:07 +00:00
Add comprehensive test suite, fix minor issues, rename function and file names to match approved verbs (#708)
This commit is contained in:
@@ -1,10 +1,10 @@
|
||||
# Returns a validated list of apps based on the provided appsList and the supported apps from Apps.json
|
||||
function ValidateAppslist {
|
||||
function Get-ValidatedAppList {
|
||||
param (
|
||||
$appsList
|
||||
)
|
||||
|
||||
$supportedAppsList = @(LoadAppsDetailsFromJson | ForEach-Object { @($_.AppId) }) | ForEach-Object { $_.Trim() } | Where-Object { $_.Length -gt 0 }
|
||||
$supportedAppsList = @(Import-AppDetailsFromJson | ForEach-Object { @($_.AppId) }) | ForEach-Object { $_.Trim() } | Where-Object { $_.Length -gt 0 }
|
||||
$validatedAppsList = @()
|
||||
|
||||
# Validate provided appsList against supportedAppsList
|
||||
+31
-4
@@ -1,5 +1,27 @@
|
||||
# Read Apps.json and return list of app objects with optional filtering
|
||||
function LoadAppsDetailsFromJson {
|
||||
<#
|
||||
.SYNOPSIS
|
||||
Loads application details from Apps.json.
|
||||
|
||||
.DESCRIPTION
|
||||
Reads the application definitions from Apps.json, optionally filters the
|
||||
results to installed applications, and returns normalized app objects for
|
||||
display and selection.
|
||||
|
||||
.PARAMETER OnlyInstalled
|
||||
Filters the results to applications detected through Appx or the supplied
|
||||
winget installation list.
|
||||
|
||||
.PARAMETER InstalledList
|
||||
A pre-fetched winget installation list used when filtering installed apps.
|
||||
|
||||
.PARAMETER InitialCheckedFromJson
|
||||
Sets each returned app's IsChecked value from its SelectedByDefault setting.
|
||||
|
||||
.OUTPUTS
|
||||
System.Management.Automation.PSCustomObject[]
|
||||
Application detail objects containing display, selection, and removal data.
|
||||
#>
|
||||
function Import-AppDetailsFromJson {
|
||||
param (
|
||||
[switch]$OnlyInstalled,
|
||||
[object[]]$InstalledList = $null,
|
||||
@@ -17,8 +39,13 @@ function LoadAppsDetailsFromJson {
|
||||
|
||||
foreach ($appData in $jsonContent.Apps) {
|
||||
# Handle AppId as array (could be single or multiple IDs)
|
||||
$appIdArray = if ($appData.AppId -is [array]) { $appData.AppId } else { @($appData.AppId) }
|
||||
$appIdArray = $appIdArray | ForEach-Object { $_.Trim() } | Where-Object { $_.length -gt 0 }
|
||||
$appIdArray = @(
|
||||
foreach ($rawAppId in @($appData.AppId)) {
|
||||
if ($rawAppId -isnot [string]) { continue }
|
||||
$normalizedAppId = $rawAppId.Trim()
|
||||
if ($normalizedAppId.Length -gt 0) { $normalizedAppId }
|
||||
}
|
||||
)
|
||||
if ($appIdArray.Count -eq 0) { continue }
|
||||
|
||||
if ($OnlyInstalled) {
|
||||
+5
-3
@@ -1,6 +1,8 @@
|
||||
# Read Apps.json and return the list of preset objects (Name + AppIds).
|
||||
# Returns an empty array if the file cannot be read or contains no presets.
|
||||
function LoadAppPresetsFromJson {
|
||||
<#
|
||||
.SYNOPSIS
|
||||
Returns preset names and application IDs from Apps.json, or an empty array when unavailable.
|
||||
#>
|
||||
function Import-AppPresetsFromJson {
|
||||
try {
|
||||
$jsonContent = Get-Content -Path $script:AppsListFilePath -Raw | ConvertFrom-Json
|
||||
}
|
||||
@@ -14,7 +14,7 @@
|
||||
System.String[]. An array of app ID strings, or an empty array if the
|
||||
file does not exist or contains no selected-by-default apps.
|
||||
#>
|
||||
function LoadAppsFromFile {
|
||||
function Import-AppsFromFile {
|
||||
param (
|
||||
$appsFilePath
|
||||
)
|
||||
@@ -41,6 +41,6 @@ function LoadAppsFromFile {
|
||||
}
|
||||
catch {
|
||||
Write-Error "Unable to read apps list from file: $appsFilePath"
|
||||
AwaitKeyToExit
|
||||
Wait-ForKeyPress
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,8 @@
|
||||
# Loads a JSON file from the specified path and returns the parsed object
|
||||
# Returns $null if the file doesn't exist or if parsing fails
|
||||
function LoadJsonFile {
|
||||
<#
|
||||
.SYNOPSIS
|
||||
Imports a JSON file, optionally validates its version, and returns $null on failure.
|
||||
#>
|
||||
function Import-JsonFile {
|
||||
param (
|
||||
[string]$filePath,
|
||||
[string]$expectedVersion = $null,
|
||||
@@ -1,11 +1,14 @@
|
||||
# Loads settings from a JSON file and adds them to script params
|
||||
function LoadSettings {
|
||||
<#
|
||||
.SYNOPSIS
|
||||
Imports enabled, compatible feature settings from a JSON file into the active parameters.
|
||||
#>
|
||||
function Import-Settings {
|
||||
param (
|
||||
[string]$filePath,
|
||||
[string]$expectedVersion = "1.0"
|
||||
)
|
||||
|
||||
$settingsJson = LoadJsonFile -filePath $filePath -expectedVersion $expectedVersion
|
||||
$settingsJson = Import-JsonFile -filePath $filePath -expectedVersion $expectedVersion
|
||||
|
||||
if (-not $settingsJson -or -not $settingsJson.Settings) {
|
||||
throw "Failed to load settings from $(Split-Path $filePath -Leaf)"
|
||||
@@ -29,6 +32,6 @@ function LoadSettings {
|
||||
continue
|
||||
}
|
||||
|
||||
AddParameter $setting.Name $setting.Value
|
||||
Add-Parameter $setting.Name $setting.Value
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,8 @@
|
||||
# Saves the current settings, excluding control parameters, to 'LastUsedSettings.json' file
|
||||
function SaveSettings {
|
||||
<#
|
||||
.SYNOPSIS
|
||||
Saves active feature settings, excluding control parameters, unless running in WhatIf mode.
|
||||
#>
|
||||
function Save-Settings {
|
||||
if ($script:Params.ContainsKey("WhatIf")) {
|
||||
Write-Host "[WhatIf] Save settings to LastUsedSettings.json" -ForegroundColor Cyan
|
||||
return
|
||||
@@ -21,8 +24,8 @@ function SaveSettings {
|
||||
}
|
||||
}
|
||||
|
||||
if (-not (SaveToFile -Config $settings -FilePath $script:SavedSettingsFilePath)) {
|
||||
if (-not (Save-ToFile -Config $settings -FilePath $script:SavedSettingsFilePath)) {
|
||||
Write-Output ""
|
||||
Write-Host "Error: Failed to save settings to LastUsedSettings.json file" -ForegroundColor Red
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
<#
|
||||
.SYNOPSIS
|
||||
Serializes a configuration hashtable to a UTF-8 JSON file.
|
||||
|
||||
.PARAMETER Config
|
||||
The configuration data to serialize.
|
||||
|
||||
.PARAMETER FilePath
|
||||
The destination file path.
|
||||
|
||||
.PARAMETER MaxDepth
|
||||
The maximum object depth passed to ConvertTo-Json.
|
||||
|
||||
.OUTPUTS
|
||||
System.Boolean. $true when the file is written; otherwise $false.
|
||||
#>
|
||||
function Save-ToFile {
|
||||
param (
|
||||
[Parameter(Mandatory=$true)]
|
||||
[hashtable]$Config,
|
||||
|
||||
[Parameter(Mandatory=$true)]
|
||||
[string]$FilePath,
|
||||
|
||||
[Parameter(Mandatory=$false)]
|
||||
[int]$MaxDepth = 10
|
||||
)
|
||||
|
||||
try {
|
||||
$Config | ConvertTo-Json -Depth $MaxDepth | Set-Content -Path $FilePath -Encoding UTF8
|
||||
return $true
|
||||
}
|
||||
catch {
|
||||
return $false
|
||||
}
|
||||
}
|
||||
@@ -1,22 +0,0 @@
|
||||
# Saves configuration JSON to a file.
|
||||
# Returns $true on success, $false on failure.
|
||||
function SaveToFile {
|
||||
param (
|
||||
[Parameter(Mandatory=$true)]
|
||||
[hashtable]$Config,
|
||||
|
||||
[Parameter(Mandatory=$true)]
|
||||
[string]$FilePath,
|
||||
|
||||
[Parameter(Mandatory=$false)]
|
||||
[int]$MaxDepth = 10
|
||||
)
|
||||
|
||||
try {
|
||||
$Config | ConvertTo-Json -Depth $MaxDepth | Set-Content -Path $FilePath -Encoding UTF8
|
||||
return $true
|
||||
}
|
||||
catch {
|
||||
return $false
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user