Skip to content

Commit 46f4682

Browse files
committed
Merge remote-tracking branch '32922/add-logic-check-imports-less-for-enabled-modules' into comm_prs_248beta1
2 parents 0c53bbf + f8fd657 commit 46f4682

File tree

2 files changed

+220
-51
lines changed

2 files changed

+220
-51
lines changed

lib/internal/Magento/Framework/Css/PreProcessor/Instruction/MagentoImport.php

Lines changed: 57 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,25 @@
33
* Copyright © Magento, Inc. All rights reserved.
44
* See COPYING.txt for license details.
55
*/
6+
declare(strict_types=1);
7+
68
namespace Magento\Framework\Css\PreProcessor\Instruction;
79

10+
use Magento\Framework\App\DeploymentConfig;
811
use Magento\Framework\App\ObjectManager;
912
use Magento\Framework\Css\PreProcessor\ErrorHandlerInterface;
13+
use Magento\Framework\Module\Manager as ModuleManager;
1014
use Magento\Framework\ObjectManager\ResetAfterRequestInterface;
1115
use Magento\Framework\View\Asset\File\FallbackContext;
1216
use Magento\Framework\View\Asset\LocalInterface;
1317
use Magento\Framework\View\Asset\PreProcessorInterface;
18+
use Magento\Framework\View\Asset\Repository as AssetRepository;
19+
use Magento\Framework\View\Design\Theme\ListInterface as ThemeListInterface;
1420
use Magento\Framework\View\Design\Theme\ThemeProviderInterface;
21+
use Magento\Framework\View\Design\ThemeInterface;
1522
use Magento\Framework\View\DesignInterface;
1623
use Magento\Framework\View\File\CollectorInterface;
24+
use Magento\Framework\View\Asset\PreProcessor\Chain;
1725

1826
/**
1927
* @magento_import instruction preprocessor
@@ -27,6 +35,8 @@ class MagentoImport implements PreProcessorInterface, ResetAfterRequestInterface
2735
public const REPLACE_PATTERN =
2836
'#//@magento_import(?P<reference>\s+\(reference\))?\s+[\'\"](?P<path>(?![/\\\]|\w:[/\\\])[^\"\']+)[\'\"]\s*?;#';
2937

38+
private const CONFIG_PATH_SCD_ONLY_ENABLED_MODULES = 'static_content_only_enabled_modules';
39+
3040
/**
3141
* @var DesignInterface
3242
*/
@@ -43,12 +53,12 @@ class MagentoImport implements PreProcessorInterface, ResetAfterRequestInterface
4353
protected $errorHandler;
4454

4555
/**
46-
* @var \Magento\Framework\View\Asset\Repository
56+
* @var AssetRepository
4757
*/
4858
protected $assetRepo;
4959

5060
/**
51-
* @var \Magento\Framework\View\Design\Theme\ListInterface
61+
* @var ThemeListInterface
5262
* @deprecated 100.0.2
5363
* @see not used
5464
*/
@@ -59,31 +69,47 @@ class MagentoImport implements PreProcessorInterface, ResetAfterRequestInterface
5969
*/
6070
private $themeProvider;
6171

72+
/**
73+
* @var DeploymentConfig
74+
*/
75+
private DeploymentConfig $deploymentConfig;
76+
77+
/**
78+
* @var ModuleManager
79+
*/
80+
private ModuleManager $moduleManager;
81+
6282
/**
6383
* @param DesignInterface $design
6484
* @param CollectorInterface $fileSource
6585
* @param ErrorHandlerInterface $errorHandler
66-
* @param \Magento\Framework\View\Asset\Repository $assetRepo
67-
* @param \Magento\Framework\View\Design\Theme\ListInterface $themeList
86+
* @param AssetRepository $assetRepo
87+
* @param ThemeListInterface $themeList
88+
* @param DeploymentConfig|null $deploymentConfig
89+
* @param ModuleManager|null $moduleManager
6890
*/
6991
public function __construct(
7092
DesignInterface $design,
7193
CollectorInterface $fileSource,
7294
ErrorHandlerInterface $errorHandler,
73-
\Magento\Framework\View\Asset\Repository $assetRepo,
74-
\Magento\Framework\View\Design\Theme\ListInterface $themeList
95+
AssetRepository $assetRepo,
96+
ThemeListInterface $themeList,
97+
?DeploymentConfig $deploymentConfig = null,
98+
?ModuleManager $moduleManager = null
7599
) {
76100
$this->design = $design;
77101
$this->fileSource = $fileSource;
78102
$this->errorHandler = $errorHandler;
79103
$this->assetRepo = $assetRepo;
80104
$this->themeList = $themeList;
105+
$this->deploymentConfig = $deploymentConfig ?? ObjectManager::getInstance() ->get(DeploymentConfig::class);
106+
$this->moduleManager = $moduleManager ?? ObjectManager::getInstance()->get(ModuleManager::class);
81107
}
82108

