core/core.services.yml | 4 ++- .../Drupal/Core/Asset/CssCollectionOptimizer.php | 2 +- .../Drupal/Core/Asset/JsCollectionOptimizer.php | 14 +++++++-- core/lib/Drupal/Core/Asset/JsOptimizer.php | 31 ++++++++++++++++++++ 4 files changed, 47 insertions(+), 4 deletions(-) diff --git a/core/core.services.yml b/core/core.services.yml index 1e972d0..8f561ca 100644 --- a/core/core.services.yml +++ b/core/core.services.yml @@ -574,7 +574,9 @@ services: class: Drupal\Core\Asset\JsCollectionRenderer asset.js.collection_optimizer: class: Drupal\Core\Asset\JsCollectionOptimizer - arguments: [ '@asset.js.collection_grouper', '@asset.js.dumper', '@state' ] + arguments: [ '@asset.js.collection_grouper', '@asset.js.optimizer', '@asset.js.dumper', '@state' ] + asset.js.optimizer: + class: Drupal\Core\Asset\JsOptimizer asset.js.collection_grouper: class: Drupal\Core\Asset\JsCollectionGrouper asset.js.dumper: diff --git a/core/lib/Drupal/Core/Asset/CssCollectionOptimizer.php b/core/lib/Drupal/Core/Asset/CssCollectionOptimizer.php index 05dddf8..5d43231 100644 --- a/core/lib/Drupal/Core/Asset/CssCollectionOptimizer.php +++ b/core/lib/Drupal/Core/Asset/CssCollectionOptimizer.php @@ -48,7 +48,7 @@ class CssCollectionOptimizer implements AssetCollectionOptimizerInterface { * @param \Drupal\Core\Asset\AssetCollectionGrouperInterface * The grouper for CSS assets. * @param \Drupal\Core\Asset\AssetOptimizerInterface - * The optimizer for grouped CSS assets. + * The optimizer for a single CSS asset. * @param \Drupal\Core\Asset\AssetDumperInterface * The dumper for optimized CSS assets. * @param \Drupal\Core\KeyValueStore\KeyValueStoreInterface diff --git a/core/lib/Drupal/Core/Asset/JsCollectionOptimizer.php b/core/lib/Drupal/Core/Asset/JsCollectionOptimizer.php index 4b62c01..bf4cbf6 100644 --- a/core/lib/Drupal/Core/Asset/JsCollectionOptimizer.php +++ b/core/lib/Drupal/Core/Asset/JsCollectionOptimizer.php @@ -23,6 +23,13 @@ class JsCollectionOptimizer implements AssetCollectionOptimizerInterface { protected $grouper; /** + * A JS asset optimizer. + * + * @var \Drupal\Core\Asset\JsOptimizer + */ + protected $optimizer; + + /** * An asset dumper. * * @var \Drupal\Core\Asset\AssetDumper @@ -41,13 +48,16 @@ class JsCollectionOptimizer implements AssetCollectionOptimizerInterface { * * @param \Drupal\Core\Asset\AssetCollectionGrouperInterface * The grouper for JS assets. + * @param \Drupal\Core\Asset\AssetOptimizerInterface + * The optimizer for a single JS asset. * @param \Drupal\Core\Asset\AssetDumperInterface * The dumper for optimized JS assets. * @param \Drupal\Core\KeyValueStore\KeyValueStoreInterface * The state key/value store. */ - public function __construct(AssetCollectionGrouperInterface $grouper, AssetDumperInterface $dumper, KeyValueStoreInterface $state) { + public function __construct(AssetCollectionGrouperInterface $grouper, AssetOptimizerInterface $optimizer, AssetDumperInterface $dumper, KeyValueStoreInterface $state) { $this->grouper = $grouper; + $this->optimizer = $optimizer; $this->dumper = $dumper; $this->state = $state; } @@ -103,7 +113,7 @@ public function optimize(array $js_assets) { // Concatenate each asset within the group. $data = ''; foreach ($js_group['items'] as $js_asset) { - $data .= file_get_contents($js_asset['data']); + $data .= $this->optimizer->optimize($js_asset); // Append a ';' and a newline after each JS file to prevent them // from running together. $data .= ";\n"; diff --git a/core/lib/Drupal/Core/Asset/JsOptimizer.php b/core/lib/Drupal/Core/Asset/JsOptimizer.php new file mode 100644 index 0000000..e6ad293 --- /dev/null +++ b/core/lib/Drupal/Core/Asset/JsOptimizer.php @@ -0,0 +1,31 @@ +