GenerateInstalledSixShopCommand.php 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. <?php
  2. declare(strict_types=1);
  3. namespace SixShop\Core\Command;
  4. use Composer\InstalledVersions;
  5. use SixShop\Core\Plugin;
  6. use think\console\Command;
  7. class GenerateInstalledSixShopCommand extends Command
  8. {
  9. public function configure(): void
  10. {
  11. $this->setName('generate:installed-sixshop')
  12. ->setDescription('Generate vendor/composer/installedSixShop.php');
  13. }
  14. public function handle(): void
  15. {
  16. $installedSixShopExtensions = [
  17. 'root' => [],
  18. 'versions' => []
  19. ];
  20. $referenceMap = [];
  21. foreach (InstalledVersions::getAllRawData() as $installed) {
  22. foreach ($installed['versions'] as $name => $package) {
  23. if (isset($package['type']) && $package['type'] === Plugin::EXTENSION_TYPE) {
  24. $installedSixShopExtensions['versions'][$name] = $package;
  25. $referenceMap[$name] = $package['reference'];
  26. }
  27. }
  28. }
  29. $installedSixShopExtensions['root']['reference'] = hash('md5', json_encode($referenceMap));
  30. $filePath = dirname(InstalledVersions::getInstallPath('composer/composer'), 2) . '/installedSixShop.php';
  31. file_put_contents($filePath, '<?php return ' . var_export($installedSixShopExtensions, true) . ';');
  32. $this->output->writeln("Generated: $filePath");
  33. }
  34. }