243b40294c8621826303a9c73d13c766b8fcb0d8
[yaffs-website] / web / core / lib / Drupal / Core / Asset / JsOptimizer.php
1 <?php
2
3 namespace Drupal\Core\Asset;
4
5 use Drupal\Component\Utility\Unicode;
6
7 /**
8  * Optimizes a JavaScript asset.
9  */
10 class JsOptimizer implements AssetOptimizerInterface {
11
12   /**
13    * {@inheritdoc}
14    */
15   public function optimize(array $js_asset) {
16     if ($js_asset['type'] !== 'file') {
17       throw new \Exception('Only file JavaScript assets can be optimized.');
18     }
19     if (!$js_asset['preprocess']) {
20       throw new \Exception('Only file JavaScript assets with preprocessing enabled can be optimized.');
21     }
22
23     // If a BOM is found, convert the file to UTF-8, then use substr() to
24     // remove the BOM from the result.
25     $data = file_get_contents($js_asset['data']);
26     if ($encoding = (Unicode::encodingFromBOM($data))) {
27       $data = mb_substr(Unicode::convertToUtf8($data, $encoding), 1);
28     }
29     // If no BOM is found, check for the charset attribute.
30     elseif (isset($js_asset['attributes']['charset'])) {
31       $data = Unicode::convertToUtf8($data, $js_asset['attributes']['charset']);
32     }
33
34     // No-op optimizer: no optimizations are applied to JavaScript assets.
35     return $data;
36   }
37
38   /**
39    * Processes the contents of a javascript asset for cleanup.
40    *
41    * @param string $contents
42    *   The contents of the javascript asset.
43    *
44    * @return string
45    *   Contents of the javascript asset.
46    */
47   public function clean($contents) {
48     // Remove JS source and source mapping urls or these may cause 404 errors.
49     $contents = preg_replace('/\/\/(#|@)\s(sourceURL|sourceMappingURL)=\s*(\S*?)\s*$/m', '', $contents);
50
51     return $contents;
52   }
53
54 }