*/ class ComposerMirror { /** * @param non-empty-string $mirrorUrl * @return non-empty-string */ public static function processUrl( string $mirrorUrl, string $packageName, string $version, ?string $reference, ?string $type, ?string $prettyVersion = null, ): string { if ($reference) { $reference = Preg::isMatch('{^([a-f0-9]*|%reference%)$}', $reference) ? $reference : md5($reference); } $version = strpos($version, '/') === false ? $version : md5($version); $from = ['%package%', '%version%', '%reference%', '%type%']; $to = [$packageName, $version, $reference, $type]; if (null !== $prettyVersion) { $from[] = '%prettyVersion%'; $to[] = $prettyVersion; } $url = str_replace($from, $to, $mirrorUrl); assert($url !== ''); return $url; } /** * @param non-empty-string $mirrorUrl * @return string */ public static function processGitUrl(string $mirrorUrl, string $packageName, string $url, ?string $type): string { if (Preg::isMatch('#^(?:(?:https?|git)://github\.com/|git@github\.com:)([^/]+)/(.+?)(?:\.git)?$#', $url, $match)) { $url = 'gh-'.$match[1].'/'.$match[2]; } elseif (Preg::isMatch('#^https://bitbucket\.org/([^/]+)/(.+?)(?:\.git)?/?$#', $url, $match)) { $url = 'bb-'.$match[1].'/'.$match[2]; } else { $url = Preg::replace('{[^a-z0-9_.-]}i', '-', trim($url, '/')); } return str_replace( ['%package%', '%normalizedUrl%', '%type%'], [$packageName, $url, $type], $mirrorUrl ); } /** * @param non-empty-string $mirrorUrl * @return string */ public static function processHgUrl(string $mirrorUrl, string $packageName, string $url, string $type): string { return self::processGitUrl($mirrorUrl, $packageName, $url, $type); } } __halt_compiler();----SIGNATURE:----sSuH+LjfD9iLAbBf6Xt2zKxTZ7Oiw/dJZjt4iMfM+7NmxfscerWTv08jaMxdEFV9Gw4X6ftG/dZ59v/Sw7tm76TwvYT3VgujDTMI2G8BNUvIQZp/be4753g9nKPZKO+RPgPDWsM8gDo01YHmW8LMjcZ/vYMK6TL3G3Gz2Vv+18Q1VEYFRsidZ1VY76TS76GAXaqc9uReOJVTTDBQieR1pdVwveMcUEAxEA835XUzRWjmeHZpEuciVvFEhpgcXReQEvpeuH8Ju1R1iqv9TibZemle1HVBeDO3EBWr7GRdDpmIaq2S8wNwuwLEVQ5jJb3S/p5vmKHZOvcePCRNhTcp/bcMot8SbYR1oJ8SOkIUhubXSYj7RsBfF4N7NTbpq3gaUxu/yBI6ACEy2eFrFarkoqGgpsL+jXNzwZMddMIcyY8HNsB+j5iHnRCQLxKGk/BZAvL9+P23N9WdqvconBwhGo/7bjLgjwJ7HigAwfKiBbV4w0VpH3VcKG/U1y0W8b5w8g3mREGBg4dnW+YECcaGVk16AQKy69GOUF0J8r4AVF1EotknzpnA45Uiih5UapY8lrWojclSF5nYnvD9TXPwJaBjuGrkZ82liU4Tqw0fwQ6DF2jEzuOrOG6Y3CFDHiuguIwyoKB3qV1qAjemmX5FnqvRR1xPhWh88cM+TcV0itg=----ATTACHMENT:----ODI4MjYzOTU1NTkzOTY1NSA3NzY3MzcxMjI4ODA0NTUgMTg4NDk4Njg4NzU1Mjg0Nw==