Private/Initialize-Configuration.ps1

function Initialize-Configuration {
    if ($script:ConfigurationInitialized -and $script:ConfigurationData) {
        return
    }

    Invoke-ModuleSynchronized $script:ConfigurationSyncRoot {
        if ($script:ConfigurationInitialized -and $script:ConfigurationData) {
            return
        }

        $configRoot = Get-ColorScriptsConfigurationRoot -NoCreate
        $script:ConfigurationPath = if ($configRoot) {
            Join-Path -Path $configRoot -ChildPath 'config.json'
        }
        else {
            $null
        }

        $existing = $null
        $configExists = $script:ConfigurationPath -and (Test-Path -LiteralPath $script:ConfigurationPath)

        if ($configExists) {
            try {
                $raw = Get-Content -LiteralPath $script:ConfigurationPath -Raw -ErrorAction Stop
                if (-not [string]::IsNullOrWhiteSpace($raw)) {
                    $existing = ConvertFrom-JsonToHashtable -InputObject $raw
                }
            }
            catch {
                Write-Warning ($script:Messages.FailedToParseConfigurationFile -f $script:ConfigurationPath, $_.Exception.Message)
            }
        }

        $script:ConfigurationData = Merge-ColorScriptConfiguration $script:DefaultConfiguration $existing
        $script:ConfigurationInitialized = $true
    }
}