*/ private array $cache = []; private Metadata $metadata; public function __construct(Metadata $metadata) { $this->metadata = $metadata; } public function clearCache(): void { $this->cache = []; } /** * @return string[] */ public function getEntityTypeList(): array { return $this->metadata->getEntityTypeList(); } public function hasEntity(string $name): bool { $this->cacheEntity($name); return !is_null($this->cache[$name]); } public function getEntity(string $name): EntityDefs { $this->cacheEntity($name); if (!$this->hasEntity($name)) { throw new RuntimeException("Entity type '{$name}' does not exist."); } /** @var EntityDefs */ return $this->cache[$name]; } private function cacheEntity(string $name): void { if (array_key_exists($name, $this->cache)) { return; } $this->cache[$name] = $this->loadEntity($name); } private function loadEntity(string $name): ?EntityDefs { $raw = $this->metadata->get($name) ?? null; if (!$raw) { return null; } return EntityDefs::fromRaw($raw, $name); } }