Viewing file: LivewireComponentsFinder.php (2.19 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php
namespace Livewire;
use Exception; use ReflectionClass; use Illuminate\Filesystem\Filesystem; use Symfony\Component\Finder\SplFileInfo;
class LivewireComponentsFinder { protected $path; protected $files; protected $manifest; protected $manifestPath;
public function __construct(Filesystem $files, $manifestPath, $path) { $this->files = $files; $this->path = $path; $this->manifestPath = $manifestPath; }
public function find($alias) { $manifest = $this->getManifest();
return $manifest[$alias] ?? $manifest["{$alias}.index"] ?? null; }
public function getManifest() { if (! is_null($this->manifest)) { return $this->manifest; }
if (! file_exists($this->manifestPath)) { $this->build(); }
return $this->manifest = $this->files->getRequire($this->manifestPath); }
public function build() { $this->manifest = $this->getClassNames() ->mapWithKeys(function ($class) { return [$class::getName() => $class]; })->toArray();
$this->write($this->manifest);
return $this; }
protected function write(array $manifest) { if (! is_writable(dirname($this->manifestPath))) { throw new Exception('The '.dirname($this->manifestPath).' directory must be present and writable.'); }
$this->files->put($this->manifestPath, '<?php return '.var_export($manifest, true).';', true); }
public function getClassNames() { if (! $this->files->exists($this->path)) { return collect(); }
return collect($this->files->allFiles($this->path)) ->map(function (SplFileInfo $file) { return app()->getNamespace(). str($file->getPathname()) ->after(app_path().'/') ->replace(['/', '.php'], ['\\', ''])->__toString(); }) ->filter(function (string $class) { return is_subclass_of($class, Component::class) && ! (new ReflectionClass($class))->isAbstract(); }); } }
|