<?php 
 
/* 
 * This file is part of Chevere. 
 * 
 * (c) Rodolfo Berrios <[email protected]> 
 * 
 * For the full copyright and license information, please view the LICENSE 
 * file that was distributed with this source code. 
 */ 
 
declare(strict_types=1); 
 
// @codeCoverageIgnoreStart 
 
namespace Chevere\VarDump { 
    use Chevere\VarDump\Formats\ConsoleFormat; 
    use Chevere\VarDump\Formats\HtmlFormat; 
    use Chevere\VarDump\Formats\PlainFormat; 
    use Chevere\VarDump\Interfaces\VarDumpInterface; 
    use Chevere\VarDump\Outputs\ConsoleOutput; 
    use Chevere\VarDump\Outputs\HtmlOutput; 
    use Chevere\VarDump\Outputs\PlainOutput; 
    use Chevere\Writer\Interfaces\WritersInterface; 
    use Chevere\Writer\StreamWriter; 
    use Chevere\Writer\Writers; 
    use Chevere\Writer\WritersInstance; 
    use LogicException; 
    use function Chevere\Writer\streamFor; 
 
    function varDumpPlain(): VarDumpInterface 
    { 
        return 
                new VarDump( 
                    new PlainFormat(), 
                    new PlainOutput() 
                ); 
    } 
 
    function varDumpConsole(): VarDumpInterface 
    { 
        return 
            new VarDump( 
                new ConsoleFormat(), 
                new ConsoleOutput() 
            ); 
    } 
 
    function varDumpHtml(): VarDumpInterface 
    { 
        return 
            new VarDump( 
                new HtmlFormat(), 
                new HtmlOutput() 
            ); 
    } 
 
    function varDump(): VarDumpInterface 
    { 
        try { 
            return VarDumpInstance::get(); 
        } catch (LogicException $e) { 
            return PHP_SAPI === 'cli' 
                ? varDumpConsole() 
                : varDumpHtml(); 
        } 
    } 
 
    function writers(): WritersInterface 
    { 
        try { 
            return WritersInstance::get(); 
        } catch (LogicException $e) { 
            return (new Writers()) 
                ->withOutput( 
                    new StreamWriter(streamFor('php://output', 'w')) 
                ) 
                ->withError( 
                    new StreamWriter(streamFor('php://stderr', 'w')) 
                ); 
        } 
    } 
} 
 
namespace { 
    use function Chevere\VarDump\varDump; 
    use function Chevere\VarDump\writers; 
 
    if (! function_exists('vd')) { 
        /** 
         * Dumps information about one or more variables to the registered output writer stream 
         * @phpstan-ignore-next-line 
         */ 
        function vd(...$variables): void 
        { 
            varDump() 
                ->withShift(1) 
                ->withVariables(...$variables) 
                ->process(writers()->output()); 
        } 
    } 
    if (! function_exists('vdd')) { 
        /** 
         * Dumps information about one or more variables to the registered output writer stream and die() 
         * @codeCoverageIgnore 
         * @phpstan-ignore-next-line 
         */ 
        function vdd(...$variables): void 
        { 
            varDump() 
                ->withShift(1) 
                ->withVariables(...$variables) 
                ->process(writers()->output()); 
            exit(0); 
        } 
    } 
} 
// @codeCoverageIgnoreEnd 
 
 |