• Модуль: main
  • Путь к файлу: ~/bitrix/modules/main/lib/web/webpacker/converter.php
  • Класс: BitrixMainWebWebPackerConverter
  • Вызов: Converter::encodePackage
static function encodePackage(ResourcePackage $package, ResourceProfile $profile = null)
{
	$content = '';
	foreach ($package::getOrderedTypeList() as $type)
	{
		$assets = $package->getAssets($type);
		if (empty($assets))
		{
			continue;
		}

		switch ($type)
		{
			case ResourceAsset::CSS:
			case ResourceAsset::LAYOUT:
				if (!self::$hasCoreExtension)
				{
					throw new InvalidOperationException("Resource of type `$type` not allowed without core extension.");
				}

				$resources = $list = Json::encode($package->toArray($type));
				$content .= "module.loadResources($resources);" . self::getEol();
				break;

			case ResourceAsset::JS:
				foreach ($assets as $asset)
				{
					$content .= $asset->getContent() . self::getEol();
				}
				break;

			case ResourceAsset::LANG:
				if (!self::$hasCoreExtension)
				{
					throw new InvalidOperationException("Resource of type `$type` not allowed without core extension.");
				}

				$messages = [];
				$languages = [];
				$language = ($profile ? $profile->getLanguage() : null) ?: Loc::getCurrentLang();
				$isAllLangs = $profile ? $profile->isAllLangs() : false;
				foreach ($assets as $asset)
				{
					/** @var ResourceLangAsset $asset */
					$mess = $asset->useAllLangs($isAllLangs)->getContent();
					if (!is_array($mess))
					{
						break;
					}

					if ($profile)
					{
						foreach ($mess as $messLanguage => $messList)
						{
							$messList = ResourceLangAsset::deletePrefixes(
								$messList,
								$profile->getDeleteLangPrefixes()
							);
							if ($profile->isLangCamelCase())
							{
								$messList = ResourceLangAsset::toCamelCase($messList);
							}
							if (!isset($messages[$messLanguage]) || !is_array($messages[$messLanguage]))
							{
								$messages[$messLanguage] = [];
							}

							$messages[$messLanguage] = array_merge(
								$messages[$messLanguage],
								$messList
							);
						}
					}

					$languages = array_unique(array_merge(
						$languages,
						array_keys($messages)
					));
				}

				if (count($messages) === 1)
				{
					$messages = current($messages);
				}
				$messages = Json::encode($messages);
				$languages = Json::encode($languages);
				$content .= "module.language = "$language";" . self::getEol(1);
				$content .= "module.languages = $languages;" . self::getEol(1);
				$content .= "module.messages = $messages;" . self::getEol();

				break;
		}
	}

	return $content;
}