diff --git a/vendor/_laravel_ide/discover-cfae44312a91110c691459b4106ded61.php b/vendor/_laravel_ide/discover-cfae44312a91110c691459b4106ded61.php deleted file mode 100644 index 6b4c8dfad..000000000 --- a/vendor/_laravel_ide/discover-cfae44312a91110c691459b4106ded61.php +++ /dev/null @@ -1,440 +0,0 @@ -getMessage()); - } -} - -try { - $app = require_once __DIR__ . '/../../bootstrap/app.php'; -} catch (\Throwable $e) { - LaravelVsCode::startupError($e); - exit(1); -} - -$app->register(new class($app) extends \Illuminate\Support\ServiceProvider -{ - public function boot() - { - config([ - 'logging.channels.null' => [ - 'driver' => 'monolog', - 'handler' => \Monolog\Handler\NullHandler::class, - ], - 'logging.default' => 'null', - ]); - } -}); - -try { - $kernel = $app->make(Illuminate\Contracts\Console\Kernel::class); - $kernel->bootstrap(); -} catch (\Throwable $e) { - LaravelVsCode::startupError($e); - exit(1); -} - -echo LaravelVsCode::outputMarker('START_OUTPUT'); - -$components = new class { - protected $autoloaded = []; - - protected $prefixes = []; - - public function __construct() - { - $this->autoloaded = require base_path("vendor/composer/autoload_psr4.php"); - } - - public function all() - { - $components = collect(array_merge( - $this->getStandardClasses(), - $this->getStandardViews(), - $this->getNamespaced(), - $this->getAnonymousNamespaced(), - $this->getAnonymous(), - $this->getAliases(), - $this->getVendorComponents(), - ))->groupBy('key')->pipe($this->setProps(...))->map(fn($items) => [ - 'isVendor' => $items->first()['isVendor'], - 'paths' => $items->pluck('path')->unique()->values(), - 'props' => $this->formatProps($items), - ]); - - return [ - 'components' => $components, - 'prefixes' => $this->prefixes, - ]; - } - - protected function formatProps($items) - { - $props = $items->pluck('props'); - - if ($codeBlock = $props->firstWhere(fn ($prop) => is_string($prop))) { - return $codeBlock; - } - - return $props->values()->filter()->flatMap(fn($i) => $i); - } - - protected function getStandardViews() - { - $path = resource_path('views/components'); - - return $this->findFiles($path, 'blade.php'); - } - - protected function findFiles($path, $extension, $keyCallback = null) - { - if (!is_dir($path)) { - return []; - } - - $files = \Symfony\Component\Finder\Finder::create() - ->files() - ->name("*." . $extension) - ->in($path); - $components = []; - $pathRealPath = realpath($path); - - foreach ($files as $file) { - $realPath = $file->getRealPath(); - - $key = str($realPath) - ->replace($pathRealPath, '') - ->ltrim('/\\') - ->replace('.' . $extension, '') - ->replace(['/', '\\'], '.') - ->pipe(fn($str) => $this->handleIndexComponents($str)); - - $components[] = [ - "path" => LaravelVsCode::relativePath($realPath), - "isVendor" => LaravelVsCode::isVendor($realPath), - "key" => $keyCallback ? $keyCallback($key) : $key, - ]; - } - - return $components; - } - - protected function getStandardClasses() - { - $path = app_path('View/Components'); - - $appNamespace = collect($this->autoloaded) - ->filter(fn($paths) => in_array(app_path(), $paths)) - ->keys() - ->first() ?? ''; - - return collect($this->findFiles( - $path, - 'php', - fn($key) => $key->explode('.') - ->map(fn($p) => \Illuminate\Support\Str::kebab($p)) - ->implode('.'), - ))->map(function ($item) use ($appNamespace) { - $class = str($item['path']) - ->after('View/Components/') - ->replace('.php', '') - ->replace('/', '\\') - ->prepend($appNamespace . 'View\\Components\\') - ->toString(); - - if (!class_exists($class)) { - return $item; - } - - $reflection = new \ReflectionClass($class); - $parameters = collect($reflection->getConstructor()?->getParameters() ?? []) - ->filter(fn($p) => $p->isPromoted()) - ->flatMap(fn($p) => [$p->getName() => $p->isOptional() ? $p->getDefaultValue() : null]) - ->all(); - - $props = collect($reflection->getProperties()) - ->filter(fn($p) => $p->isPublic() && $p->getDeclaringClass()->getName() === $class) - ->map(fn($p) => [ - 'name' => \Illuminate\Support\Str::kebab($p->getName()), - 'type' => (string) ($p->getType() ?? 'mixed'), - 'default' => $p->getDefaultValue() ?? $parameters[$p->getName()] ?? null, - ]); - - [$except, $props] = $props->partition(fn($p) => $p['name'] === 'except'); - - if ($except->isNotEmpty()) { - $except = $except->first()['default']; - $props = $props->reject(fn($p) => in_array($p['name'], $except)); - } - - return [ - ...$item, - 'props' => $props, - ]; - })->all(); - } - - protected function getAliases() - { - $components = []; - - foreach (\Illuminate\Support\Facades\Blade::getClassComponentAliases() as $key => $class) { - if (class_exists($class)) { - $reflection = new ReflectionClass($class); - - $components[] = [ - "path" => LaravelVsCode::relativePath($reflection->getFileName()), - "isVendor" => LaravelVsCode::isVendor($reflection->getFileName()), - "key" => $key, - ]; - } - } - - return $components; - } - - protected function getAnonymousNamespaced() - { - $components = []; - - foreach (\Illuminate\Support\Facades\Blade::getAnonymousComponentNamespaces() as $key => $dir) { - $path = collect([$dir, resource_path('views/' . $dir)])->first(fn($p) => is_dir($p)); - - if (!$path) { - continue; - } - - array_push( - $components, - ...$this->findFiles( - $path, - 'blade.php', - fn($k) => $k->kebab()->prepend($key . "::"), - ) - ); - } - - return $components; - } - - protected function getAnonymous() - { - $components = []; - - foreach (\Illuminate\Support\Facades\Blade::getAnonymousComponentPaths() as $item) { - array_push( - $components, - ...$this->findFiles( - $item['path'], - 'blade.php', - function (\Illuminate\Support\Stringable $key) use ($item) { - $prefix = $item['prefix'] ? $item['prefix'] . '::' : ''; - $key = $key->kebab(); - $keys = []; - - $keys[] = $key->prepend($prefix); - - if ($item['prefix'] === 'flux') { - $keys[] = $key->prepend('flux:'); - } - - return $keys; - }, - ) - ); - - if (!in_array($item['prefix'], $this->prefixes)) { - $this->prefixes[] = $item['prefix']; - } - } - - return $components; - } - - protected function getVendorComponents(): array - { - $components = []; - - /** @var \Illuminate\View\Factory $view */ - $view = \Illuminate\Support\Facades\App::make('view'); - - /** @var \Illuminate\View\FileViewFinder $finder */ - $finder = $view->getFinder(); - - /** @var array> $views */ - $views = $finder->getHints(); - - foreach ($views as $key => $paths) { - foreach ($paths as $path) { - $path .= '/components'; - - if (!is_dir($path)) { - continue; - } - - array_push( - $components, - ...$this->findFiles( - $path, - 'blade.php', - fn (\Illuminate\Support\Stringable $k) => $k->kebab()->prepend($key.'::'), - ) - ); - } - } - - return $components; - } - - protected function handleIndexComponents($str) - { - if ($str->endsWith('.index')) { - return $str->replaceLast('.index', ''); - } - - if (!$str->contains('.')) { - return $str; - } - - $parts = $str->explode('.'); - - if ($parts->slice(-2)->unique()->count() === 1) { - $parts->pop(); - - return str($parts->implode('.')); - } - - return $str; - } - - protected function getNamespaced() - { - $namespaced = \Illuminate\Support\Facades\Blade::getClassComponentNamespaces(); - $components = []; - - foreach ($namespaced as $key => $classNamespace) { - $path = $this->getNamespacePath($classNamespace); - - if (!$path) { - continue; - } - - array_push( - $components, - ...$this->findFiles( - $path, - 'php', - fn($k) => $k->kebab()->prepend($key . "::"), - ) - ); - } - - return $components; - } - - protected function getNamespacePath($classNamespace) - { - foreach ($this->autoloaded as $ns => $paths) { - if (!str_starts_with($classNamespace, $ns)) { - continue; - } - - foreach ($paths as $p) { - $dir = str($classNamespace) - ->replace($ns, '') - ->replace('\\', '/') - ->prepend($p . DIRECTORY_SEPARATOR) - ->toString(); - - if (is_dir($dir)) { - return $dir; - } - } - - return null; - } - - return null; - } - - protected function setProps($groups) - { - try { - $compiler = app('blade.compiler'); - } catch (\Throwable $e) { - return $groups; - } - - return $groups->map(function ($group) use ($compiler) { - return $group->transform(function ($component) use ($compiler) { - if (isset($component['props'])) { - return $component; - } - - if (!str($component['path'])->endsWith('.blade.php')) { - return $component; - } - - if (! $props = $this->parseProps($compiler, $component)) { - return $component; - } - - return array_merge($component, ['props' => $props]); - }); - }); - } - - protected function parseProps($compiler, array $component): ?string - { - $content = file_get_contents(base_path($component['path'])); - - $result = ''; - - $compiler->directive('props', function ($expression) use (&$result) { - return $result = $expression; - }); - - $compiler->compileString($content); - - if (empty($result)) { - return null; - } - - return '@props('.$result.')'; - } -}; - -echo json_encode($components->all()); - -echo LaravelVsCode::outputMarker('END_OUTPUT'); - -exit(0); diff --git a/vendor/_laravel_ide/discover-ec2e9975ebf5755f76a162b3dce99361.php b/vendor/_laravel_ide/discover-ec2e9975ebf5755f76a162b3dce99361.php deleted file mode 100644 index 79ed3de8a..000000000 --- a/vendor/_laravel_ide/discover-ec2e9975ebf5755f76a162b3dce99361.php +++ /dev/null @@ -1,350 +0,0 @@ -getMessage()); - } -} - -try { - $app = require_once __DIR__ . '/../../bootstrap/app.php'; -} catch (\Throwable $e) { - LaravelVsCode::startupError($e); - exit(1); -} - -$app->register(new class($app) extends \Illuminate\Support\ServiceProvider -{ - public function boot() - { - config([ - 'logging.channels.null' => [ - 'driver' => 'monolog', - 'handler' => \Monolog\Handler\NullHandler::class, - ], - 'logging.default' => 'null', - ]); - } -}); - -try { - $kernel = $app->make(Illuminate\Contracts\Console\Kernel::class); - $kernel->bootstrap(); -} catch (\Throwable $e) { - LaravelVsCode::startupError($e); - exit(1); -} - -echo LaravelVsCode::outputMarker('START_OUTPUT'); - -$livewire = new class { - protected $namespaces; - protected $paths; - protected $extensions = [".blade.php", ".php", ".js", ".global.css", ".css", ".test.php"]; - - public function __construct() - { - $this->namespaces = collect( - config("livewire.component_namespaces", []) - )->map(LaravelVsCode::relativePath(...)); - - $this->paths = collect($this->namespaces->values()) - ->merge(config("livewire.component_locations", [])) - ->unique() - ->map(LaravelVsCode::relativePath(...)); - } - - public function parse(\Illuminate\Support\Collection $views) - { - return $this->isVersionFour() - ? $this->parseLivewireFour($views) - : $this->parseLivewireThree($views); - } - - protected function parseLivewireFour(\Illuminate\Support\Collection $views) - { - return $views - ->map(function (array $view) { - if (!$this->pathExists($view["path"])) { - return $view; - } - - if (is_null($component = $this->getComponent($key = $this->key($view)))) { - return $view; - } - - $files = $this->files($view); - - if (count($files) === 1 && !str($view['path'])->endsWith('.blade.php')) { - return null; - } - - return array_merge($view, [ - "key" => $key, - 'livewire' => [ - 'props' => $this->getProps($component), - 'files' => $files, - ], - ]); - }) - ->whereNotNull() - ->unique('key') - ->values(); - } - - protected function parseLivewireThree(\Illuminate\Support\Collection $views) - { - return $views->map(function (array $view) { - if (!str($view['key'])->startsWith('livewire.')) { - return $view; - } - - $key = str($view['key'])->after('livewire.')->value(); - - if (is_null($component = $this->getComponent($key))) { - return $view; - } - - return array_merge($view, [ - 'livewire' => [ - 'props' => $this->getProps($component), - 'files' => [$view['path']], - ], - ]); - }); - } - - protected function isVersionFour(): bool - { - return property_exists(\Livewire\LivewireManager::class, "v4") && - \Livewire\LivewireManager::$v4; - } - - protected function pathExists(string $path): bool - { - return $this->paths->contains(fn (string $item) => str($path)->contains($item)); - } - - protected function getComponent(string $key) - { - try { - return app("livewire")->new($key); - } catch (\Throwable $e) { - return null; - } - } - - protected function getProps($component): array - { - return array_map(function ($prop) use ($component) { - $reflection = new \ReflectionProperty($component, $prop); - - return [ - 'name' => $prop, - 'type' => (string) $reflection->getType() ?: 'mixed', - 'hasDefaultValue' => $reflection->hasDefaultValue(), - 'defaultValue' => $this->formatDefaultValue($reflection->getDefaultValue()), - ]; - }, array_keys($component->all())); - } - - protected function formatDefaultValue(mixed $value) - { - return is_string($value) ? "'{$value}'": $value; - } - - protected function key(array $view): string - { - return str($view["key"]) - ->replace("⚡", "") - ->when($this->isMfc($view), fn ($key) => $key->beforeLast(".")) - ->value(); - } - - protected function files(array $view): array - { - if (! $this->isMfc($view)) { - return [$view['path']]; - } - - $filePathWithoutExtension = str($view["path"])->replace($this->extensions, ""); - - return collect($this->extensions) - ->map(fn (string $extension) => $filePathWithoutExtension->append($extension)) - ->filter(fn (string $path) => \Illuminate\Support\Facades\File::exists($path)) - ->all(); - } - - protected function isMfc(array $view): bool - { - $directory = str($view["path"]) - ->replace("⚡", "") - ->dirname() - ->afterLast(DIRECTORY_SEPARATOR); - - $file = str($view["path"]) - ->replace("⚡", "") - ->basename() - ->replace($this->extensions, ""); - - $class = str($view["path"]) - ->dirname() - ->append(DIRECTORY_SEPARATOR . $file . ".php"); - - return $directory->is($file) - && \Illuminate\Support\Facades\File::exists($class); - } -}; - -$blade = new class ($livewire) { - public function __construct(protected $livewire) - { - // - } - - public function getAllViews() - { - $finder = app("view")->getFinder(); - - $paths = collect($finder->getPaths())->flatMap(fn($path) => $this->findViews($path)); - - $hints = collect($finder->getHints()) - ->filter( - fn ($_, $key) => ! (strlen($key) === 32 && ctype_xdigit($key)) - )->flatMap( - fn($paths, $key) => collect($paths)->flatMap( - fn($path) => collect($this->findViews($path))->map( - fn($value) => array_merge($value, ["key" => "{$key}::{$value["key"]}"]) - ) - ) - ); - - [$local, $vendor] = $paths - ->merge($hints) - ->values() - ->partition(fn($v) => !$v["isVendor"]); - - return $local - ->sortBy("key", SORT_NATURAL) - ->merge($vendor->sortBy("key", SORT_NATURAL)) - ->pipe($this->livewire->parse(...)); - } - - public function getAllComponents() - { - $namespaced = \Illuminate\Support\Facades\Blade::getClassComponentNamespaces(); - $autoloaded = require base_path("vendor/composer/autoload_psr4.php"); - $components = []; - - foreach ($namespaced as $key => $ns) { - $path = null; - - foreach ($autoloaded as $namespace => $paths) { - if (str_starts_with($ns, $namespace)) { - foreach ($paths as $p) { - $test = str($ns)->replace($namespace, '')->replace('\\', '/')->prepend($p . DIRECTORY_SEPARATOR)->toString(); - - if (is_dir($test)) { - $path = $test; - break; - } - } - - break; - } - } - - if (!$path) { - continue; - } - - $files = \Symfony\Component\Finder\Finder::create() - ->files() - ->name("*.php") - ->in($path); - - foreach ($files as $file) { - $realPath = $file->getRealPath(); - - $components[] = [ - "path" => LaravelVsCode::relativePath($realPath), - "isVendor" => str_contains($realPath, base_path("vendor")), - "key" => str($realPath) - ->replace(realpath($path), "") - ->replace(".php", "") - ->ltrim(DIRECTORY_SEPARATOR) - ->replace(DIRECTORY_SEPARATOR, ".") - ->kebab() - ->prepend($key . "::"), - ]; - } - } - - return $components; - } - - protected function findViews($path) - { - $paths = []; - - if (!is_dir($path)) { - return $paths; - } - - $finder = app("view")->getFinder(); - $extensions = array_map(fn($extension) => ".{$extension}", $finder->getExtensions()); - - $files = \Symfony\Component\Finder\Finder::create() - ->files() - ->name(array_map(fn ($ext) => "*{$ext}", $extensions)) - ->in($path); - - foreach ($files as $file) { - $paths[] = [ - "path" => LaravelVsCode::relativePath($file->getRealPath()), - "isVendor" => str_contains($file->getRealPath(), base_path("vendor")), - "key" => str($file->getRealPath()) - ->replace(realpath($path), "") - ->replace($extensions, "") - ->ltrim(DIRECTORY_SEPARATOR) - ->replace(DIRECTORY_SEPARATOR, "."), - ]; - } - - return $paths; - } -}; - -echo json_encode($blade->getAllViews()->merge($blade->getAllComponents())); - -echo LaravelVsCode::outputMarker('END_OUTPUT'); - -exit(0);