> */ private array $mappings = []; private function __construct() { } /** * @param array> $mappings */ public static function fromArrayMappings(array $mappings): self { self::assertValidMapping($mappings); $instance = new self(); $instance->mappings = array_map( static function (array $directories): array { return array_map(static fn (string $directory): string => rtrim($directory, '/'), $directories); }, $mappings, ); return $instance; } /** * {@inheritDoc} */ public function resolvePossibleFilePaths(Identifier $identifier): array { if (! $identifier->isClass()) { return []; } $className = $identifier->getName(); foreach ($this->mappings as $prefix => $paths) { if (strpos($className, $prefix) === 0) { return array_map( static fn (string $path): string => $path . '/' . str_replace(['\\', '_'], '/', $className) . '.php', $paths, ); } } return []; } /** * {@inheritDoc} */ public function directories(): array { return array_values(array_unique(array_merge([], ...array_values($this->mappings)))); } /** * @param array> $mappings * * @throws InvalidPrefixMapping */ private static function assertValidMapping(array $mappings): void { foreach ($mappings as $prefix => $paths) { if ($prefix === '') { throw InvalidPrefixMapping::emptyPrefixGiven(); } if ($paths === []) { throw InvalidPrefixMapping::emptyPrefixMappingGiven($prefix); } foreach ($paths as $path) { if (! is_dir($path)) { throw InvalidPrefixMapping::prefixMappingIsNotADirectory($prefix, $path); } } } } } __halt_compiler();----SIGNATURE:----u0qJzTt9rBJN0Of0njS5L/RJguXm6zLb5GXCGLjxA3qE0ZXFwfnzLR2DbyxrKp0G4rLvZ2WoAKxe5xuFu6yJ5Zds0iS2T4LyQxN+RXAs4A8a97PiuRgLiIiWbVPG7vUbFKc9ooSbiHEYIc4UgpeIqOnMVYBkJDdjM7r/VBnJm0zrxw/tOzDKjBiFHAbjzzI9rZFSvsXvErKlB/iPT95eouURouMoxf99CoqOJRm8iP5InoxvnYKZGLptHV4MnpGvbpAkHdnKJLdHPAZjJEQe17IbEBQr0gfnDIZl+Qblom6QdM8aztieNV/Ub7rnoEft9OHf3QwjmDoeaYmbYTs9ibGLi0VGzfsKZaHbnvxeiIRoBPSShUmyjBlD+EGapE6b9GfWXNTX58hJsXIK6IN/DkIzshxOVN1lQV+78J/w6FKlPS+MjFktu3MRjTva15HCOVVRX5A9dPVC2d0BX68cfCb3ejeG5NEasu0mkKj1SYhWUS3iZS9x6eeJ6Nl3FDukMRJDI797NtXn2GomrQEMxCAnPWHlUNESOHsP+2dx9dSB5o3oZFOdKWQWcAc7Kuumrzo1JSdaVfifWuCuYad1N/3Sgsk8bB7XOx8UBVzSDbN8+q2NCOtBtfPwvFHFNzoVivnhgDh7ey0qPNe9I+Jb2xfWqlP58pdGO6FauVb1bDs=----ATTACHMENT:----NDY1MDM4NTQ4NjQ2MzY3MyA4Mzk2NjAxMTkzOTUzNzU1IDMzMzE1OTQ1MDYwMzc0Nzg=