Пример #1
0
 /**
  * Resolves asset dependencies.
  *
  * @param  AssetInterface   $asset
  * @param  AssetInterface[] $resolved
  * @param  AssetInterface[] $unresolved
  * @return AssetInterface[]
  * @throws \RuntimeException
  */
 protected function resolveDependencies($asset, &$resolved = [], &$unresolved = [])
 {
     $name = $asset->getName();
     $unresolved[$name] = $asset;
     foreach ($asset->getDependencies() as $dependency) {
         if ($dependency[0] === '~' && !isset($resolved[$dependency = ltrim($dependency, '~')])) {
             continue;
         }
         if (!isset($resolved[$dependency])) {
             if (isset($unresolved[$dependency])) {
                 throw new \RuntimeException(sprintf('Circular asset dependency "%s > %s" detected.', $name, $dependency));
             }
             if ($d = $this->registered->get($dependency)) {
                 $this->resolveDependencies($d, $resolved, $unresolved);
             }
         }
     }
     $resolved[$name] = $asset;
     unset($unresolved[$name]);
     if (isset($this->lazy[$name])) {
         foreach ($this->lazy[$name] as $dependency) {
             if ($d = $this->registered->get($dependency)) {
                 $this->resolveDependencies($d, $resolved, $unresolved);
             }
         }
     }
     return $resolved;
 }