You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

47 lines
1.3 KiB

<?php namespace Wpstudio\AssetsManifest\Classes\Bundlers;
use Wpstudio\AssetsManifest\Classes\AssetsManifestException;
use Wpstudio\AssetsManifest\Classes\ManifestReader;
abstract class Bundler
{
const BUNDLER_WEBPACK_ENCORE = 'webpack-encore';
const BUNDLER_VITE = 'vite';
public static array $bundlers = [
self::BUNDLER_WEBPACK_ENCORE => WebpackEncoreBundler::class,
self::BUNDLER_VITE => ViteBundler::class,
];
protected ?ManifestReader $manifestReader;
public function __construct(?ManifestReader $manifestReader = null)
{
if (isset($manifestReader)) {
$this->manifestReader = $manifestReader;
}
}
public function getBundlerType(): string
{
return array_flip(self::$bundlers)[get_class($this)];
}
public function validateBundlerType(string $bundlerType)
{
if ($this->getBundlerType() != $bundlerType) {
throw new AssetsManifestException(
sprintf(
'Expected bundler type is %s, but actual %s',
$bundlerType,
$this->getBundlerType()
)
);
}
}
public function getEntrypoint(string $entrypointPathInManifest): array
{
return $this->manifestReader->get($entrypointPathInManifest);
}
}