*/ 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 : hash('md5', $reference); } $version = strpos($version, '/') === false ? $version : hash('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:----I12dXgpk9NgQFqDdBs0wBxtcahkcJ6B+gVcUlA0/SZU7VbJXfz/7b/M7Do0pgg6hVgCAd0KV66dUDuIarfP3S0qV7uulBU4bNqXgLUq3WoouXxk5eqLyIVQYVuiFwDXdBs4O5ziQT/sZmwhvkhifb1axth2sevZmPaK37Az4ZzcakBDatFQ+ZvDHE1LFWqd8Uxz+ps+F0IhlVgG4yAASPVTaoLL2BYmcq9YAXZvtm2A7Uy8STSntzdknga2tLh9FnI4yW39C0SmdWfUm8bhE1ugKzMgxGy7d1g00AoybfRkuEuWhbXuafL6W28E9TBDH9uP7Ym48ABE+AWFJibpP937TwBqApVdWrFIk8JfdET5dTPO25LJkYzGaHWquV4irQdabAzh4olBAitIdN48F/ZFSp4xFDCHz1SgnAiH2DxVHteu0/eW2fxuKP6ZnabTw4cOgcEQXMooYe8bHcYdEJg2R4qHUlOlHFYV7wKjdlfR40AUQLWpOhGfSKQjd/L/6rRTuru5VMbNcx2U4RIazjPhYbi6aL8/1cQzS6h0x33aTVEi4zhw5oEigFa6XS9toiJ3rYjH/0/BZS1/yf+k3wHZ9WYu1NOKu7PJJraaqBWhTEQe64PF6HJ2XyPuh8dTTEPJjvTE5pS4JUUG8ESGgYYbK2b80HlJ7JVTOe7LR//k=----ATTACHMENT:----MTk1MTMyNDUxMTc5Nzg0NCA2NzYyMzExOTg4ODM5ODI1IDQwMTkwNDM5MzE3NTY1MDQ=