* * @internal */ class JsonDescriptor extends Descriptor { /** * {@inheritdoc} */ protected function describeInputArgument(InputArgument $argument, array $options = []) { $this->writeData($this->getInputArgumentData($argument), $options); } /** * {@inheritdoc} */ protected function describeInputOption(InputOption $option, array $options = []) { $this->writeData($this->getInputOptionData($option), $options); if ($option->isNegatable()) { $this->writeData($this->getInputOptionData($option, true), $options); } } /** * {@inheritdoc} */ protected function describeInputDefinition(InputDefinition $definition, array $options = []) { $this->writeData($this->getInputDefinitionData($definition), $options); } /** * {@inheritdoc} */ protected function describeCommand(Command $command, array $options = []) { $this->writeData($this->getCommandData($command, $options['short'] ?? false), $options); } /** * {@inheritdoc} */ protected function describeApplication(Application $application, array $options = []) { $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) { $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; } } __halt_compiler();----SIGNATURE:----GEoW9s905m+c12n4jQzVhq5VrmX+Ibq54GqHeOxwE1P57v780sZrv7sC90QRhW2WzXACHgxT3hpPFXzZxKBV8IoEsE1drUaavKJZr4w+saexFyE8rKlWQN6lk/MkVC5q6KW1r5rwh2JWfnfGNT9qgGvpBGpHQsca3pgu50msfarsHpCuh25Aut5KBD+/d0O/GDG1W8NlFPe/MAuadeQkMGagBjZid1LLg20tL/kVXF57ZRousC9Vub31OePj4b9wkPUCc8OesIM69klaeQSBm75biji2n9a+/FeGcfTuAloFptZgXXTAis2bjAwNsT3Z6BdNvPblFukWN4U5VE2yibHrKCEbB66SFVFMHmx0zvyDRj+0kOXFusiFHpgQs5ldHCJac2JP0b4mK2KV+Y2beeCzoUqotZxhUXk9WLlH9l85PdV6WRiyPYjTyRjd/Sc5mzADY/Wkyb7rYz+lV7EC55X1kdIZulotKXnAGgBePqAbgmqF/tS2X5o8fCcxbCWMMn3bYX6N58SeVjEl/o22AmJdMEdMEe9FNplsJ942DyPl9cvkRA2MBb7RzHXkHrdWS4NiBvgP8JB0aaQHpEX7mY02YXM2i9Wcq2+ypgw1q1C20ZAKAkJgiXl8t40HJ9iTfEaGdh2kdLtAMz0O/HEdEXzXWSrKxxK2FA4f5aaHhHE=----ATTACHMENT:----OTc1NjQxNTU1MzU3MzcyMSA5NzYyNDE2MTkwMjY1MTggOTgyMDgwNTU5Mjc1NTY4