addArgument('config-name', InputArgument::REQUIRED, 'Your config to be sorted, you can sort "lib", "source" and "ext".'); } /** * @throws ValidationException * @throws FileSystemException */ public function handle(): int { switch ($name = $this->getArgument('config-name')) { case 'lib': $file = json_decode(FileSystem::readFile(ROOT_DIR . '/config/lib.json'), true); ConfigValidator::validateLibs($file); ksort($file); if (!file_put_contents(ROOT_DIR . '/config/lib.json', json_encode($file, JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE) . "\n")) { $this->output->writeln('Write file lib.json failed!'); return static::FAILURE; } break; case 'source': $file = json_decode(FileSystem::readFile(ROOT_DIR . '/config/source.json'), true); ConfigValidator::validateSource($file); uksort($file, fn ($a, $b) => $a === 'php-src' ? -1 : ($b === 'php-src' ? 1 : ($a < $b ? -1 : 1))); if (!file_put_contents(ROOT_DIR . '/config/source.json', json_encode($file, JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE) . "\n")) { $this->output->writeln('Write file source.json failed!'); return static::FAILURE; } break; case 'ext': $file = json_decode(FileSystem::readFile(ROOT_DIR . '/config/ext.json'), true); ConfigValidator::validateExts($file); ksort($file); if (!file_put_contents(ROOT_DIR . '/config/ext.json', json_encode($file, JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE) . "\n")) { $this->output->writeln('Write file ext.json failed!'); return static::FAILURE; } break; default: $this->output->writeln("invalid config name: {$name}"); return 1; } $this->output->writeln('sort success'); return static::SUCCESS; } }