<?php 
 
use Illuminate\Container\Container; 
use Symfony\Component\Process\Process; 
use Symfony\Component\Console\Output\ConsoleOutput; 
use Symfony\Component\Console\Helper\Table; 
 
/** 
 * Define the ~/.valet path as a constant. 
 */ 
define('VALET_HOME_PATH', $_SERVER['HOME'].'/.valet'); 
define('VALET_SERVER_PATH', realpath(__DIR__ . '/../../server.php')); 
define('VALET_STATIC_PREFIX', '41c270e4-5535-4daa-b23e-c269744c2f45'); 
 
/** 
 * Output the given text to the console. 
 * 
 * @param  string  $output 
 * @return void 
 */ 
function info($output) 
{ 
    output('<info>'.$output.'</info>'); 
} 
 
/** 
 * Output the given text to the console. 
 * 
 * @param  string  $output 
 * @return void 
 */ 
function warning($output) 
{ 
    output('<fg=red>'.$output.'</>'); 
} 
 
/** 
 * Output a table to the console. 
 * 
 * @param array $headers 
 * @param array $rows 
 * @return void 
 */ 
function table(array $headers = [], array $rows = []) 
{ 
    $table = new Table(new ConsoleOutput); 
 
    $table->setHeaders($headers)->setRows($rows); 
 
    $table->render(); 
} 
 
/** 
 * Output the given text to the console. 
 * 
 * @param  string  $output 
 * @return void 
 */ 
function output($output) 
{ 
    if (isset($_ENV['APP_ENV']) && $_ENV['APP_ENV'] === 'testing') { 
        return; 
    } 
 
    (new ConsoleOutput)->writeln($output); 
} 
 
if (! function_exists('resolve')) { 
    /** 
     * Resolve the given class from the container. 
     * 
     * @param  string  $class 
     * @return mixed 
     */ 
    function resolve($class) 
    { 
        return Container::getInstance()->make($class); 
    } 
} 
 
/** 
 * Swap the given class implementation in the container. 
 * 
 * @param  string  $class 
 * @param  mixed  $instance 
 * @return void 
 */ 
function swap($class, $instance) 
{ 
    Container::getInstance()->instance($class, $instance); 
} 
 
if (! function_exists('retry')) { 
    /** 
     * Retry the given function N times. 
     * 
     * @param  int  $retries 
     * @param  callable  $retries 
     * @param  int  $sleep 
     * @return mixed 
     */ 
    function retry($retries, $fn, $sleep = 0) 
    { 
        beginning: 
        try { 
            return $fn(); 
        } catch (Exception $e) { 
            if (! $retries) { 
                throw $e; 
            } 
 
            $retries--; 
 
            if ($sleep > 0) { 
                usleep($sleep * 1000); 
            } 
 
            goto beginning; 
        } 
    } 
} 
 
/** 
 * Verify that the script is currently running as "sudo". 
 * 
 * @return void 
 */ 
function should_be_sudo() 
{ 
    if (! isset($_SERVER['SUDO_USER'])) { 
        throw new Exception('This command must be run with sudo.'); 
    } 
} 
 
if (! function_exists('tap')) { 
    /** 
     * Tap the given value. 
     * 
     * @param  mixed  $value 
     * @param  callable  $callback 
     * @return mixed 
     */ 
    function tap($value, callable $callback) 
    { 
        $callback($value); 
 
        return $value; 
    } 
} 
 
if (! function_exists('ends_with')) { 
    /** 
     * Determine if a given string ends with a given substring. 
     * 
     * @param  string  $haystack 
     * @param  string|array  $needles 
     * @return bool 
     */ 
    function ends_with($haystack, $needles) 
    { 
        foreach ((array) $needles as $needle) { 
            if (substr($haystack, -strlen($needle)) === (string) $needle) { 
                return true; 
            } 
        } 
        return false; 
    } 
} 
 
/** 
 * Get the user 
 */ 
function user() 
{ 
    if (! isset($_SERVER['SUDO_USER'])) { 
        return $_SERVER['USER']; 
    } 
 
    return $_SERVER['SUDO_USER']; 
} 
 
/** 
 * Get the user's group 
 */ 
function group() 
{ 
    if (! isset($_SERVER['SUDO_USER'])) { 
        return exec('id -gn '.$_SERVER['USER']); 
    } 
 
    return exec('id -gn '.$_SERVER['SUDO_USER']); 
} 
 
/** 
 * Search and replace using associative array 
 * 
 * @param array $searchAndReplace 
 * @param string $subject 
 * @return string 
 */ 
function str_array_replace($searchAndReplace, $subject) 
{ 
    return str_replace(array_keys($searchAndReplace), array_values($searchAndReplace), $subject); 
} 
 
 |