public function CompilerJarFilter::filterDump

Filters an asset just before it's dumped.

Parameters

AssetInterface $asset An asset:

Overrides FilterInterface::filterDump

File

drupal/core/vendor/kriswallsmith/assetic/src/Assetic/Filter/GoogleClosure/CompilerJarFilter.php, line 35

Class

CompilerJarFilter
Filter for the Google Closure Compiler JAR.

Namespace

Assetic\Filter\GoogleClosure

Code

public function filterDump(AssetInterface $asset) {
  $cleanup = array();
  $pb = new ProcessBuilder(array(
    $this->javaPath,
    '-jar',
    $this->jarPath,
  ));
  if (null !== $this->compilationLevel) {
    $pb
      ->add('--compilation_level')
      ->add($this->compilationLevel);
  }
  if (null !== $this->jsExterns) {
    $cleanup[] = $externs = tempnam(sys_get_temp_dir(), 'assetic_google_closure_compiler');
    file_put_contents($externs, $this->jsExterns);
    $pb
      ->add('--externs')
      ->add($externs);
  }
  if (null !== $this->externsUrl) {
    $cleanup[] = $externs = tempnam(sys_get_temp_dir(), 'assetic_google_closure_compiler');
    file_put_contents($externs, file_get_contents($this->externsUrl));
    $pb
      ->add('--externs')
      ->add($externs);
  }
  if (null !== $this->excludeDefaultExterns) {
    $pb
      ->add('--use_only_custom_externs');
  }
  if (null !== $this->formatting) {
    $pb
      ->add('--formatting')
      ->add($this->formatting);
  }
  if (null !== $this->useClosureLibrary) {
    $pb
      ->add('--manage_closure_dependencies');
  }
  if (null !== $this->warningLevel) {
    $pb
      ->add('--warning_level')
      ->add($this->warningLevel);
  }
  if (null !== $this->language) {
    $pb
      ->add('--language_in')
      ->add($this->language);
  }
  $pb
    ->add('--js')
    ->add($cleanup[] = $input = tempnam(sys_get_temp_dir(), 'assetic_google_closure_compiler'));
  file_put_contents($input, $asset
    ->getContent());
  $proc = $pb
    ->getProcess();
  $code = $proc
    ->run();
  array_map('unlink', $cleanup);
  if (0 < $code) {
    throw FilterException::fromProcess($proc)
      ->setInput($asset
      ->getContent());
  }
  $asset
    ->setContent($proc
    ->getOutput());
}