/**
  * @param Asset[] $assets
  *
  * @return Asset[]
  */
 public static function process($assets)
 {
     if ($directory = self::getOutputDirectory()) {
         $relativeDirectory = self::getRelativeOutputDirectory();
         $filename = '';
         $sourceFiles = array();
         for ($i = 0; $i < count($assets); ++$i) {
             $asset = $assets[$i];
             $filename .= $asset->getAssetHashKey();
             $sourceFiles[] = $asset->getAssetURL();
         }
         $filename = sha1($filename);
         $cacheFile = $directory . '/' . $filename . '.js';
         if (!file_exists($cacheFile)) {
             $js = '';
             foreach ($assets as $asset) {
                 $contents = $asset->getAssetContents();
                 if (isset($contents)) {
                     if ($asset->assetSupportsMinification()) {
                         $contents = \JShrink\Minifier::minify($contents);
                     }
                     $js .= $contents . "\n\n";
                 }
             }
             @file_put_contents($cacheFile, $js);
         }
         $asset = new self();
         $asset->setAssetURL($relativeDirectory . '/' . $filename . '.js');
         $asset->setAssetPath($directory . '/' . $filename . '.js');
         $asset->setCombinedAssetSourceFiles($sourceFiles);
         return array($asset);
     }
     return $assets;
 }