name: Input
class_comment: null
dependencies:
- name: InvalidArgumentException
  type: class
  source: Symfony\Component\Console\Exception\InvalidArgumentException
- name: RuntimeException
  type: class
  source: Symfony\Component\Console\Exception\RuntimeException
properties:
- name: stream
  visibility: protected
  comment: '# * Input is the base class for all concrete Input classes.

    # *

    # * Three concrete classes are provided by default:

    # *

    # *  * `ArgvInput`: The input comes from the CLI arguments (argv)

    # *  * `StringInput`: The input is provided as a string

    # *  * `ArrayInput`: The input is provided as an array

    # *

    # * @author Fabien Potencier <fabien@symfony.com>

    # */

    # abstract class Input implements InputInterface, StreamableInputInterface

    # {

    # protected InputDefinition $definition;

    # /** @var resource'
methods:
- name: escapeToken
  visibility: public
  parameters:
  - name: token
  comment: "# * Input is the base class for all concrete Input classes.\n# *\n# *\
    \ Three concrete classes are provided by default:\n# *\n# *  * `ArgvInput`: The\
    \ input comes from the CLI arguments (argv)\n# *  * `StringInput`: The input is\
    \ provided as a string\n# *  * `ArrayInput`: The input is provided as an array\n\
    # *\n# * @author Fabien Potencier <fabien@symfony.com>\n# */\n# abstract class\
    \ Input implements InputInterface, StreamableInputInterface\n# {\n# protected\
    \ InputDefinition $definition;\n# /** @var resource */\n# protected $stream;\n\
    # protected array $options = [];\n# protected array $arguments = [];\n# protected\
    \ bool $interactive = true;\n# \n# public function __construct(?InputDefinition\
    \ $definition = null)\n# {\n# if (null === $definition) {\n# $this->definition\
    \ = new InputDefinition();\n# } else {\n# $this->bind($definition);\n# $this->validate();\n\
    # }\n# }\n# \n# public function bind(InputDefinition $definition): void\n# {\n\
    # $this->arguments = [];\n# $this->options = [];\n# $this->definition = $definition;\n\
    # \n# $this->parse();\n# }\n# \n# /**\n# * Processes command line arguments.\n\
    # */\n# abstract protected function parse(): void;\n# \n# public function validate():\
    \ void\n# {\n# $definition = $this->definition;\n# $givenArguments = $this->arguments;\n\
    # \n# $missingArguments = array_filter(array_keys($definition->getArguments()),\
    \ fn ($argument) => !\\array_key_exists($argument, $givenArguments) && $definition->getArgument($argument)->isRequired());\n\
    # \n# if (\\count($missingArguments) > 0) {\n# throw new RuntimeException(\\sprintf('Not\
    \ enough arguments (missing: \"%s\").', implode(', ', $missingArguments)));\n\
    # }\n# }\n# \n# public function isInteractive(): bool\n# {\n# return $this->interactive;\n\
    # }\n# \n# public function setInteractive(bool $interactive): void\n# {\n# $this->interactive\
    \ = $interactive;\n# }\n# \n# public function getArguments(): array\n# {\n# return\
    \ array_merge($this->definition->getArgumentDefaults(), $this->arguments);\n#\
    \ }\n# \n# public function getArgument(string $name): mixed\n# {\n# if (!$this->definition->hasArgument($name))\
    \ {\n# throw new InvalidArgumentException(\\sprintf('The \"%s\" argument does\
    \ not exist.', $name));\n# }\n# \n# return $this->arguments[$name] ?? $this->definition->getArgument($name)->getDefault();\n\
    # }\n# \n# public function setArgument(string $name, mixed $value): void\n# {\n\
    # if (!$this->definition->hasArgument($name)) {\n# throw new InvalidArgumentException(\\\
    sprintf('The \"%s\" argument does not exist.', $name));\n# }\n# \n# $this->arguments[$name]\
    \ = $value;\n# }\n# \n# public function hasArgument(string $name): bool\n# {\n\
    # return $this->definition->hasArgument($name);\n# }\n# \n# public function getOptions():\
    \ array\n# {\n# return array_merge($this->definition->getOptionDefaults(), $this->options);\n\
    # }\n# \n# public function getOption(string $name): mixed\n# {\n# if ($this->definition->hasNegation($name))\
    \ {\n# if (null === $value = $this->getOption($this->definition->negationToName($name)))\
    \ {\n# return $value;\n# }\n# \n# return !$value;\n# }\n# \n# if (!$this->definition->hasOption($name))\
    \ {\n# throw new InvalidArgumentException(\\sprintf('The \"%s\" option does not\
    \ exist.', $name));\n# }\n# \n# return \\array_key_exists($name, $this->options)\
    \ ? $this->options[$name] : $this->definition->getOption($name)->getDefault();\n\
    # }\n# \n# public function setOption(string $name, mixed $value): void\n# {\n\
    # if ($this->definition->hasNegation($name)) {\n# $this->options[$this->definition->negationToName($name)]\
    \ = !$value;\n# \n# return;\n# } elseif (!$this->definition->hasOption($name))\
    \ {\n# throw new InvalidArgumentException(\\sprintf('The \"%s\" option does not\
    \ exist.', $name));\n# }\n# \n# $this->options[$name] = $value;\n# }\n# \n# public\
    \ function hasOption(string $name): bool\n# {\n# return $this->definition->hasOption($name)\
    \ || $this->definition->hasNegation($name);\n# }\n# \n# /**\n# * Escapes a token\
    \ through escapeshellarg if it contains unsafe chars."
- name: setStream
  visibility: public
  parameters:
  - name: stream
  comment: '# * @param resource $stream'
- name: getStream
  visibility: public
  parameters: []
  comment: '# * @return resource'
traits:
- Symfony\Component\Console\Exception\InvalidArgumentException
- Symfony\Component\Console\Exception\RuntimeException
interfaces:
- InputInterface