entries[$path] = [ 'mtime' => $mtime, 'classes' => array_values(array_unique($classes)), ]; } /** * @param string $path * @return bool */ public function has(string $path): bool { return isset($this->entries[$path]); } /** * @param string $path * @return int|null */ public function getMtime(string $path): ?int { return $this->entries[$path]['mtime'] ?? null; } /** * @param string $path * @return array */ public function getClasses(string $path): array { return $this->entries[$path]['classes'] ?? []; } /** * @param string $path * @return array */ public function remove(string $path): array { $classes = $this->getClasses($path); unset($this->entries[$path]); return $classes; } /** * @return array */ public function all(): array { return $this->entries; } /** * @param string|null $prefix * @return array */ public function paths(?string $prefix = null): array { if ($prefix === null) { return array_keys($this->entries); } return $this->entries |> array_keys(...) |> (fn($x) => array_filter($x, fn(string $path) => str_starts_with($path, $prefix))) |> array_values(...); } /** * @param array $entries * @return void */ public function fromArray(array $entries): void { $this->entries = []; foreach ($entries as $path => $entry) { $mtime = (int)($entry['mtime'] ?? 0); $classes = is_array($entry['classes'] ?? null) ? $entry['classes'] : []; $this->set($path, $mtime, $classes); } } }