function JsOptimizer::optimize
Optimizes an asset.
Parameters
array $asset: An asset.
Return value
string The optimized asset's contents.
Overrides AssetOptimizerInterface::optimize
File
- 
              core/lib/ Drupal/ Core/ Asset/ JsOptimizer.php, line 29 
Class
- JsOptimizer
- Optimizes a JavaScript asset.
Namespace
Drupal\Core\AssetCode
public function optimize(array $js_asset) {
  if ($js_asset['type'] !== 'file') {
    throw new \Exception('Only file JavaScript assets can be optimized.');
  }
  if (!$js_asset['preprocess']) {
    throw new \Exception('Only file JavaScript assets with preprocessing enabled can be optimized.');
  }
  // If a BOM is found, convert the file to UTF-8, then use substr() to
  // remove the BOM from the result.
  $data = file_get_contents($js_asset['data']);
  if ($encoding = Unicode::encodingFromBOM($data)) {
    $data = mb_substr(Unicode::convertToUtf8($data, $encoding), 1);
  }
  elseif (isset($js_asset['attributes']['charset'])) {
    $data = Unicode::convertToUtf8($data, $js_asset['attributes']['charset']);
  }
  // Remove comments, whitespace, and optional braces.
  try {
    $ast = Peast::latest($data)->parse();
    $renderer = new Renderer();
    $renderer->setFormatter(new CompactFormatter());
    return $renderer->render($ast);
  } catch (\Exception $exception) {
    if ($exception instanceof PeastSyntaxException) {
      $position = $exception->getPosition();
      Error::logException($this->logger, $exception, 'Syntax error:  @message, File: @asset_file, Line: @asset_line, Column: @asset_column, Index: @asset_index', [
        '@asset_file' => $js_asset['data'],
        '@asset_line' => $position->getLine(),
        '@asset_column' => $position->getColumn(),
        '@asset_index' => $position->getIndex(),
      ]);
    }
    else {
      Error::logException($this->logger, $exception);
    }
    return $data;
  }
}Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.
