diff core/lib/Drupal/Core/Asset/JsOptimizer.php @ 0:4c8ae668cc8c

Initial import (non-working)
author Chris Cannam
date Wed, 29 Nov 2017 16:09:58 +0000
parents
children 129ea1e6d783
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/lib/Drupal/Core/Asset/JsOptimizer.php	Wed Nov 29 16:09:58 2017 +0000
@@ -0,0 +1,54 @@
+<?php
+
+namespace Drupal\Core\Asset;
+
+use Drupal\Component\Utility\Unicode;
+
+/**
+ * Optimizes a JavaScript asset.
+ */
+class JsOptimizer implements AssetOptimizerInterface {
+
+  /**
+   * {@inheritdoc}
+   */
+  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 = Unicode::substr(Unicode::convertToUtf8($data, $encoding), 1);
+    }
+    // If no BOM is found, check for the charset attribute.
+    elseif (isset($js_asset['attributes']['charset'])) {
+      $data = Unicode::convertToUtf8($data, $js_asset['attributes']['charset']);
+    }
+
+    // No-op optimizer: no optimizations are applied to JavaScript assets.
+    return $data;
+  }
+
+  /**
+   * Processes the contents of a javascript asset for cleanup.
+   *
+   * @param string $contents
+   *   The contents of the javascript asset.
+   *
+   * @return string
+   *   Contents of the javascript asset.
+   */
+  public function clean($contents) {
+    // Remove JS source and source mapping urls or these may cause 404 errors.
+    $contents = preg_replace('/\/\/(#|@)\s(sourceURL|sourceMappingURL)=\s*(\S*?)\s*$/m', '', $contents);
+
+    return $contents;
+  }
+
+}