83109
/**
84110
* @inheritDoc
85111
*/
86-
public function process(\Magento\Framework\View\Asset\PreProcessor\Chain $chain)
112+
public function process(Chain $chain)
87113
{
88114
$asset = $chain->getAsset();
89115
$replaceCallback = function ($matchContent) use ($asset) {
@@ -108,24 +134,42 @@ protected function replace(array $matchedContent, LocalInterface $asset)
108134
$relatedAsset = $this->assetRepo->createRelated($matchedFileId, $asset);
109135
$resolvedPath = $relatedAsset->getFilePath();
110136
$importFiles = $this->fileSource->getFiles($this->getTheme($relatedAsset), $resolvedPath);
137+
$deployOnlyEnabled = $this->hasEnabledFlagDeployEnabledModules();
111138
/** @var $importFile \Magento\Framework\View\File */
112139
foreach ($importFiles as $importFile) {
140+
$moduleName = $importFile->getModule();
113141
$referenceString = $isReference ? '(reference) ' : '';
114-
$importsContent .= $importFile->getModule()
115-
? "@import $referenceString'{$importFile->getModule()}::{$resolvedPath}';\n"
116-
: "@import $referenceString'{$matchedFileId}';\n";
142+
143+
if ($moduleName) {
144+
if (!$deployOnlyEnabled || $this->moduleManager->isEnabled($moduleName)) {
145+
$importsContent .= "@import $referenceString'{$moduleName}::{$resolvedPath}';\n";
146+
}
147+
} else {
148+
$importsContent .= "@import $referenceString'{$matchedFileId}';\n";
149+
}
117150
}
118151
} catch (\LogicException $e) {
119152
$this->errorHandler->processException($e);
120153
}
154+
121155
return $importsContent;
122156
}
123157

158+
/**
159+
* Retrieve flag deploy enabled modules
160+
*
161+
* @return bool
162+
*/
163+
private function hasEnabledFlagDeployEnabledModules(): bool
164+
{
165+
return (bool) $this->deploymentConfig->get(self::CONFIG_PATH_SCD_ONLY_ENABLED_MODULES);
166+
}
167+
124168
/**
125169
* Get theme model based on the information from asset
126170
*
127171
* @param LocalInterface $asset
128-
* @return \Magento\Framework\View\Design\ThemeInterface
172+
* @return ThemeInterface
129173
*/
130174
protected function getTheme(LocalInterface $asset)
131175
{
@@ -135,6 +179,7 @@ protected function getTheme(LocalInterface $asset)
135179
$context->getAreaCode() . '/' . $context->getThemePath()
136180
);
137181
}
182+
138183
return $this->design->getDesignTheme();
139184
}
140185

@@ -143,7 +188,7 @@ protected function getTheme(LocalInterface $asset)
143188
*
144189
* @return ThemeProviderInterface
145190
*/
146-
private function getThemeProvider()
191+
private function getThemeProvider(): ThemeProviderInterface
147192
{
148193
if (null === $this->themeProvider) {
149194
$this->themeProvider = ObjectManager::getInstance()->get(ThemeProviderInterface::class);

0 commit comments

Comments
 (0)