runAsUser('printf $(brew --prefix)'));
define('ISOLATED_PHP_VERSION', 'ISOLATED_PHP_VERSION');
/**
* Set or get a global console writer.
*/
function writer(?OutputInterface $writer = null): OutputInterface|\NullWriter|null
{
$container = Container::getInstance();
if (! $writer) {
if (! $container->bound('writer')) {
$container->instance('writer', new ConsoleOutput());
}
return $container->make('writer');
}
$container->instance('writer', $writer);
return null;
}
/**
* Output the given text to the console.
*/
function info($output): void
{
output(''.$output.'');
}
/**
* Output the given text to the console.
*/
function warning(string $output): void
{
output(''.$output.'>');
}
/**
* Output a table to the console.
*/
function table(array $headers = [], array $rows = []): void
{
$table = new Table(writer());
$table->setHeaders($headers)->setRows($rows);
$table->render();
}
/**
* Return whether the app is in the testing environment.
*/
function testing(): bool
{
return strpos($_SERVER['SCRIPT_NAME'], 'phpunit') !== false;
}
/**
* Output the given text to the console.
*/
function output(?string $output = ''): void
{
writer()->writeln($output);
}
/**
* Resolve the given class from the container.
*/
function resolve(string $class): mixed
{
return Container::getInstance()->make($class);
}
/**
* Swap the given class implementation in the container.
*/
function swap(string $class, mixed $instance): void
{
Container::getInstance()->instance($class, $instance);
}
/**
* Retry the given function N times.
*/
function retry(int $retries, callable $fn, int $sleep = 0): mixed
{
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".
*/
function should_be_sudo(): void
{
if (! isset($_SERVER['SUDO_USER'])) {
throw new Exception('This command must be run with sudo.');
}
}
/**
* Tap the given value.
*/
function tap(mixed $value, callable $callback): mixed
{
$callback($value);
return $value;
}
/**
* Determine if a given string ends with a given substring.
*/
function ends_with(string $haystack, array|string $needles): bool
{
foreach ((array) $needles as $needle) {
if (substr($haystack, -strlen($needle)) === (string) $needle) {
return true;
}
}
return false;
}
/**
* Determine if a given string starts with a given substring.
*/
function starts_with(string $haystack, array|string $needles): bool
{
foreach ((array) $needles as $needle) {
if ((string) $needle !== '' && strncmp($haystack, $needle, strlen($needle)) === 0) {
return true;
}
}
return false;
}
/**
* Get the user.
*/
function user(): string
{
if (! isset($_SERVER['SUDO_USER'])) {
return $_SERVER['USER'];
}
return $_SERVER['SUDO_USER'];
}