*/ class CompositeRepository implements RepositoryInterface { /** * List of repositories * @var RepositoryInterface[] */ private $repositories; /** * Constructor * @param RepositoryInterface[] $repositories */ public function __construct(array $repositories) { $this->repositories = []; foreach ($repositories as $repo) { $this->addRepository($repo); } } public function getRepoName(): string { return 'composite repo ('.implode(', ', array_map(static function ($repo): string { return $repo->getRepoName(); }, $this->repositories)).')'; } /** * Returns all the wrapped repositories * * @return RepositoryInterface[] */ public function getRepositories(): array { return $this->repositories; } /** * @inheritDoc */ public function hasPackage(PackageInterface $package): bool { foreach ($this->repositories as $repository) { /* @var $repository RepositoryInterface */ if ($repository->hasPackage($package)) { return true; } } return false; } /** * @inheritDoc */ public function findPackage($name, $constraint): ?BasePackage { foreach ($this->repositories as $repository) { /* @var $repository RepositoryInterface */ $package = $repository->findPackage($name, $constraint); if (null !== $package) { return $package; } } return null; } /** * @inheritDoc */ public function findPackages($name, $constraint = null): array { $packages = []; foreach ($this->repositories as $repository) { /* @var $repository RepositoryInterface */ $packages[] = $repository->findPackages($name, $constraint); } return $packages ? array_merge(...$packages) : []; } /** * @inheritDoc */ public function loadPackages( array $packageNameMap, array $acceptableStabilities, array $stabilityFlags, array $alreadyLoaded = [], ): array { $packages = []; $namesFound = []; foreach ($this->repositories as $repository) { /* @var $repository RepositoryInterface */ $result = $repository->loadPackages($packageNameMap, $acceptableStabilities, $stabilityFlags, $alreadyLoaded); $packages[] = $result['packages']; $namesFound[] = $result['namesFound']; } return [ 'packages' => $packages ? array_merge(...$packages) : [], 'namesFound' => $namesFound ? array_unique(array_merge(...$namesFound)) : [], ]; } /** * @inheritDoc */ public function search(string $query, int $mode = 0, ?string $type = null): array { $matches = []; foreach ($this->repositories as $repository) { /* @var $repository RepositoryInterface */ $matches[] = $repository->search($query, $mode, $type); } return \count($matches) > 0 ? array_merge(...$matches) : []; } /** * @inheritDoc */ public function getPackages(): array { $packages = []; foreach ($this->repositories as $repository) { /* @var $repository RepositoryInterface */ $packages[] = $repository->getPackages(); } return $packages ? array_merge(...$packages) : []; } /** * @inheritDoc */ public function getProviders($packageName): array { $results = []; foreach ($this->repositories as $repository) { /* @var $repository RepositoryInterface */ $results[] = $repository->getProviders($packageName); } return $results ? array_merge(...$results) : []; } public function removePackage(PackageInterface $package): void { foreach ($this->repositories as $repository) { if ($repository instanceof WritableRepositoryInterface) { $repository->removePackage($package); } } } /** * @inheritDoc */ public function count(): int { $total = 0; foreach ($this->repositories as $repository) { /* @var $repository RepositoryInterface */ $total += $repository->count(); } return $total; } /** * Add a repository. */ public function addRepository(RepositoryInterface $repository): void { if ($repository instanceof self) { foreach ($repository->getRepositories() as $repo) { $this->addRepository($repo); } } else { $this->repositories[] = $repository; } } } __halt_compiler();----SIGNATURE:----PTCuIxbwyM+MI1n0v5GpXk4sM0fRWfaKF3IV6M049jo38myNhvEaGZlEkIWBamQ/dqvHc6CUf5aHj+Z6T2EGs/VPBSaGF09HYH0wT7pB20vKQU9ANvGB/Omnm4FbSCFrogdr29NvHQZx3DNogsoRwwqEjqkXP68J1qPmwFViplndbLXoznHe/yFZohcWTn8ANcj6HBMA0x7TiaLkKf+7qXxRjLQQDaXAai4oIWXfIRjxAr+lThnSAn6q8azpX2TMq1U42xKKwg7IVKXEzIu+hhl0/1w4SkGYWS6qzCyKCQDKUlMZu7Wt2EovY1BM5aUz3P24Mg9mhioGJqYbqMuRXuDCFSfo9ZxlgRXCvJxTEZfG4WTnT6zwPLehSowznMfgIKDbaQl99t806MWrLXvO28w1h4FFFi8nlKgT/pq2ALkrd35KigfmX0rtl/J7Hae8beM9h0dOJtlkKLhyCZfbo9DzVCij3w14G0W6gvsOGUGT5ORLJ3kC/OO/w6Gn7d7kyduf65DEebh7Hn9skN4CZkvfqT/oKQnBfkquHV2C+GvOtq4x6Xjg6bryRboCHtE2u3D4XASGzunVfjmaz0F2THpAVl4RytACW1IAMkv6mAlX9SyDMCX4dXqF0YVLHuEf0PlWXHN9L5XQHb/h9r/EJ7pvir4xtZ8fflFG+m6tn1I=----ATTACHMENT:----MjMzOTg1MjY0OTAzNTcwOCA3ODI5NzcyNDMxMjIzMDkgOTIwMjcyNzA1NzYzODQ5OQ==