fix: resolve RedisCache array offset error and improve discovery diagnostics

- Fix RedisCache driver to handle MGET failures gracefully with fallback
- Add comprehensive discovery context comparison debug tools
- Identify root cause: WEB context discovery missing 166 items vs CLI
- WEB context missing RequestFactory class entirely (52 vs 69 commands)
- Improved exception handling with detailed binding diagnostics
This commit is contained in:
2025-09-12 20:05:18 +02:00
parent 8040d3e7a5
commit e30753ba0e
46990 changed files with 10789682 additions and 89639 deletions

View File

@@ -15,15 +15,19 @@ final class AsyncAssetProcessor
public function __construct(
private readonly Storage $storage,
private readonly FiberManager $fiberManager = new FiberManager(),
/** @var array<string, mixed> */
private readonly array $config = []
) {
}
/**
* Verarbeitet alle Assets parallel
*
* @return array<string, mixed>
*/
public function processAll(string $sourceDir, string $outputDir): array
{
/** @var array<string, \Closure> */
$operations = [
'css' => fn () => $this->processCss($sourceDir . '/css', $outputDir . '/css'),
'js' => fn () => $this->processJs($sourceDir . '/js', $outputDir . '/js'),
@@ -35,12 +39,15 @@ final class AsyncAssetProcessor
/**
* Verarbeitet CSS-Dateien
*
* @return array<string, string>
*/
public function processCss(string $sourceDir, string $outputDir): array
{
$cssFiles = $this->findFiles($sourceDir, '*.css');
$scssFiles = $this->findFiles($sourceDir, '*.scss');
/** @var array<string, \Closure> */
$operations = [];
// Verarbeite CSS-Dateien
@@ -58,11 +65,14 @@ final class AsyncAssetProcessor
/**
* Verarbeitet JavaScript-Dateien
*
* @return array<string, string>
*/
public function processJs(string $sourceDir, string $outputDir): array
{
$jsFiles = $this->findFiles($sourceDir, '*.js');
/** @var array<string, \Closure> */
$operations = [];
foreach ($jsFiles as $file) {
$operations["js_{$file}"] = fn () => $this->minifyJs($sourceDir . '/' . $file, $outputDir);
@@ -73,6 +83,8 @@ final class AsyncAssetProcessor
/**
* Verarbeitet Bilder
*
* @return array<string, string>
*/
public function processImages(string $sourceDir, string $outputDir): array
{
@@ -84,6 +96,7 @@ final class AsyncAssetProcessor
$this->findFiles($sourceDir, '*.svg')
);
/** @var array<string, \Closure> */
$operations = [];
foreach ($imageFiles as $file) {
$operations["img_{$file}"] = fn () => $this->optimizeImage($sourceDir . '/' . $file, $outputDir);
@@ -94,9 +107,12 @@ final class AsyncAssetProcessor
/**
* Bündelt JavaScript-Dateien
*
* @param array<int, string> $files
*/
public function bundleJs(array $files, string $outputFile): string
{
/** @var array<string, \Closure> */
$operations = [];
foreach ($files as $file) {
$operations[$file] = fn () => $this->storage->get($file);
@@ -113,9 +129,12 @@ final class AsyncAssetProcessor
/**
* Bündelt CSS-Dateien
*
* @param array<int, string> $files
*/
public function bundleCss(array $files, string $outputFile): string
{
/** @var array<string, \Closure> */
$operations = [];
foreach ($files as $file) {
$operations[$file] = fn () => $this->storage->get($file);
@@ -132,9 +151,13 @@ final class AsyncAssetProcessor
/**
* Generiert verschiedene Bildgrößen parallel
*
* @param array<string, array<string, mixed>> $sizes
* @return array<string, string>
*/
public function generateImageSizes(string $sourceImage, array $sizes, string $outputDir): array
{
/** @var array<string, \Closure> */
$operations = [];
foreach ($sizes as $sizeName => $dimensions) {
$operations[$sizeName] = fn () => $this->resizeImage(
@@ -235,6 +258,7 @@ final class AsyncAssetProcessor
// Vereinfachte Variable-Verarbeitung
preg_match_all('/\$([a-zA-Z0-9_-]+)\s*:\s*([^;]+);/', $content, $matches);
/** @var array<string, string> */
$variables = [];
for ($i = 0; $i < count($matches[0]); $i++) {
$variables['$' . $matches[1][$i]] = $matches[2][$i];
@@ -250,6 +274,9 @@ final class AsyncAssetProcessor
return $content;
}
/**
* @return array<int, string>
*/
private function findFiles(string $directory, string $pattern): array
{
if (! is_dir($directory)) {
@@ -267,9 +294,11 @@ final class AsyncAssetProcessor
public function watch(string $sourceDir, string $outputDir): void
{
$this->fiberManager->async(function () use ($sourceDir, $outputDir) {
/** @var array<string, int|false> */
$lastCheck = [];
while (true) {
/** @var array<int, string> */
$files = array_merge(
glob($sourceDir . '/**/*.css') ?: [],
glob($sourceDir . '/**/*.scss') ?: [],