for testing and deploying your application
for finding and fixing issues
for empowering human code reviews
<?php
declare(strict_types=1);
namespace drupol\ComposerPackages\Exporter;
class Versions extends Exporter
{
public function exportToArray(): array
$data = $this->getEvent()->getComposer()->getLocker()->getLockData();
$packagesData = array_merge(
$data['packages'],
$data['packages-dev']
);
$packageNames = array_map(
static function (array $data) {
return $data['name'];
},
$packagesData
$packageVersions = array_map(
return $data['version'];
if (false !== $versions = array_combine($packageNames, $packageVersions)) {
ksort($versions);
$regex = $this->buildRegex($versions);
return compact('packageNames', 'regex');
}
return [];
private function buildRegex($versions): array
$groups = [];
foreach ($versions as $package => $version) {
[$prefix, $bundle] = explode('/', $package);
$groups[sprintf('(?i:%s)(?|', $prefix)][] = sprintf('/?(?i:%s) (*MARK:%s)|', $bundle, $version);
return $groups;