<?php 
 
namespace Fuse\Core; 
 
use Fuse\Exception\InvalidConfigKeyException; 
 
function config(...$args) 
{ 
    static $config = null; 
    if (is_null($config)) { 
        $config = (object) [ 
            // Basic options 
            'isCaseSensitive' => false, 
            'ignoreDiacritics' => false, 
            'includeScore' => false, 
            'keys' => [], 
            'shouldSort' => true, 
            'sortFn' => '\Fuse\Helpers\sort', 
 
            // Match options 
            'includeMatches' => false, 
            'findAllMatches' => false, 
            'minMatchCharLength' => 1, 
 
            // Fuzzy options 
            'location' => 0, 
            'threshold' => 0.6, 
            'distance' => 100, 
 
            // Advanced options 
            'useExtendedSearch' => false, 
            'getFn' => '\Fuse\Helpers\get', 
            'ignoreLocation' => false, 
            'ignoreFieldNorm' => false, 
            'fieldNormWeight' => 1, 
        ]; 
    } 
 
    switch (sizeof($args)) { 
        case 0: 
            return $config; 
 
        case 1: 
            if (is_array($args[0])) { 
                foreach ($args as $key => $value) { 
                    config($key, $value); 
                } 
            } else { 
                return $config->{$args[0]}; 
            } 
            break; 
 
        case 2: 
            [$key, $value] = $args; 
 
            if (!isset($config->{$key})) { 
                throw new InvalidConfigKeyException($key); 
            } 
 
            $config->$key = $value; 
            break; 
    } 
} 
 
 |