Skip to main content
Drupal API
User account menu
  • Log in

Breadcrumb

  1. Drupal Core 11.1.x
  2. JsonDescriptor.php

class JsonDescriptor

JSON descriptor.

@author Jean-François Simon <contact@jfsimon.fr>

@internal

Hierarchy

  • class \Symfony\Component\Console\Descriptor\Descriptor implements \Symfony\Component\Console\Descriptor\DescriptorInterface
    • class \Symfony\Component\Console\Descriptor\JsonDescriptor extends \Symfony\Component\Console\Descriptor\Descriptor

Expanded class hierarchy of JsonDescriptor

1 file declares its use of JsonDescriptor
DescriptorHelper.php in vendor/symfony/console/Helper/DescriptorHelper.php

File

vendor/symfony/console/Descriptor/JsonDescriptor.php, line 27

Namespace

Symfony\Component\Console\Descriptor
View source
class JsonDescriptor extends Descriptor {
    protected function describeInputArgument(InputArgument $argument, array $options = []) : void {
        $this->writeData($this->getInputArgumentData($argument), $options);
    }
    protected function describeInputOption(InputOption $option, array $options = []) : void {
        $this->writeData($this->getInputOptionData($option), $options);
        if ($option->isNegatable()) {
            $this->writeData($this->getInputOptionData($option, true), $options);
        }
    }
    protected function describeInputDefinition(InputDefinition $definition, array $options = []) : void {
        $this->writeData($this->getInputDefinitionData($definition), $options);
    }
    protected function describeCommand(Command $command, array $options = []) : void {
        $this->writeData($this->getCommandData($command, $options['short'] ?? false), $options);
    }
    protected function describeApplication(Application $application, array $options = []) : void {
        $describedNamespace = $options['namespace'] ?? null;
        $description = new ApplicationDescription($application, $describedNamespace, true);
        $commands = [];
        foreach ($description->getCommands() as $command) {
            $commands[] = $this->getCommandData($command, $options['short'] ?? false);
        }
        $data = [];
        if ('UNKNOWN' !== $application->getName()) {
            $data['application']['name'] = $application->getName();
            if ('UNKNOWN' !== $application->getVersion()) {
                $data['application']['version'] = $application->getVersion();
            }
        }
        $data['commands'] = $commands;
        if ($describedNamespace) {
            $data['namespace'] = $describedNamespace;
        }
        else {
            $data['namespaces'] = array_values($description->getNamespaces());
        }
        $this->writeData($data, $options);
    }
    
    /**
     * Writes data as json.
     */
    private function writeData(array $data, array $options) : void {
        $flags = $options['json_encoding'] ?? 0;
        $this->write(json_encode($data, $flags));
    }
    private function getInputArgumentData(InputArgument $argument) : array {
        return [
            'name' => $argument->getName(),
            'is_required' => $argument->isRequired(),
            'is_array' => $argument->isArray(),
            'description' => preg_replace('/\\s*[\\r\\n]\\s*/', ' ', $argument->getDescription()),
            'default' => \INF === $argument->getDefault() ? 'INF' : $argument->getDefault(),
        ];
    }
    private function getInputOptionData(InputOption $option, bool $negated = false) : array {
        return $negated ? [
            'name' => '--no-' . $option->getName(),
            'shortcut' => '',
            'accept_value' => false,
            'is_value_required' => false,
            'is_multiple' => false,
            'description' => 'Negate the "--' . $option->getName() . '" option',
            'default' => false,
        ] : [
            'name' => '--' . $option->getName(),
            'shortcut' => $option->getShortcut() ? '-' . str_replace('|', '|-', $option->getShortcut()) : '',
            'accept_value' => $option->acceptValue(),
            'is_value_required' => $option->isValueRequired(),
            'is_multiple' => $option->isArray(),
            'description' => preg_replace('/\\s*[\\r\\n]\\s*/', ' ', $option->getDescription()),
            'default' => \INF === $option->getDefault() ? 'INF' : $option->getDefault(),
        ];
    }
    private function getInputDefinitionData(InputDefinition $definition) : array {
        $inputArguments = [];
        foreach ($definition->getArguments() as $name => $argument) {
            $inputArguments[$name] = $this->getInputArgumentData($argument);
        }
        $inputOptions = [];
        foreach ($definition->getOptions() as $name => $option) {
            $inputOptions[$name] = $this->getInputOptionData($option);
            if ($option->isNegatable()) {
                $inputOptions['no-' . $name] = $this->getInputOptionData($option, true);
            }
        }
        return [
            'arguments' => $inputArguments,
            'options' => $inputOptions,
        ];
    }
    private function getCommandData(Command $command, bool $short = false) : array {
        $data = [
            'name' => $command->getName(),
            'description' => $command->getDescription(),
        ];
        if ($short) {
            $data += [
                'usage' => $command->getAliases(),
            ];
        }
        else {
            $command->mergeApplicationDefinition(false);
            $data += [
                'usage' => array_merge([
                    $command->getSynopsis(),
                ], $command->getUsages(), $command->getAliases()),
                'help' => $command->getProcessedHelp(),
                'definition' => $this->getInputDefinitionData($command->getDefinition()),
            ];
        }
        $data['hidden'] = $command->isHidden();
        return $data;
    }

}

Members

Title Sort descending Modifiers Object type Summary Overriden Title Overrides
Descriptor::$output protected property
Descriptor::describe public function Overrides DescriptorInterface::describe 2
Descriptor::write protected function 2
JsonDescriptor::describeApplication protected function Describes an Application instance. Overrides Descriptor::describeApplication
JsonDescriptor::describeCommand protected function Describes a Command instance. Overrides Descriptor::describeCommand
JsonDescriptor::describeInputArgument protected function Describes an InputArgument instance. Overrides Descriptor::describeInputArgument
JsonDescriptor::describeInputDefinition protected function Describes an InputDefinition instance. Overrides Descriptor::describeInputDefinition
JsonDescriptor::describeInputOption protected function Describes an InputOption instance. Overrides Descriptor::describeInputOption
JsonDescriptor::getCommandData private function
JsonDescriptor::getInputArgumentData private function
JsonDescriptor::getInputDefinitionData private function
JsonDescriptor::getInputOptionData private function
JsonDescriptor::writeData private function Writes data as json.

API Navigation

  • Drupal Core 11.1.x
  • Topics
  • Classes
  • Functions
  • Constants
  • Globals
  • Files
  • Namespaces
  • Deprecated
  • Services
RSS feed
Powered by Drupal