Subiendo proyecto completo sin restricciones de git ignore
This commit is contained in:
104
vendor/laravel/framework/src/Illuminate/Console/Concerns/CallsCommands.php
vendored
Normal file
104
vendor/laravel/framework/src/Illuminate/Console/Concerns/CallsCommands.php
vendored
Normal file
@@ -0,0 +1,104 @@
|
||||
<?php
|
||||
|
||||
namespace Illuminate\Console\Concerns;
|
||||
|
||||
use Symfony\Component\Console\Input\ArrayInput;
|
||||
use Symfony\Component\Console\Output\NullOutput;
|
||||
use Symfony\Component\Console\Output\OutputInterface;
|
||||
|
||||
trait CallsCommands
|
||||
{
|
||||
/**
|
||||
* Resolve the console command instance for the given command.
|
||||
*
|
||||
* @param \Symfony\Component\Console\Command\Command|string $command
|
||||
* @return \Symfony\Component\Console\Command\Command
|
||||
*/
|
||||
abstract protected function resolveCommand($command);
|
||||
|
||||
/**
|
||||
* Call another console command.
|
||||
*
|
||||
* @param \Symfony\Component\Console\Command\Command|string $command
|
||||
* @param array $arguments
|
||||
* @return int
|
||||
*/
|
||||
public function call($command, array $arguments = [])
|
||||
{
|
||||
return $this->runCommand($command, $arguments, $this->output);
|
||||
}
|
||||
|
||||
/**
|
||||
* Call another console command without output.
|
||||
*
|
||||
* @param \Symfony\Component\Console\Command\Command|string $command
|
||||
* @param array $arguments
|
||||
* @return int
|
||||
*/
|
||||
public function callSilent($command, array $arguments = [])
|
||||
{
|
||||
return $this->runCommand($command, $arguments, new NullOutput);
|
||||
}
|
||||
|
||||
/**
|
||||
* Call another console command without output.
|
||||
*
|
||||
* @param \Symfony\Component\Console\Command\Command|string $command
|
||||
* @param array $arguments
|
||||
* @return int
|
||||
*/
|
||||
public function callSilently($command, array $arguments = [])
|
||||
{
|
||||
return $this->callSilent($command, $arguments);
|
||||
}
|
||||
|
||||
/**
|
||||
* Run the given the console command.
|
||||
*
|
||||
* @param \Symfony\Component\Console\Command\Command|string $command
|
||||
* @param array $arguments
|
||||
* @param \Symfony\Component\Console\Output\OutputInterface $output
|
||||
* @return int
|
||||
*/
|
||||
protected function runCommand($command, array $arguments, OutputInterface $output)
|
||||
{
|
||||
$arguments['command'] = $command;
|
||||
|
||||
return $this->resolveCommand($command)->run(
|
||||
$this->createInputFromArguments($arguments), $output
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Create an input instance from the given arguments.
|
||||
*
|
||||
* @param array $arguments
|
||||
* @return \Symfony\Component\Console\Input\ArrayInput
|
||||
*/
|
||||
protected function createInputFromArguments(array $arguments)
|
||||
{
|
||||
return tap(new ArrayInput(array_merge($this->context(), $arguments)), function ($input) {
|
||||
if ($input->getParameterOption('--no-interaction')) {
|
||||
$input->setInteractive(false);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Get all of the context passed to the command.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
protected function context()
|
||||
{
|
||||
return collect($this->option())->only([
|
||||
'ansi',
|
||||
'no-ansi',
|
||||
'no-interaction',
|
||||
'quiet',
|
||||
'verbose',
|
||||
])->filter()->mapWithKeys(function ($value, $key) {
|
||||
return ["--{$key}" => $value];
|
||||
})->all();
|
||||
}
|
||||
}
|
||||
44
vendor/laravel/framework/src/Illuminate/Console/Concerns/CreatesMatchingTest.php
vendored
Normal file
44
vendor/laravel/framework/src/Illuminate/Console/Concerns/CreatesMatchingTest.php
vendored
Normal file
@@ -0,0 +1,44 @@
|
||||
<?php
|
||||
|
||||
namespace Illuminate\Console\Concerns;
|
||||
|
||||
use Illuminate\Support\Str;
|
||||
use Symfony\Component\Console\Input\InputOption;
|
||||
|
||||
trait CreatesMatchingTest
|
||||
{
|
||||
/**
|
||||
* Add the standard command options for generating matching tests.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
protected function addTestOptions()
|
||||
{
|
||||
foreach (['test' => 'PHPUnit', 'pest' => 'Pest'] as $option => $name) {
|
||||
$this->getDefinition()->addOption(new InputOption(
|
||||
$option,
|
||||
null,
|
||||
InputOption::VALUE_NONE,
|
||||
"Generate an accompanying {$name} test for the {$this->type}"
|
||||
));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Create the matching test case if requested.
|
||||
*
|
||||
* @param string $path
|
||||
* @return bool
|
||||
*/
|
||||
protected function handleTestCreation($path)
|
||||
{
|
||||
if (! $this->option('test') && ! $this->option('pest')) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return $this->callSilent('make:test', [
|
||||
'name' => Str::of($path)->after($this->laravel['path'])->beforeLast('.php')->append('Test')->replace('\\', '/'),
|
||||
'--pest' => $this->option('pest'),
|
||||
]) == 0;
|
||||
}
|
||||
}
|
||||
56
vendor/laravel/framework/src/Illuminate/Console/Concerns/HasParameters.php
vendored
Normal file
56
vendor/laravel/framework/src/Illuminate/Console/Concerns/HasParameters.php
vendored
Normal file
@@ -0,0 +1,56 @@
|
||||
<?php
|
||||
|
||||
namespace Illuminate\Console\Concerns;
|
||||
|
||||
use Symfony\Component\Console\Input\InputArgument;
|
||||
use Symfony\Component\Console\Input\InputOption;
|
||||
|
||||
trait HasParameters
|
||||
{
|
||||
/**
|
||||
* Specify the arguments and options on the command.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
protected function specifyParameters()
|
||||
{
|
||||
// We will loop through all of the arguments and options for the command and
|
||||
// set them all on the base command instance. This specifies what can get
|
||||
// passed into these commands as "parameters" to control the execution.
|
||||
foreach ($this->getArguments() as $arguments) {
|
||||
if ($arguments instanceof InputArgument) {
|
||||
$this->getDefinition()->addArgument($arguments);
|
||||
} else {
|
||||
$this->addArgument(...$arguments);
|
||||
}
|
||||
}
|
||||
|
||||
foreach ($this->getOptions() as $options) {
|
||||
if ($options instanceof InputOption) {
|
||||
$this->getDefinition()->addOption($options);
|
||||
} else {
|
||||
$this->addOption(...$options);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the console command arguments.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
protected function getArguments()
|
||||
{
|
||||
return [];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the console command options.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
protected function getOptions()
|
||||
{
|
||||
return [];
|
||||
}
|
||||
}
|
||||
453
vendor/laravel/framework/src/Illuminate/Console/Concerns/InteractsWithIO.php
vendored
Normal file
453
vendor/laravel/framework/src/Illuminate/Console/Concerns/InteractsWithIO.php
vendored
Normal file
@@ -0,0 +1,453 @@
|
||||
<?php
|
||||
|
||||
namespace Illuminate\Console\Concerns;
|
||||
|
||||
use Closure;
|
||||
use Illuminate\Console\OutputStyle;
|
||||
use Illuminate\Contracts\Support\Arrayable;
|
||||
use Illuminate\Support\Str;
|
||||
use Symfony\Component\Console\Formatter\OutputFormatterStyle;
|
||||
use Symfony\Component\Console\Helper\Table;
|
||||
use Symfony\Component\Console\Input\InputInterface;
|
||||
use Symfony\Component\Console\Output\OutputInterface;
|
||||
use Symfony\Component\Console\Question\ChoiceQuestion;
|
||||
use Symfony\Component\Console\Question\Question;
|
||||
|
||||
trait InteractsWithIO
|
||||
{
|
||||
/**
|
||||
* The console components factory.
|
||||
*
|
||||
* @var \Illuminate\Console\View\Components\Factory
|
||||
*
|
||||
* @internal This property is not meant to be used or overwritten outside the framework.
|
||||
*/
|
||||
protected $components;
|
||||
|
||||
/**
|
||||
* The input interface implementation.
|
||||
*
|
||||
* @var \Symfony\Component\Console\Input\InputInterface
|
||||
*/
|
||||
protected $input;
|
||||
|
||||
/**
|
||||
* The output interface implementation.
|
||||
*
|
||||
* @var \Illuminate\Console\OutputStyle
|
||||
*/
|
||||
protected $output;
|
||||
|
||||
/**
|
||||
* The default verbosity of output commands.
|
||||
*
|
||||
* @var int
|
||||
*/
|
||||
protected $verbosity = OutputInterface::VERBOSITY_NORMAL;
|
||||
|
||||
/**
|
||||
* The mapping between human readable verbosity levels and Symfony's OutputInterface.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $verbosityMap = [
|
||||
'v' => OutputInterface::VERBOSITY_VERBOSE,
|
||||
'vv' => OutputInterface::VERBOSITY_VERY_VERBOSE,
|
||||
'vvv' => OutputInterface::VERBOSITY_DEBUG,
|
||||
'quiet' => OutputInterface::VERBOSITY_QUIET,
|
||||
'normal' => OutputInterface::VERBOSITY_NORMAL,
|
||||
];
|
||||
|
||||
/**
|
||||
* Determine if the given argument is present.
|
||||
*
|
||||
* @param string|int $name
|
||||
* @return bool
|
||||
*/
|
||||
public function hasArgument($name)
|
||||
{
|
||||
return $this->input->hasArgument($name);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the value of a command argument.
|
||||
*
|
||||
* @param string|null $key
|
||||
* @return array|string|bool|null
|
||||
*/
|
||||
public function argument($key = null)
|
||||
{
|
||||
if (is_null($key)) {
|
||||
return $this->input->getArguments();
|
||||
}
|
||||
|
||||
return $this->input->getArgument($key);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get all of the arguments passed to the command.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function arguments()
|
||||
{
|
||||
return $this->argument();
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine if the given option is present.
|
||||
*
|
||||
* @param string $name
|
||||
* @return bool
|
||||
*/
|
||||
public function hasOption($name)
|
||||
{
|
||||
return $this->input->hasOption($name);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the value of a command option.
|
||||
*
|
||||
* @param string|null $key
|
||||
* @return string|array|bool|null
|
||||
*/
|
||||
public function option($key = null)
|
||||
{
|
||||
if (is_null($key)) {
|
||||
return $this->input->getOptions();
|
||||
}
|
||||
|
||||
return $this->input->getOption($key);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get all of the options passed to the command.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function options()
|
||||
{
|
||||
return $this->option();
|
||||
}
|
||||
|
||||
/**
|
||||
* Confirm a question with the user.
|
||||
*
|
||||
* @param string $question
|
||||
* @param bool $default
|
||||
* @return bool
|
||||
*/
|
||||
public function confirm($question, $default = false)
|
||||
{
|
||||
return $this->output->confirm($question, $default);
|
||||
}
|
||||
|
||||
/**
|
||||
* Prompt the user for input.
|
||||
*
|
||||
* @param string $question
|
||||
* @param string|null $default
|
||||
* @return mixed
|
||||
*/
|
||||
public function ask($question, $default = null)
|
||||
{
|
||||
return $this->output->ask($question, $default);
|
||||
}
|
||||
|
||||
/**
|
||||
* Prompt the user for input with auto completion.
|
||||
*
|
||||
* @param string $question
|
||||
* @param array|callable $choices
|
||||
* @param string|null $default
|
||||
* @return mixed
|
||||
*/
|
||||
public function anticipate($question, $choices, $default = null)
|
||||
{
|
||||
return $this->askWithCompletion($question, $choices, $default);
|
||||
}
|
||||
|
||||
/**
|
||||
* Prompt the user for input with auto completion.
|
||||
*
|
||||
* @param string $question
|
||||
* @param array|callable $choices
|
||||
* @param string|null $default
|
||||
* @return mixed
|
||||
*/
|
||||
public function askWithCompletion($question, $choices, $default = null)
|
||||
{
|
||||
$question = new Question($question, $default);
|
||||
|
||||
is_callable($choices)
|
||||
? $question->setAutocompleterCallback($choices)
|
||||
: $question->setAutocompleterValues($choices);
|
||||
|
||||
return $this->output->askQuestion($question);
|
||||
}
|
||||
|
||||
/**
|
||||
* Prompt the user for input but hide the answer from the console.
|
||||
*
|
||||
* @param string $question
|
||||
* @param bool $fallback
|
||||
* @return mixed
|
||||
*/
|
||||
public function secret($question, $fallback = true)
|
||||
{
|
||||
$question = new Question($question);
|
||||
|
||||
$question->setHidden(true)->setHiddenFallback($fallback);
|
||||
|
||||
return $this->output->askQuestion($question);
|
||||
}
|
||||
|
||||
/**
|
||||
* Give the user a single choice from an array of answers.
|
||||
*
|
||||
* @param string $question
|
||||
* @param array $choices
|
||||
* @param string|int|null $default
|
||||
* @param mixed|null $attempts
|
||||
* @param bool $multiple
|
||||
* @return string|array
|
||||
*/
|
||||
public function choice($question, array $choices, $default = null, $attempts = null, $multiple = false)
|
||||
{
|
||||
$question = new ChoiceQuestion($question, $choices, $default);
|
||||
|
||||
$question->setMaxAttempts($attempts)->setMultiselect($multiple);
|
||||
|
||||
return $this->output->askQuestion($question);
|
||||
}
|
||||
|
||||
/**
|
||||
* Format input to textual table.
|
||||
*
|
||||
* @param array $headers
|
||||
* @param \Illuminate\Contracts\Support\Arrayable|array $rows
|
||||
* @param \Symfony\Component\Console\Helper\TableStyle|string $tableStyle
|
||||
* @param array $columnStyles
|
||||
* @return void
|
||||
*/
|
||||
public function table($headers, $rows, $tableStyle = 'default', array $columnStyles = [])
|
||||
{
|
||||
$table = new Table($this->output);
|
||||
|
||||
if ($rows instanceof Arrayable) {
|
||||
$rows = $rows->toArray();
|
||||
}
|
||||
|
||||
$table->setHeaders((array) $headers)->setRows($rows)->setStyle($tableStyle);
|
||||
|
||||
foreach ($columnStyles as $columnIndex => $columnStyle) {
|
||||
$table->setColumnStyle($columnIndex, $columnStyle);
|
||||
}
|
||||
|
||||
$table->render();
|
||||
}
|
||||
|
||||
/**
|
||||
* Execute a given callback while advancing a progress bar.
|
||||
*
|
||||
* @param iterable|int $totalSteps
|
||||
* @param \Closure $callback
|
||||
* @return mixed|void
|
||||
*/
|
||||
public function withProgressBar($totalSteps, Closure $callback)
|
||||
{
|
||||
$bar = $this->output->createProgressBar(
|
||||
is_iterable($totalSteps) ? count($totalSteps) : $totalSteps
|
||||
);
|
||||
|
||||
$bar->start();
|
||||
|
||||
if (is_iterable($totalSteps)) {
|
||||
foreach ($totalSteps as $value) {
|
||||
$callback($value, $bar);
|
||||
|
||||
$bar->advance();
|
||||
}
|
||||
} else {
|
||||
$callback($bar);
|
||||
}
|
||||
|
||||
$bar->finish();
|
||||
|
||||
if (is_iterable($totalSteps)) {
|
||||
return $totalSteps;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Write a string as information output.
|
||||
*
|
||||
* @param string $string
|
||||
* @param int|string|null $verbosity
|
||||
* @return void
|
||||
*/
|
||||
public function info($string, $verbosity = null)
|
||||
{
|
||||
$this->line($string, 'info', $verbosity);
|
||||
}
|
||||
|
||||
/**
|
||||
* Write a string as standard output.
|
||||
*
|
||||
* @param string $string
|
||||
* @param string|null $style
|
||||
* @param int|string|null $verbosity
|
||||
* @return void
|
||||
*/
|
||||
public function line($string, $style = null, $verbosity = null)
|
||||
{
|
||||
$styled = $style ? "<$style>$string</$style>" : $string;
|
||||
|
||||
$this->output->writeln($styled, $this->parseVerbosity($verbosity));
|
||||
}
|
||||
|
||||
/**
|
||||
* Write a string as comment output.
|
||||
*
|
||||
* @param string $string
|
||||
* @param int|string|null $verbosity
|
||||
* @return void
|
||||
*/
|
||||
public function comment($string, $verbosity = null)
|
||||
{
|
||||
$this->line($string, 'comment', $verbosity);
|
||||
}
|
||||
|
||||
/**
|
||||
* Write a string as question output.
|
||||
*
|
||||
* @param string $string
|
||||
* @param int|string|null $verbosity
|
||||
* @return void
|
||||
*/
|
||||
public function question($string, $verbosity = null)
|
||||
{
|
||||
$this->line($string, 'question', $verbosity);
|
||||
}
|
||||
|
||||
/**
|
||||
* Write a string as error output.
|
||||
*
|
||||
* @param string $string
|
||||
* @param int|string|null $verbosity
|
||||
* @return void
|
||||
*/
|
||||
public function error($string, $verbosity = null)
|
||||
{
|
||||
$this->line($string, 'error', $verbosity);
|
||||
}
|
||||
|
||||
/**
|
||||
* Write a string as warning output.
|
||||
*
|
||||
* @param string $string
|
||||
* @param int|string|null $verbosity
|
||||
* @return void
|
||||
*/
|
||||
public function warn($string, $verbosity = null)
|
||||
{
|
||||
if (! $this->output->getFormatter()->hasStyle('warning')) {
|
||||
$style = new OutputFormatterStyle('yellow');
|
||||
|
||||
$this->output->getFormatter()->setStyle('warning', $style);
|
||||
}
|
||||
|
||||
$this->line($string, 'warning', $verbosity);
|
||||
}
|
||||
|
||||
/**
|
||||
* Write a string in an alert box.
|
||||
*
|
||||
* @param string $string
|
||||
* @param int|string|null $verbosity
|
||||
* @return void
|
||||
*/
|
||||
public function alert($string, $verbosity = null)
|
||||
{
|
||||
$length = Str::length(strip_tags($string)) + 12;
|
||||
|
||||
$this->comment(str_repeat('*', $length), $verbosity);
|
||||
$this->comment('* '.$string.' *', $verbosity);
|
||||
$this->comment(str_repeat('*', $length), $verbosity);
|
||||
|
||||
$this->comment('', $verbosity);
|
||||
}
|
||||
|
||||
/**
|
||||
* Write a blank line.
|
||||
*
|
||||
* @param int $count
|
||||
* @return $this
|
||||
*/
|
||||
public function newLine($count = 1)
|
||||
{
|
||||
$this->output->newLine($count);
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the input interface implementation.
|
||||
*
|
||||
* @param \Symfony\Component\Console\Input\InputInterface $input
|
||||
* @return void
|
||||
*/
|
||||
public function setInput(InputInterface $input)
|
||||
{
|
||||
$this->input = $input;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the output interface implementation.
|
||||
*
|
||||
* @param \Illuminate\Console\OutputStyle $output
|
||||
* @return void
|
||||
*/
|
||||
public function setOutput(OutputStyle $output)
|
||||
{
|
||||
$this->output = $output;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the verbosity level.
|
||||
*
|
||||
* @param string|int $level
|
||||
* @return void
|
||||
*/
|
||||
protected function setVerbosity($level)
|
||||
{
|
||||
$this->verbosity = $this->parseVerbosity($level);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the verbosity level in terms of Symfony's OutputInterface level.
|
||||
*
|
||||
* @param string|int|null $level
|
||||
* @return int
|
||||
*/
|
||||
protected function parseVerbosity($level = null)
|
||||
{
|
||||
if (isset($this->verbosityMap[$level])) {
|
||||
$level = $this->verbosityMap[$level];
|
||||
} elseif (! is_int($level)) {
|
||||
$level = $this->verbosity;
|
||||
}
|
||||
|
||||
return $level;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the output implementation.
|
||||
*
|
||||
* @return \Illuminate\Console\OutputStyle
|
||||
*/
|
||||
public function getOutput()
|
||||
{
|
||||
return $this->output;
|
||||
}
|
||||
}
|
||||
51
vendor/laravel/framework/src/Illuminate/Console/Concerns/InteractsWithSignals.php
vendored
Normal file
51
vendor/laravel/framework/src/Illuminate/Console/Concerns/InteractsWithSignals.php
vendored
Normal file
@@ -0,0 +1,51 @@
|
||||
<?php
|
||||
|
||||
namespace Illuminate\Console\Concerns;
|
||||
|
||||
use Illuminate\Console\Signals;
|
||||
use Illuminate\Support\Arr;
|
||||
|
||||
trait InteractsWithSignals
|
||||
{
|
||||
/**
|
||||
* The signal registrar instance.
|
||||
*
|
||||
* @var \Illuminate\Console\Signals|null
|
||||
*/
|
||||
protected $signals;
|
||||
|
||||
/**
|
||||
* Define a callback to be run when the given signal(s) occurs.
|
||||
*
|
||||
* @param iterable<array-key, int>|int $signals
|
||||
* @param callable(int $signal): void $callback
|
||||
* @return void
|
||||
*/
|
||||
public function trap($signals, $callback)
|
||||
{
|
||||
Signals::whenAvailable(function () use ($signals, $callback) {
|
||||
$this->signals ??= new Signals(
|
||||
$this->getApplication()->getSignalRegistry(),
|
||||
);
|
||||
|
||||
collect(Arr::wrap($signals))
|
||||
->each(fn ($signal) => $this->signals->register($signal, $callback));
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Untrap signal handlers set within the command's handler.
|
||||
*
|
||||
* @return void
|
||||
*
|
||||
* @internal
|
||||
*/
|
||||
public function untrap()
|
||||
{
|
||||
if (! is_null($this->signals)) {
|
||||
$this->signals->unregister();
|
||||
|
||||
$this->signals = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
108
vendor/laravel/framework/src/Illuminate/Console/Concerns/PromptsForMissingInput.php
vendored
Normal file
108
vendor/laravel/framework/src/Illuminate/Console/Concerns/PromptsForMissingInput.php
vendored
Normal file
@@ -0,0 +1,108 @@
|
||||
<?php
|
||||
|
||||
namespace Illuminate\Console\Concerns;
|
||||
|
||||
use Illuminate\Contracts\Console\PromptsForMissingInput as PromptsForMissingInputContract;
|
||||
use Symfony\Component\Console\Input\InputInterface;
|
||||
use Symfony\Component\Console\Output\OutputInterface;
|
||||
|
||||
trait PromptsForMissingInput
|
||||
{
|
||||
/**
|
||||
* Interact with the user before validating the input.
|
||||
*
|
||||
* @param \Symfony\Component\Console\Input\InputInterface $input
|
||||
* @param \Symfony\Component\Console\Output\OutputInterface $output
|
||||
* @return void
|
||||
*/
|
||||
protected function interact(InputInterface $input, OutputInterface $output)
|
||||
{
|
||||
parent::interact($input, $output);
|
||||
|
||||
if ($this instanceof PromptsForMissingInputContract) {
|
||||
$this->promptForMissingArguments($input, $output);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Prompt the user for any missing arguments.
|
||||
*
|
||||
* @param \Symfony\Component\Console\Input\InputInterface $input
|
||||
* @param \Symfony\Component\Console\Output\OutputInterface $output
|
||||
* @return void
|
||||
*/
|
||||
protected function promptForMissingArguments(InputInterface $input, OutputInterface $output)
|
||||
{
|
||||
$prompted = collect($this->getDefinition()->getArguments())
|
||||
->filter(fn ($argument) => $argument->isRequired() && is_null($input->getArgument($argument->getName())))
|
||||
->filter(fn ($argument) => $argument->getName() !== 'command')
|
||||
->each(fn ($argument) => $input->setArgument(
|
||||
$argument->getName(),
|
||||
$this->askPersistently(
|
||||
$this->promptForMissingArgumentsUsing()[$argument->getName()] ??
|
||||
'What is '.lcfirst($argument->getDescription()).'?'
|
||||
)
|
||||
))
|
||||
->isNotEmpty();
|
||||
|
||||
if ($prompted) {
|
||||
$this->afterPromptingForMissingArguments($input, $output);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Prompt for missing input arguments using the returned questions.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
protected function promptForMissingArgumentsUsing()
|
||||
{
|
||||
return [];
|
||||
}
|
||||
|
||||
/**
|
||||
* Perform actions after the user was prompted for missing arguments.
|
||||
*
|
||||
* @param \Symfony\Component\Console\Input\InputInterface $input
|
||||
* @param \Symfony\Component\Console\Output\OutputInterface $output
|
||||
* @return void
|
||||
*/
|
||||
protected function afterPromptingForMissingArguments(InputInterface $input, OutputInterface $output)
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* Whether the input contains any options that differ from the default values.
|
||||
*
|
||||
* @param \Symfony\Component\Console\Input\InputInterface $input
|
||||
* @return bool
|
||||
*/
|
||||
protected function didReceiveOptions(InputInterface $input)
|
||||
{
|
||||
return collect($this->getDefinition()->getOptions())
|
||||
->reject(fn ($option) => $input->getOption($option->getName()) === $option->getDefault())
|
||||
->isNotEmpty();
|
||||
}
|
||||
|
||||
/**
|
||||
* Continue asking a question until an answer is provided.
|
||||
*
|
||||
* @param string $question
|
||||
* @return string
|
||||
*/
|
||||
private function askPersistently($question)
|
||||
{
|
||||
$answer = null;
|
||||
|
||||
while ($answer === null) {
|
||||
$answer = $this->components->ask($question);
|
||||
|
||||
if ($answer === null) {
|
||||
$this->components->error('The answer is required.');
|
||||
}
|
||||
}
|
||||
|
||||
return $answer;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user