- WIP on Picea's Asset.

This commit is contained in:
Dave M. 2023-10-17 20:11:19 -04:00
parent 35b28c311e
commit cce9d9865b
4 changed files with 73 additions and 20 deletions

View File

@ -2,25 +2,30 @@
namespace Picea\Asset\Action; namespace Picea\Asset\Action;
use Picea\Asset\Extension; use Picea\Asset\FileFetcher;
use Picea\Compiler;
use Picea\Compiler\Context;
use Picea\Event\Extension\UrlBuildAssetEvent;
use Picea\EventTrait; use Picea\EventTrait;
class Install { class Install {
use EventTrait; use EventTrait;
public array $actions;
public function __construct( public function __construct(
public InstallActionInterface $action, InstallActionInterface $action, ... $actions
) { } ) {
$this->actions = array_filter(array_merge([ $action ], $actions));
}
public function launch() : bool public function launch(FileFetcher $fileFetcher) : array
{ {
$this->action->run(); $output = [];
return true; foreach($this->actions as $action) {
$output[$action::class] = $action->run($fileFetcher);
}
return $output;
} }
} }

View File

@ -2,10 +2,18 @@
namespace Picea\Asset\Action; namespace Picea\Asset\Action;
use Picea\Asset\FileFetcher;
class Symlink implements InstallActionInterface class Symlink implements InstallActionInterface
{ {
public function __construct(
protected FileFetcher $fileFetcher
) { }
public function run() : mixed public function run() : mixed
{ {
dump($this->fileFetcher->getFileList());
return null; return null;
} }
} }

View File

@ -3,8 +3,6 @@
namespace Picea\Asset; namespace Picea\Asset;
use Picea\Compiler; use Picea\Compiler;
use Picea\Compiler\Context;
use Picea\Event\Extension\UrlBuildAssetEvent;
use Picea\EventTrait; use Picea\EventTrait;
class Asset { class Asset {
@ -12,21 +10,22 @@ class Asset {
use EventTrait; use EventTrait;
public function __construct( public function __construct(
null|Action\Install $install = null, public Action\Install $install,
) {} public FileFetcher $fileFetcher,
) { }
public function registerExtension(Compiler $compiler) : self public function registerExtension(Compiler $compiler) : self
{ {
$compiler->registerExtension(new Extension\ImportmapExtension()); $compiler->registerExtension(new Extension\ImportmapExtension());
/* $compiler->getExtensionFromToken('asset')->eventRegister(new class() implements UrlBuildAssetEvent {
public function execute(string $uri, array $parameters = [], bool $appendVersion) : void
{
dump($uri);
}
}); */
return $this; return $this;
} }
public function launchInstall() : void
{
$result = $this->install->launch($this->fileFetcher);
#dump($result);
}
} }

41
src/FileFetcher.php Normal file
View File

@ -0,0 +1,41 @@
<?php declare(strict_types=1);
namespace Picea\Asset;
use RecursiveIteratorIterator, RecursiveDirectoryIterator;
class FileFetcher extends \Picea\FileFetcher
{
protected array $folderList = [];
public array $supportedExtensionList = [];
public function folderList(?array $set = null) : ?array
{
return $set === null ? $this->folderList : $this->folderList = $set;
}
public function getFileList() : array
{
usort($this->folderList, fn($a, $b) => $a['order'] <=> $b['order']);
$list = [];
foreach($this->folderList() as $folder) {
$path = $folder['path'] . "/";
$list[$path] = [];
if ( \file_exists($path) ) {
$iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path, RecursiveDirectoryIterator::SKIP_DOTS), RecursiveIteratorIterator::SELF_FIRST, RecursiveIteratorIterator::CATCH_GET_CHILD);
foreach ($iterator as $file) {
if ( $file->isFile() ) {
$list[$path][] = $file;
}
}
}
}
return $list;
}
}