SpotifyUtils.psm1
$psd1files = Get-ChildItem -Path $PSScriptRoot -Filter "*.psd1" if ($psd1files.Count -ne 1) { throw "Failed to find the module's psd1 file" } $manifest = $psd1files[0].FullName $publicFunctionsPath = "$PSScriptRoot\Public\" $privateFunctionsPath = "$PSScriptRoot\Private" $currentManifest = Test-ModuleManifest $manifest # dot-source all functions $publicFunctions = Get-ChildItem -Path $publicFunctionsPath | Where-Object {$_.Extension -eq '.ps1'} $privateFunctions = Get-ChildItem -Path $privateFunctionsPath | Where-Object {$_.Extension -eq '.ps1'} $publicFunctions | ForEach-Object { . $_.FullName } $privateFunctions | ForEach-Object { . $_.FullName } $aliases = @() # Export all of the public functions from this module foreach ($func in $publicFunctions) { Export-ModuleMember -Function $func.BaseName $alias = Get-Alias -Definition $func.BaseName -ErrorAction SilentlyContinue foreach ($a in $alias) { $aliases += $a Export-ModuleMember -Function $func.BaseName -Alias $a } } # Update module manifest $functionsAdded = $publicFunctions | Where-Object {$_.BaseName -notin $currentManifest.ExportedFunctions.Keys} $functionsRemoved = $currentManifest.ExportedFunctions.Keys | Where-Object {$_ -notin $publicFunctions.BaseName} $aliasesAdded = $aliases | Where-Object {$_ -notin $currentManifest.ExportedAliases.Keys} $aliasesRemoved = $currentManifest.ExportedAliases.Keys | Where-Object {$_ -notin $aliases} if ($functionsAdded -or $functionsRemoved -or $aliasesAdded -or $aliasesRemoved) { try { $updateModuleManifestParams = @{} $updateModuleManifestParams.Add('Path', $manifest) $updateModuleManifestParams.Add('ErrorAction', 'Stop') if ($aliases.Count -gt 0) { $updateModuleManifestParams.Add('AliasesToExport', $aliases) } if ($publicFunctions.Count -gt 0) { $updateModuleManifestParams.Add('FunctionsToExport', $publicFunctions.BaseName) } Update-ModuleManifest @updateModuleManifestParams } catch { $_ | Write-Error } } # Module-Level Variables $script:CONFIGFILE = "$PSScriptRoot\.env.json" $script:AUTH_URI = 'https://accounts.spotify.com/authorize' $script:TOKEN_URI = 'https://accounts.spotify.com/api/token' $script:BASE_URI = 'https://api.spotify.com/v1' $script:MYTRACKS_URI = "$script:BASE_URI/me/tracks" $script:MYPLAYLISTS_URI = "$script:BASE_URI/me/playlists" $script:SEARCH_URI = "$script:BASE_URI/search" $script:API_DELAY = 250 # milliseconds between API calls (avoid rate limiting) $script:TOKENS = [System.Collections.ArrayList]::New() $script:ALL_SCOPES = @('playlist-read-private', 'playlist-read-collaborative', 'user-library-read', 'user-library-modify') $ESC = [char]27 $script:GREEN = "$ESC[35;92m" $script:RESETANSI = "$ESC[35;0m" |