fileSource = $fileSource; $this->design = $design; $this->readFactory = $readFactory; $this->staticContext = $assetRepo->getStaticViewFileContext(); $this->minifyAdapter = $minifyAdapter; $this->minification = $minification; $this->repositoryMap = $repositoryMap; } /** * Get aggregated distributed configuration * * @return string */ public function getConfig() { $distributedConfig = ''; $customConfigFiles = $this->fileSource->getFiles($this->design->getDesignTheme(), self::CONFIG_FILE_NAME); foreach ($customConfigFiles as $file) { /** @var $fileReader \Magento\Framework\Filesystem\File\Read */ $fileReader = $this->readFactory->create($file->getFilename(), DriverPool::FILE); $config = $fileReader->readAll($file->getName()); $distributedConfig .= str_replace( ['%config%', '%context%'], [$config, $file->getModule()], self::PARTIAL_CONFIG_TEMPLATE ); } $fullConfig = str_replace( ['%function%', '%usages%'], [$distributedConfig], self::FULL_CONFIG_TEMPLATE ); if ($this->minification->isEnabled('js')) { $fullConfig = $this->minifyAdapter->minify($fullConfig); } return $fullConfig; } /** * Get path to config file relative to directory, where all config files with different context are located * * @return string */ public function getConfigFileRelativePath() { return $this->staticContext->getConfigPath() . '/' . $this->getConfigFileName(); } /** * Get path to config file relative to directory, where all config files with different context are located * * @return string */ public function getMixinsFileRelativePath() { $map = $this->getRepositoryFilesMap(Config::MIXINS_FILE_NAME, [ 'area' => $this->staticContext->getAreaCode(), 'theme' => $this->staticContext->getThemePath(), 'locale' => $this->staticContext->getLocale(), ]); if ($map) { $relativePath = implode('/', $map) . '/' . Config::MIXINS_FILE_NAME; } else { $relativePath = $this->staticContext->getPath() . '/' . self::MIXINS_FILE_NAME; } return $relativePath; } /** * Get path to config file relative to directory, where all config files with different context are located * * @return string */ public function getRequireJsFileRelativePath() { return $this->staticContext->getConfigPath() . '/' . self::REQUIRE_JS_FILE_NAME; } /** * Get base RequireJs configuration necessary for working with Magento application * * @return string */ public function getBaseConfig() { $config = [ 'baseUrl' => $this->staticContext->getBaseUrl() . $this->staticContext->getPath(), ]; $config = json_encode($config, JSON_UNESCAPED_SLASHES); $result = "require.config($config);"; return $result; } /** * Get path to '.min' files resolver relative to config files directory * * @return string */ public function getMinResolverRelativePath() { return $this->staticContext->getConfigPath() . '/' . $this->minification->addMinifiedSign(self::MIN_RESOLVER_FILENAME); } /** * Get path to URL map resover file * * @return string */ public function getUrlResolverFileRelativePath() { $map = $this->getRepositoryFilesMap(Config::URL_RESOLVER_FILE_NAME, [ 'area' => $this->staticContext->getAreaCode(), 'theme' => $this->staticContext->getThemePath(), 'locale' => $this->staticContext->getLocale(), ]); if ($map) { $relativePath = implode('/', $map) . '/' . Config::URL_RESOLVER_FILE_NAME; } else { $relativePath = $this->staticContext->getPath() . '/' . self::URL_RESOLVER_FILE_NAME; } return $relativePath; } /** * Get path to map file * * @return string */ public function getMapFileRelativePath() { return $this->minification->addMinifiedSign($this->staticContext->getPath() . '/' . self::MAP_FILE_NAME); } /** * @return string */ protected function getConfigFileName() { return $this->minification->addMinifiedSign(self::CONFIG_FILE_NAME); } /** * @return string */ public function getMinResolverCode() { $excludes = []; foreach ($this->minification->getExcludes('js') as $expression) { $excludes[] = '!url.match(/' . str_replace('/', '\/', $expression) . '/)'; } $excludesCode = empty($excludes) ? 'true' : implode('&&', $excludes); $result = <<minification->isEnabled('js')) { $result = $this->minifyAdapter->minify($result); } return $result; } /** * @param string $fileId * @param array $params * @return array */ private function getRepositoryFilesMap($fileId, array $params) { return $this->repositoryMap->getMap($fileId, $params); } }