|
6 | 6 |
|
7 | 7 | namespace OpenApi\Console; |
8 | 8 |
|
9 | | -use OpenApi\Annotations as OA; |
| 9 | +use OpenApi\Builder; |
| 10 | +use OpenApi\Builder\Result; |
10 | 11 | use OpenApi\Generator; |
11 | 12 | use OpenApi\Utils\SourceFinder; |
12 | 13 | use Symfony\Component\Console\Attribute\AsCommand; |
@@ -45,50 +46,61 @@ public function __invoke(#[MapInput] GenerateInput $input, SymfonyStyle $io): in |
45 | 46 | return 0; |
46 | 47 | } |
47 | 48 |
|
48 | | - $openapi = $this->generate($input); |
| 49 | + $result = $this->generate($input); |
49 | 50 |
|
50 | 51 | if (!$input->output) { |
51 | 52 | if ($input->format->isJson()) { |
52 | | - echo $openapi->toJson(); |
| 53 | + echo $result->toJson(); |
53 | 54 | } else { |
54 | | - echo $openapi->toYaml(); |
| 55 | + echo $result->toYaml(); |
55 | 56 | } |
56 | 57 | echo "\n"; |
57 | 58 | } else { |
58 | 59 | $outputPath = $input->output; |
59 | 60 | if (is_dir($outputPath)) { |
60 | 61 | $outputPath .= '/openapi.yaml'; |
61 | 62 | } |
62 | | - $openapi->saveAs($outputPath, $input->format->value); |
| 63 | + $result->saveAs($outputPath, $input->format->value); |
63 | 64 | } |
64 | 65 |
|
65 | 66 | return $this->logger->hasErrored() ? 1 : 0; |
66 | 67 | } |
67 | 68 |
|
68 | | - private function generate(GenerateInput $input): OA\OpenApi |
| 69 | + protected function generate(GenerateInput $input): Result |
69 | 70 | { |
70 | | - $generator = new Generator($this->logger); |
71 | | - |
72 | | - foreach ($input->addProcessor as $processor) { |
73 | | - $class = '\OpenApi\Processors\\' . ucfirst((string) $processor); |
74 | | - if (class_exists($class)) { |
75 | | - $processor = new $class(); |
76 | | - } elseif (class_exists($processor)) { |
77 | | - $processor = new $processor(); |
78 | | - } |
79 | | - $generator->getProcessorPipeline()->add($processor); |
| 71 | + $builder = (new Builder()) |
| 72 | + ->addSource(new SourceFinder($input->paths, $input->exclude, $input->pattern)) |
| 73 | + ->setLogger($this->logger); |
| 74 | + |
| 75 | + if ($input->version !== null) { |
| 76 | + $builder->setVersion($input->version); |
80 | 77 | } |
81 | 78 |
|
82 | | - foreach ($input->removeProcessor as $processor) { |
83 | | - $class = class_exists($processor) |
84 | | - ? $processor |
85 | | - : '\OpenApi\Processors\\' . ucfirst((string) $processor); |
86 | | - $generator->getProcessorPipeline()->remove($class); |
| 79 | + if ($input->config || $input->addProcessor || $input->removeProcessor) { |
| 80 | + $builder->withGenerator(function (Generator $generator) use ($input): void { |
| 81 | + if ($input->config) { |
| 82 | + $generator->setConfig($input->config); |
| 83 | + } |
| 84 | + |
| 85 | + foreach ($input->addProcessor as $processor) { |
| 86 | + $class = '\OpenApi\Processors\\' . ucfirst((string) $processor); |
| 87 | + if (class_exists($class)) { |
| 88 | + $processor = new $class(); |
| 89 | + } elseif (class_exists($processor)) { |
| 90 | + $processor = new $processor(); |
| 91 | + } |
| 92 | + $generator->getProcessorPipeline()->add($processor); |
| 93 | + } |
| 94 | + |
| 95 | + foreach ($input->removeProcessor as $processor) { |
| 96 | + $class = class_exists($processor) |
| 97 | + ? $processor |
| 98 | + : '\OpenApi\Processors\\' . ucfirst((string) $processor); |
| 99 | + $generator->getProcessorPipeline()->remove($class); |
| 100 | + } |
| 101 | + }); |
87 | 102 | } |
88 | 103 |
|
89 | | - return $generator |
90 | | - ->setVersion($input->version) |
91 | | - ->setConfig($input->config) |
92 | | - ->generate(new SourceFinder($input->paths, $input->exclude, $input->pattern)); |
| 104 | + return $builder->build(); |
93 | 105 | } |
94 | 106 | } |
0 commit comments