{"version":3,"file":"32111.2c47ca51.es5.js","mappings":"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","sources":["webpack://assr-alfaleasing/./src/mocks/settings.js","webpack://assr-alfaleasing/./src/core/server/router/context.ts","webpack://assr-alfaleasing/./src/mocks/runtime.ts","webpack://assr-alfaleasing/./src/core/server/router/browser-router.tsx","webpack://assr-alfaleasing/./node_modules/web-vitals/dist/web-vitals.es5.min.js","webpack://assr-alfaleasing/./src/core/helpers/client-metrics.ts","webpack://assr-alfaleasing/./src/core/components/geo-switcher/styles.css?b8fd","webpack://assr-alfaleasing/./src/core/components/geo-switcher/geo-switcher-panel.tsx","webpack://assr-alfaleasing/./src/core/components/geo-switcher/index.tsx","webpack://assr-alfaleasing/./src/core/components/current-host/styles.css?ba43","webpack://assr-alfaleasing/./src/core/components/current-host/index.tsx","webpack://assr-alfaleasing/./src/core/registry/get-widgets-record.ts","webpack://assr-alfaleasing/./src/core/helpers/map-object-values.ts","webpack://assr-alfaleasing/./src/core/widgets-factory/markdown/paragraph.tsx","webpack://assr-alfaleasing/./src/core/widgets-factory/markdown/link.tsx","webpack://assr-alfaleasing/./src/core/widgets-factory/markdown/component.tsx","webpack://assr-alfaleasing/./src/core/widgets-factory/markdown/index.ts","webpack://assr-alfaleasing/./src/core/helpers/get-personalized-tree.ts","webpack://assr-alfaleasing/./src/core/constants/index.ts","webpack://assr-alfaleasing/./src/core/widgets-factory/tree-builder.ts","webpack://assr-alfaleasing/./src/core/server/router/renderer.tsx","webpack://assr-alfaleasing/./src/core/helpers/platform-id.ts","webpack://assr-alfaleasing/./src/core/components/app-core/config.ts","webpack://assr-alfaleasing/./src/core/helpers/get-key-value-from-search-str.ts","webpack://assr-alfaleasing/./src/core/components/app-core/app-core.tsx","webpack://assr-alfaleasing/./src/core/components/app-core/index.ts","webpack://assr-alfaleasing/./src/core/components/application/index.tsx","webpack://assr-alfaleasing/./src/core/client/index.tsx","webpack://assr-alfaleasing/./node_modules/querystringify/index.js","webpack://assr-alfaleasing/./node_modules/requires-port/index.js","webpack://assr-alfaleasing/./node_modules/url-parse/index.js","webpack://assr-alfaleasing/./node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js"],"sourcesContent":["module.exports = {\n defaultZone: 'ru',\n excludedPropsFromGeo: [\n 'jiraIssue',\n 'uid',\n 'widgetGeo',\n '__mocksource',\n 'dateTo',\n 'dateFrom',\n 'widgetReused',\n 'widgetDisabled',\n 'widgetComment'\n ]\n};\n","import { createContext } from 'react';\nimport type { TDevice } from '@alfa-bank/site-registry-tools/widgets-manifest';\nimport { TProcessedWidget } from '~/models';\n\n/** создаем контекст для прокидывания данных для дерева виджетов (используется и на сервере и на клиенте) */\nexport const { Consumer, Provider } = createContext<{\n device: TDevice;\n widgets: TProcessedWidget[];\n}>({ device: 'desktop', widgets: [] });\n","/* istanbul ignore file */\nimport { defaultZone } from './settings';\nimport { TProcessedWidget, TGeoDependedWidget } from '~/models';\n\nconst getOrderedGeoList = (geoList: string[]): string[] => {\n /*\n * Если есть стандартная зона, то переносим её в конец массива\n * Более экзотические зоны имеют больший вес, например, msk > ru\n * Таким образом мы сперва ищем виджет/пропс для более редкой группы\n */\n const defaultZoneIncluded = geoList.includes(defaultZone);\n\n return defaultZoneIncluded\n ? [...geoList.filter(zone => zone !== defaultZone), defaultZone]\n : geoList;\n};\n\n/**\n * Трансформирует дерево виджетов со всеми вариациями гео в дерево, которое приходит от сервера\n *\n * @param tree — дерево виджетов со всеми вариациями гео\n * @param geoList — набор активных гео-зон\n * @param usedGroups — аккумулирует случайно выбранные гео-зоны, если не передали никаких зон в geoList\n * @param allGroups — все встретившиеся гео-зоны\n * @returns объект с корректным деревом и набор всех встретившихся гео-зон\n */\nexport function toGeo(\n tree: TGeoDependedWidget[],\n geoList: string[],\n usedGroups: Set = new Set(),\n allGroups: Set = new Set()\n): {\n allGroups: Set;\n tree: TProcessedWidget[];\n usedGroups: Set;\n} {\n const noGeoSelected = geoList.length === 0;\n const orderedGeoList = getOrderedGeoList(geoList);\n\n const filtered = tree.filter(widget => {\n if (widget.widgetDisabled) return false;\n const { widgetGeo = [] } = widget;\n widgetGeo.forEach(el => allGroups.add(el));\n\n if (noGeoSelected) {\n widgetGeo.forEach(el => usedGroups.add(el));\n\n return true;\n }\n\n return orderedGeoList.some(geo => widgetGeo.includes(geo));\n });\n\n const fixedTree: TProcessedWidget[] = filtered.map(child => {\n const properties = (Array.isArray(child.properties) ? child.properties : []).map(prop => {\n // eslint-disable-next-line no-restricted-syntax\n\n for (const value of prop.values) {\n value.geo.forEach(el => allGroups.add(el));\n }\n\n if (noGeoSelected) {\n prop.values[0].geo.forEach(el => usedGroups.add(el));\n\n return [prop.name, prop.values[0].value];\n }\n\n const { value } =\n prop.values.find(geoProp => {\n return orderedGeoList.some(geo => geoProp.geo.includes(geo));\n }) || {};\n\n return [prop.name, value];\n });\n\n // Возвращаем __mocksource в пропсы, чтобы его было видно в дев-тулзе реакта\n // eslint-disable-next-line no-underscore-dangle\n properties.push(['__mocksource', child.__mocksource]);\n\n let children: TProcessedWidget[] = [];\n\n if (child.children) {\n children = toGeo(child.children, geoList, usedGroups, allGroups).tree;\n }\n\n return {\n ...child,\n properties: Object.fromEntries(properties),\n children\n };\n });\n\n return {\n tree: fixedTree,\n allGroups,\n usedGroups\n };\n}\n","import React, { ReactElement } from 'react';\n\nimport type { TDevice } from '@alfa-bank/site-registry-tools/widgets-manifest';\nimport { Provider } from './context';\nimport { toGeo } from '~/../mocks/runtime';\nimport { IMockInfo, IPageContent } from '~/models';\n\ninterface IBrowserRouterProps {\n /** выбранные гео-группы */\n activeGroups?: string[];\n children: ReactElement;\n /** тип устройства */\n device: TDevice;\n /** данные мока */\n mockInfo?: IMockInfo;\n /** сео и виджеты на странице */\n pageContent: IPageContent;\n}\n\n/** контекст провайдер с данными для создания дерева виджетов (для клиента) */\nexport function BrowserRouter({\n activeGroups,\n children,\n device,\n mockInfo,\n pageContent\n}: IBrowserRouterProps) {\n /** если вызывается эндпоинт рендера моков */\n const widgets =\n mockInfo && activeGroups\n ? toGeo(mockInfo.treeWithGeo, activeGroups).tree\n : pageContent.widgets;\n\n return {children};\n}\n","var t,n,e=function(){return\"\".concat(Date.now(),\"-\").concat(Math.floor(8999999999999*Math.random())+1e12)},i=function(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:-1;return{name:t,value:n,delta:0,entries:[],id:e(),isFinal:!1}},a=function(t,n){try{if(PerformanceObserver.supportedEntryTypes.includes(t)){var e=new PerformanceObserver((function(t){return t.getEntries().map(n)}));return e.observe({type:t,buffered:!0}),e}}catch(t){}},r=!1,o=!1,s=function(t){r=!t.persisted},u=function(){addEventListener(\"pagehide\",s),addEventListener(\"beforeunload\",(function(){}))},c=function(t){var n=arguments.length>1&&void 0!==arguments[1]&&arguments[1];o||(u(),o=!0),addEventListener(\"visibilitychange\",(function(n){var e=n.timeStamp;\"hidden\"===document.visibilityState&&t({timeStamp:e,isUnloading:r})}),{capture:!0,once:n})},l=function(t,n,e,i){var a;return function(){e&&n.isFinal&&e.disconnect(),n.value>=0&&(i||n.isFinal||\"hidden\"===document.visibilityState)&&(n.delta=n.value-(a||0),(n.delta||n.isFinal||void 0===a)&&(t(n),a=n.value))}},p=function(t){var n,e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],r=i(\"CLS\",0),o=function(t){t.hadRecentInput||(r.value+=t.value,r.entries.push(t),n())},s=a(\"layout-shift\",o);s&&(n=l(t,r,s,e),c((function(t){var e=t.isUnloading;s.takeRecords().map(o),e&&(r.isFinal=!0),n()})))},d=function(){return void 0===t&&(t=\"hidden\"===document.visibilityState?0:1/0,c((function(n){var e=n.timeStamp;return t=e}),!0)),{get timeStamp(){return t}}},v=function(t){var n,e=i(\"FCP\"),r=d(),o=a(\"paint\",(function(t){\"first-contentful-paint\"===t.name&&t.startTime1&&void 0!==arguments[1]&&arguments[1],r=i(\"LCP\"),o=d(),s=function(t){var e=t.startTime;e {\n /** значение метрики */\n data: number;\n /** имя метрики */\n metricName: string;\n}\n\n/** отправляет данные собранных метрик\n * @param metricData данные для отправки\n */\nasync function sendMetric(metricData: ISendMetric) {\n if (typeof metricData.data !== 'number') {\n return;\n }\n\n const body = JSON.stringify(metricData);\n\n const res = await fetch(`${process.env.CLIENT_METRICS_HOST}metrics`, {\n body,\n method: 'POST',\n keepalive: true\n });\n\n if (!res.ok) {\n console.error(\n `Client-metrics service responded with error: ${res.status} ${res.statusText}`\n );\n }\n}\n\n/** функция собирает метрики на клиенте: отправляет время загрузки страницы (при уходе со страницы),\n * время гидрации, гугл метрики (https://web.dev/vitals/)\n * @param metricsData данные о клиенте и гидрации для отправки метрик\n */\nexport function getClientMetrics({ hydrateTime, ...commonData }: IMetricsData): void {\n const webVitals = [getCLS, getFID, getLCP, getFCP, getTTFB];\n\n if (performance?.getEntriesByType) {\n window.addEventListener('beforeunload', () => {\n const timing = performance.getEntriesByType('navigation')[0];\n\n /**\n * https://developer.mozilla.org/en-US/docs/Web/API/PerformanceNavigationTiming#browser_compatibility\n * IE, safari и ios не поддерживают PerformanceNavigationTiming.\n * Для них используем устаревший performance.timing\n */\n const fpl = timing\n ? timing.duration\n : performance.timing.loadEventEnd - performance.timing.navigationStart;\n\n sendMetric({\n metricName: 'full_page_load',\n data: fpl,\n ...commonData\n });\n });\n }\n\n sendMetric({ metricName: 'react_hydrate', data: hydrateTime, ...commonData });\n\n webVitals.forEach(getMetric =>\n getMetric(({ name, value }) =>\n sendMetric({ metricName: name.toLowerCase(), data: value, ...commonData })\n )\n );\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"panel\":\"a2hB_\",\"geoGroup\":\"b2hB_\"};","import React, { cloneElement, useState, useEffect, ChangeEvent } from 'react';\nimport cookies from 'js-cookie';\nimport { IMockInfo } from '~/models';\nimport styles from './styles.css';\n\nconst MOCK_GEO_GROUPS_COOKIE_NAME = 'groupsForGeoMock';\n\ninterface IGeoSwitcherProps {\n children: React.ReactElement;\n /** данные мока */\n mockInfo: IMockInfo;\n /** обработчик закрытия панели */\n onClose: () => void;\n}\n\n/** функция записи выбранных гео-групп в куку\n * @param activeGroups сет выбранных групп\n */\nconst updateGroupsForGeoMockCookie = (activeGroups: Set) => {\n const value = JSON.stringify(Array.from(activeGroups));\n cookies.set(MOCK_GEO_GROUPS_COOKIE_NAME, value, {\n expires: 30,\n path: window.location.pathname\n });\n};\n\n/** Компонент отладочной панели переключения гео-групп */\nexport const GeoSwitcherPanel = ({ children, mockInfo, onClose }: IGeoSwitcherProps) => {\n const { possilbleGroups, usedGroups } = mockInfo;\n\n /** используемые гео-группы */\n const [activeGroups, setActiveGroups] = useState>(\n new Set(JSON.parse(cookies.get(MOCK_GEO_GROUPS_COOKIE_NAME) || '[]'))\n );\n\n /** обработчик выбора группы */\n const onChange = ({ target }: ChangeEvent) => {\n const groups = new Set(activeGroups);\n if (target.checked) {\n groups.add(target.name);\n } else {\n groups.delete(target.name);\n }\n\n setActiveGroups(groups);\n };\n\n /** обработчик выбора всех групп */\n const onChangeAll = ({ target }: ChangeEvent) => {\n const newActiveGroups = new Set(target.checked ? ['all', ...possilbleGroups] : []);\n setActiveGroups(newActiveGroups);\n };\n\n /** при маунте сравниваем группы из куки и данных мока\n * если из куки групп нет, а в моке есть - записываем в куку данные из мока\n */\n useEffect(() => {\n if (!activeGroups.size && usedGroups.length) {\n const usedGroupsSet = new Set(usedGroups);\n setActiveGroups(usedGroupsSet);\n updateGroupsForGeoMockCookie(usedGroupsSet);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n /** запись выбранных групп в куку */\n useEffect(() => {\n updateGroupsForGeoMockCookie(activeGroups);\n }, [activeGroups]);\n\n return (\n <>\n
\n \n {['all', ...possilbleGroups].map(group => {\n return (\n
\n \n
\n );\n })}\n
\n {cloneElement(children, { activeGroups: Array.from(activeGroups) })}\n \n );\n};\n","import React, { useState, useEffect, useCallback } from 'react';\nimport { GeoSwitcherPanel } from './geo-switcher-panel';\nimport { IMockInfo } from '~/models';\n\ninterface IGeoSwitcherProps {\n children: React.ReactElement;\n /** данные мока */\n mockInfo?: IMockInfo;\n}\n\n/** При рендере мока выводит отладочную панель для переключения гео-групп */\nexport const GeoSwitcher = ({ children, mockInfo }: IGeoSwitcherProps) => {\n const [visible, setVisible] = useState(false);\n\n const onClose = useCallback(() => setVisible(false), []);\n\n useEffect(() => {\n if (mockInfo) {\n setVisible(true);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n if (!mockInfo || !visible) {\n return children;\n }\n\n return (\n \n {children}\n \n );\n};\n","// extracted by mini-css-extract-plugin\nexport default {\"panel\":\"a1gTl\",\"host\":\"b1gTl\"};","import React, { useState } from 'react';\nimport cookies from 'js-cookie';\nimport styles from './styles.css';\n\nconst RENDER_HOST_COOKIE_NAME = 'renderer_host';\n\n/** компонент выводит отладочный банер с текущим хостом */\nexport function CurrentHost() {\n const [showBanner, setShowBanner] = useState(Boolean(cookies.get(RENDER_HOST_COOKIE_NAME)));\n\n const onHide = () => setShowBanner(false);\n const onRemove = () => {\n cookies.remove(RENDER_HOST_COOKIE_NAME, {\n path: '/',\n domain: `.${window.location.host}`\n });\n onHide();\n };\n\n if (!showBanner) {\n return null;\n }\n\n return (\n
\n

Текущий хост: {process.env.PUBLIC_PATH}

\n
\n \n \n
\n
\n );\n}\n","import type { TDevice } from '@alfa-bank/site-registry-tools/widgets-manifest';\nimport { IWidgetRecordForSpecificDevice } from '~/models';\nimport { getWidgetsManifests } from './widgets';\n\n/** Функция получения данных виджета из манифеста */\nexport const getWidgetRecord = (\n /** имя виджета */\n name: string,\n /** тип устройства */\n deviceType: TDevice\n): IWidgetRecordForSpecificDevice | null => {\n /** манифест виджета */\n const widgets = getWidgetsManifests();\n const widgetRecord = widgets[name];\n\n if (widgetRecord) {\n const componentRecord = widgetRecord.device[deviceType] || widgetRecord.device.common;\n\n if (componentRecord) {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { device, ...otherRecordProps } = widgetRecord;\n\n return {\n ...otherRecordProps,\n componentRecord\n };\n }\n }\n\n return null;\n};\n","import { isValidElement } from 'react';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype TValueType = any;\n\ntype TObjectType = {\n [key: string]: TValueType;\n};\n\nconst isObject = (value: TValueType): boolean =>\n typeof value === 'object' &&\n !isValidElement(value) &&\n value !== null &&\n !(value instanceof RegExp) &&\n !(value instanceof Error) &&\n !(value instanceof Date);\n\n/** функция рекурсивно разбирает объект и вызывает колбек с полученными значениями полей\n * @param props объект данных для обработки\n * @param mapper функция для обработки данных\n */\nexport const mapObjectValues = (\n props: TObjectType,\n mapper: (value: TValueType) => TValueType\n): TObjectType => {\n const parse = value => {\n if (Array.isArray(value)) {\n return value.map(item => parse(item));\n }\n\n if (isObject(value)) {\n return mapObjectValues(value, mapper);\n }\n\n return mapper(value);\n };\n\n return Object.entries(props).reduce((acc, [key, value]) => {\n acc[key] = parse(value);\n\n return acc;\n }, {});\n};\n","import React, { Fragment, ReactNode } from 'react';\n\ninterface IParagraphProps {\n children: ReactNode;\n}\n\n/** компонент для замены стандартного параграфа при парсинге md разметки */\nexport const Paragraph = ({ children }: IParagraphProps) => {children};\n","import { Link } from '@alfa-bank/site-link';\nimport React, { ReactNode } from 'react';\n\ninterface IMarkdownLinkProps {\n children: ReactNode;\n href: string;\n}\n\n/** компонент для замены стандартной ссылки при парсинге md разментки */\nexport const MarkdownLink = ({ children, href }: IMarkdownLinkProps) => (\n {children}\n);\n","import { compiler } from 'markdown-to-jsx';\nimport { Strong } from '@alfa-bank/site-deprecated-strong';\nimport { Paragraph } from './paragraph';\nimport { MarkdownLink } from './link';\n\n/** компонент возвращает разметку с замененными тегами\n * @param data объект с текстом\n */\nexport const Markdown = ({ value }: { value: string }) =>\n compiler(value, {\n /** строки преобразуются в inline элементы */\n forceInline: true,\n /** теги заменяются соответствующими компонентами */\n overrides: {\n strong: {\n component: Strong\n },\n p: {\n component: Paragraph\n },\n a: {\n component: MarkdownLink\n }\n }\n });\n","import { createElement, ReactElement } from 'react';\nimport { mapObjectValues } from '~/helpers/map-object-values';\nimport { TProcessedProperties } from '~/models';\nimport { Markdown } from './component';\n\n/** создаёт react element с преобразованной разметкой\n * @param value текст для преобразования\n */\nexport function createMarkdown(value = ''): ReactElement {\n return createElement(Markdown, { value });\n}\n\n/** функция находит и преобразует разметку, которая начинается с переданного префикса\n * @param props объект данных (пропсы виджета)\n * @param prefix префикс для поиска\n */\nexport const mapMarkdownProps = (props: TProcessedProperties, prefix = 'md:') => {\n const regexp = new RegExp(`^${prefix}\\\\s*`);\n\n return mapObjectValues(props, value => {\n if (typeof value === 'string' && value.startsWith(prefix)) {\n const clearValue = value.replace(regexp, '');\n\n return createMarkdown(clearValue);\n }\n\n return value;\n });\n};\n","import { ICollectorData } from '@alfa-bank/site-registry-tools/collector-data';\nimport { TProcessedWidget } from '~/models';\n\nconst PERSONAL_PROP_NAME = 'personal-new';\n\n/** проверяет нужно ли показывать персонализированный виджет */\nconst isWidgetRendered = (isWidgetPersonalized: boolean, condition: boolean) =>\n isWidgetPersonalized ? condition : true;\n\n/** возвращает список виджетов с персонализацией, которые нужно показывать:\n * если на странице есть продукты для персонализации - убирает персонализированные виджеты продукты которых не совпадают с продуктами на странице\n * если нет - убирает персонализированные виджеты без флага default\n * персонализация - http://jira.moscow.alfaintra.net/browse/ALFABANKRU-48940\n * @param tree виджеты на странице\n * @param collectorData данные страницы\n */\nexport const getPersonalizedTree = (\n tree: TProcessedWidget[],\n collectorData: ICollectorData\n): TProcessedWidget[] => {\n const { personal } = collectorData;\n\n if (personal?.length) {\n for (const productCode of personal) {\n const personalizedTree = tree.filter(({ properties }) => {\n const isWidgetPersonalized = Boolean(properties?.[PERSONAL_PROP_NAME]);\n const widgetProduct = properties?.[PERSONAL_PROP_NAME]?.product;\n\n return isWidgetRendered(isWidgetPersonalized, widgetProduct === productCode);\n });\n if (personalizedTree.length) {\n return personalizedTree;\n }\n }\n }\n\n return tree.filter(({ properties }) => {\n const isWidgetPersonalized = Boolean(properties?.[PERSONAL_PROP_NAME]);\n const isWidgetDefault = Boolean(properties?.[PERSONAL_PROP_NAME]?.default);\n\n return isWidgetRendered(isWidgetPersonalized, isWidgetDefault);\n });\n};\n","import { TDeviceKeys } from '~/models';\n\nexport const ASSR_VIEW_MODE = 'assr-view-mode';\n\nexport const defaultCity = {\n fiasId: '0c5b2444-70a0-4932-980c-b4dc0d3f02b5',\n id: 21,\n cityTitle: 'Москва',\n cityPath: 'moscow',\n regionId: 77\n};\n\nexport const WIDGET_REGISTRY_DEVICES: { [key in TDeviceKeys]: string } = {\n desktop: 'desktop',\n mobile: 'mobile',\n common: 'common'\n};\n\nexport const ERROR_STATUSES = {\n VALIDATION_ERROR: 400,\n NOT_FOUND: 404,\n INTERNAL_SERVER_ERROR: 500,\n GATEWAY_TIMEOUT: 504\n};\n\n/** Виджеты, у которых не должно быть чилдов */\nexport const widgetsWithoutChildren = new Set(['TextHolder']);\n\n/** Расширенные поля логирования */\nexport const EXTENDED_LOG_FIELDS = {\n registry: {\n api_operation_type: 'registry',\n api_operation_target: 'widgets'\n },\n render: {\n api_operation_type: 'render',\n api_operation_target: 'page'\n }\n};\n","import { createElement, ReactElement } from 'react';\nimport { FastifyRequest } from 'fastify';\nimport type { TDevice } from '@alfa-bank/site-registry-tools/widgets-manifest';\nimport { ICollectorData } from '@alfa-bank/site-registry-tools/collector-data';\n// @ts-ignore\nimport { withErrorBoundary } from '@alfa-bank/site-util-error-boundary';\n\nimport { getWidgetRecord } from '~/registry/get-widgets-record';\nimport { TProcessedWidget, TProcessedProperties, TEnhancedProcessedProperties } from '~/models';\nimport { mapMarkdownProps } from './markdown';\nimport { getPersonalizedTree } from '~/helpers/get-personalized-tree';\nimport { EXTENDED_LOG_FIELDS } from '~/constants';\n\n/** функция преобразует данные виджетов из json в дерево реакт компонентов\n * @param tree виджеты на странице\n * @param device тип устройства\n * @param logger логер в запросе\n * @param collectorData данные страницы\n */\nexport function createReactTree(\n tree: TProcessedWidget[],\n device: TDevice,\n logger: Console | FastifyRequest['log'],\n collectorData: ICollectorData\n): ReactElement[] {\n const { registry: EXTENDED_FIELDS } = EXTENDED_LOG_FIELDS;\n const reactTree: ReactElement[] = [];\n /** виджеты с персонализацией */\n const personalizedTree = getPersonalizedTree(tree, collectorData);\n personalizedTree.forEach((widget, index) => {\n const { name, properties, children = [], uid, version } = widget;\n\n /** данные виджета из манифеста */\n const widgetRecord = getWidgetRecord(name, device) || {};\n const { componentRecord, fallbackWidget = '' } = widgetRecord;\n\n /** если виджета нет в пакетах */\n if (!componentRecord) {\n logger.error(\n {\n ...EXTENDED_FIELDS\n },\n `TreeBuilder: widget ${name} with uid ${uid} for device ${device} not found in registry`\n );\n\n return;\n }\n\n const { component, defaultProps } = componentRecord;\n\n /** преобразуем пропсы с разметкой, добавляем defaultProps из манифеста к пропсам виджета */\n const transformedProps = mapMarkdownProps({\n ...(defaultProps as TProcessedProperties),\n ...properties\n });\n\n const enhancedProperties: TEnhancedProcessedProperties = {\n ...transformedProps,\n key: index,\n 'data-widget-name': name,\n 'data-widget-uid': uid,\n 'data-widget-version': version\n };\n\n /** если виджет должен сам уметь строить дерево */\n if (widgetRecord.rendersTree) {\n enhancedProperties.createTree = treeFromProps =>\n createReactTree(treeFromProps, device, logger, collectorData);\n }\n\n /** если виджету нужны данные страницы */\n if (widgetRecord.withCollectorData) {\n enhancedProperties.collectorData = collectorData;\n }\n\n /** виджет для рендера, если в основном виджете ошибка */\n const { componentRecord: fallbackComponentRecord } =\n getWidgetRecord(fallbackWidget, device) || {};\n\n /** оборачиваем виджет в ErrorBoundary */\n const wrappedComponent = withErrorBoundary(component, fallbackComponentRecord?.component);\n\n /** создаем реакт компонент из данных виджета */\n const reactElement = createElement(\n wrappedComponent,\n enhancedProperties,\n ...createReactTree(children, device, logger, collectorData)\n );\n\n reactTree.push(reactElement);\n });\n\n return reactTree;\n}\n","import React from 'react';\nimport { ICollectorData } from '@alfa-bank/site-registry-tools/collector-data';\n\nimport { FastifyRequest } from 'fastify';\nimport { createReactTree } from '~/widgets-factory/tree-builder';\nimport { Consumer } from './context';\n\ninterface IRendererProps {\n collectorData: ICollectorData;\n logger: Console | FastifyRequest['log'];\n}\n\n/** функция вызывает рендер дерева виджетов и прокидывает данные для рендера */\nexport const Renderer = ({ collectorData, logger = console }: IRendererProps) => (\n \n {({ device, widgets }) => createReactTree(widgets, device, logger, collectorData)}\n \n);\n","import cookies from 'js-cookie';\n\nimport { getKeyValueFromSearchStr } from './get-key-value-from-search-str';\n\nconst PLATFORM_ID_KEY = 'platformId';\nconst ALFASITE = 'alfasite';\n\n/** заполняет pid куки */\nexport function refillPIDCookie() {\n if (typeof window === 'undefined') {\n return;\n }\n\n const domain = `.${window.location.hostname}`;\n /** квери параметры в виде объекта */\n const urlParams = getKeyValueFromSearchStr();\n const passedId = urlParams[PLATFORM_ID_KEY];\n\n /** используется для яндекс метрики. domain - где видна кука, expires - время жизни */\n if (passedId) {\n cookies.set(PLATFORM_ID_KEY, passedId, { domain, expires: 30 });\n }\n\n if (!cookies.get(PLATFORM_ID_KEY)) {\n cookies.set(PLATFORM_ID_KEY, ALFASITE, { domain, expires: 30 });\n }\n}\n","import { HelmetProps } from 'react-helmet';\n\n/** конфиг дефолтных значений для head (если нет данных из сео) */\nexport const config: { app: HelmetProps } = {\n app: {\n htmlAttributes: { lang: 'ru' },\n title: '',\n titleTemplate: '%s',\n meta: [\n {\n name: 'description',\n content:\n 'Полный спектр банковских услуг для физических и юридических лиц: кредитование, вклады и депозиты, ведение счетов. Тарифы. Онлайн-банкинг. Адреса отделений и банкоматов.'\n },\n {\n name: 'msapplication-square70x70logo',\n content: '/f/media/logo/alfa-logo-white-70.png'\n },\n {\n name: 'msapplication-square150x150logo',\n content: '/f/media/logo/alfa-logo-white-150.png'\n },\n {\n name: 'msapplication-square310x310logo',\n content: '/f/media/logo/alfa-logo-white-310.png'\n },\n {\n name: 'application-name',\n content: 'Alfa-Bank'\n },\n {\n name: 'theme-color',\n content: '#f03226'\n }\n ]\n }\n};\n","import { IQueryParams } from '~/models';\n\n/**\n * Парсит параметры поисковой строки в объект. См тесты get-key-value-from-string.test.js\n */\nexport const getKeyValueFromSearchStr = (str?: string): IQueryParams => {\n if (typeof window === 'undefined') {\n return {};\n }\n\n let values = (str || window.location.search).replace(/^.*\\?/, '');\n\n [values] = values.split('#');\n\n const result: IQueryParams = {};\n\n values.split('&').forEach(val => {\n const data = val.split('=');\n const [key, value] = data;\n\n result[key] = value;\n });\n\n return result;\n};\n","import React from 'react';\nimport Helmet from 'react-helmet';\nimport { FastifyRequest } from 'fastify';\n// @ts-ignore\nimport { BaseLayer } from '@alfa-bank/site-layer';\nimport { ICollectorData } from '@alfa-bank/site-registry-tools/collector-data';\n\nimport { Renderer } from '~/server/router/renderer';\nimport { refillPIDCookie } from '~/helpers/platform-id';\nimport { ISeoInfo } from '~/models';\nimport { config } from './config';\n\nrefillPIDCookie();\n\ninterface IAppProps {\n collectorData: ICollectorData;\n logger: Console | FastifyRequest['log'];\n seo?: ISeoInfo;\n}\n\n/** Компонент рендера контента страницы (дерева виджетов) и данными для head\n * @param data объект данных для рендера контента и разметки в head\n */\nexport const AppCore = ({ collectorData, logger, seo }: IAppProps) => {\n const { linkCanonical, meta, title } = seo || {};\n const headMeta = meta && (Array.isArray(meta) ? { meta } : { meta: [meta] });\n const headCanonical = linkCanonical && {\n link: [{ rel: 'canonical', href: linkCanonical }]\n };\n const headTitle = title && { title };\n\n /** при наличии данных в сео дефолтные значения для head из конфига перезаписываются */\n const headParams = {\n ...config.app,\n ...headCanonical,\n ...headMeta,\n ...headTitle\n };\n\n return (\n \n \n \n \n );\n};\n","import { hot } from 'react-hot-loader/root';\n\nimport { AppCore } from './app-core';\n\nexport const hotAppCore = hot(AppCore);\n\nexport { AppCore } from './app-core';\n","import React from 'react';\nimport { QueryParamsContext } from '@alfa-bank/site-query-params-provider/context';\nimport { ICollectorData } from '@alfa-bank/site-registry-tools/collector-data';\nimport { IQueryContext } from '@alfa-bank/site-query-params-provider/src/models';\nimport { SsrPromiseContext } from '@alfa-bank/site-use-ssr-promise';\nimport { GeoInfoProvider } from '@alfa-bank/site-geo-info';\nimport { IGeoInfo } from '@alfa-bank/site-geo-info/src/models';\nimport { ISsrPromiseContext } from '@alfa-bank/site-use-ssr-promise/src/models/';\n// import { AlfaleasingCookieBanner } from '@alfa-bank/site-alfaleasing-cookie-banner';\nimport { hotAppCore as HotAppCore, AppCore } from '~/components/app-core';\nimport { IPageContent, IQueryParams } from '~/models';\n\ninterface IApplicationProps {\n cityInfo: IGeoInfo;\n collectorData: ICollectorData;\n fetchProcess?: ISsrPromiseContext;\n pageContent: IPageContent;\n queryParams: IQueryParams;\n useHot?: boolean;\n}\n\nexport const Application = ({\n cityInfo,\n collectorData,\n fetchProcess,\n pageContent,\n queryParams,\n useHot\n}: IApplicationProps) => {\n const CoreComponent = useHot ? HotAppCore : AppCore;\n\n return (\n \n \n \n \n {/* TODO: удалить при удачной миграции на новый баннер через ACMS */}\n {/* */}\n \n \n \n );\n};\n","import React from 'react';\nimport { hydrate } from 'react-dom';\nimport URL from 'url-parse';\n\nimport { loadableReady } from '@loadable/component';\n\nimport { BrowserRouter } from '~/server/router/browser-router';\nimport { getClientMetrics } from '~/helpers/client-metrics';\nimport { GeoSwitcher } from '~/components/geo-switcher';\nimport { CurrentHost } from '~/components/current-host';\nimport { Application } from '~/components/application';\nimport { IAppState } from '~/models';\n\nconst BEFORE_REACT_HYDRATE = 'before-react-hydrate';\nconst AFTER_REACT_HYDRATE = 'after-react-hydrate';\n\nconst root = document.getElementById('alfa');\n\nfunction getAppState(): IAppState {\n const state = document.querySelector('#app_state');\n if (!state || !state.textContent) {\n throw new Error('App state not found!');\n }\n\n return JSON.parse(state.textContent);\n}\n// eslint-disable-next-line no-underscore-dangle\nwindow.__APP_STATE__ = getAppState();\n\nconst {\n cityInfo,\n collectorData,\n device,\n fetchResults,\n mockInfo,\n pageContent\n} = window.__APP_STATE__; // eslint-disable-line no-underscore-dangle\n\nconst fetchProcess = {\n results: fetchResults,\n isFirstServerRender: false\n};\n\nconst clientQueryObject = URL(window.location.toString(), true).query;\nconst queryParams = { ...collectorData.queryParams, ...clientQueryObject };\n\nif (root != null) {\n // eslint-disable-next-line sonarjs/cognitive-complexity\n loadableReady(() => {\n if (performance?.mark) performance.mark(BEFORE_REACT_HYDRATE);\n if (performance?.measure)\n performance.measure('assets-loading', 'head-start', BEFORE_REACT_HYDRATE);\n hydrate(\n <>\n \n \n \n \n \n \n ,\n root,\n () => {\n if (performance?.mark) performance.mark(AFTER_REACT_HYDRATE);\n if (performance?.measure)\n performance.measure('hydrate', BEFORE_REACT_HYDRATE, AFTER_REACT_HYDRATE);\n\n if (process.env.CLIENT_METRICS_HOST && !mockInfo) {\n const { googleExpId, googleVarId } =\n collectorData?.additionalProperties?.abTest || {};\n\n getClientMetrics({\n device,\n isModernBrowser: window.__IS_MODERN_BROWSER__, // eslint-disable-line no-underscore-dangle\n abTest: googleExpId &&\n googleVarId && {\n expId: googleExpId,\n varId: googleVarId\n },\n hydrateTime: performance?.getEntriesByName?.('hydrate', 'measure')[0]\n .duration,\n city: cityInfo.cityTitle,\n url: collectorData.url\n });\n }\n\n // Отключил пока не пофиксят ошибку https://github.com/open-telemetry/opentelemetry-js/issues/2116\n // import('~/tracer/opentelementy.client').catch(err =>\n // console.error('tracing not available', err)\n // );\n }\n );\n });\n}\n","'use strict';\n\nvar has = Object.prototype.hasOwnProperty\n , undef;\n\n/**\n * Decode a URI encoded string.\n *\n * @param {String} input The URI encoded string.\n * @returns {String|Null} The decoded string.\n * @api private\n */\nfunction decode(input) {\n try {\n return decodeURIComponent(input.replace(/\\+/g, ' '));\n } catch (e) {\n return null;\n }\n}\n\n/**\n * Attempts to encode a given input.\n *\n * @param {String} input The string that needs to be encoded.\n * @returns {String|Null} The encoded string.\n * @api private\n */\nfunction encode(input) {\n try {\n return encodeURIComponent(input);\n } catch (e) {\n return null;\n }\n}\n\n/**\n * Simple query string parser.\n *\n * @param {String} query The query string that needs to be parsed.\n * @returns {Object}\n * @api public\n */\nfunction querystring(query) {\n var parser = /([^=?#&]+)=?([^&]*)/g\n , result = {}\n , part;\n\n while (part = parser.exec(query)) {\n var key = decode(part[1])\n , value = decode(part[2]);\n\n //\n // Prevent overriding of existing properties. This ensures that build-in\n // methods like `toString` or __proto__ are not overriden by malicious\n // querystrings.\n //\n // In the case if failed decoding, we want to omit the key/value pairs\n // from the result.\n //\n if (key === null || value === null || key in result) continue;\n result[key] = value;\n }\n\n return result;\n}\n\n/**\n * Transform a query string to an object.\n *\n * @param {Object} obj Object that should be transformed.\n * @param {String} prefix Optional prefix.\n * @returns {String}\n * @api public\n */\nfunction querystringify(obj, prefix) {\n prefix = prefix || '';\n\n var pairs = []\n , value\n , key;\n\n //\n // Optionally prefix with a '?' if needed\n //\n if ('string' !== typeof prefix) prefix = '?';\n\n for (key in obj) {\n if (has.call(obj, key)) {\n value = obj[key];\n\n //\n // Edge cases where we actually want to encode the value to an empty\n // string instead of the stringified value.\n //\n if (!value && (value === null || value === undef || isNaN(value))) {\n value = '';\n }\n\n key = encode(key);\n value = encode(value);\n\n //\n // If we failed to encode the strings, we should bail out as we don't\n // want to add invalid strings to the query.\n //\n if (key === null || value === null) continue;\n pairs.push(key +'='+ value);\n }\n }\n\n return pairs.length ? prefix + pairs.join('&') : '';\n}\n\n//\n// Expose the module.\n//\nexports.stringify = querystringify;\nexports.parse = querystring;\n","'use strict';\n\n/**\n * Check if we're required to add a port number.\n *\n * @see https://url.spec.whatwg.org/#default-port\n * @param {Number|String} port Port number we need to check\n * @param {String} protocol Protocol we need to check against.\n * @returns {Boolean} Is it a default port for the given protocol\n * @api private\n */\nmodule.exports = function required(port, protocol) {\n protocol = protocol.split(':')[0];\n port = +port;\n\n if (!port) return false;\n\n switch (protocol) {\n case 'http':\n case 'ws':\n return port !== 80;\n\n case 'https':\n case 'wss':\n return port !== 443;\n\n case 'ftp':\n return port !== 21;\n\n case 'gopher':\n return port !== 70;\n\n case 'file':\n return false;\n }\n\n return port !== 0;\n};\n","'use strict';\n\nvar required = require('requires-port')\n , qs = require('querystringify')\n , slashes = /^[A-Za-z][A-Za-z0-9+-.]*:\\/\\//\n , protocolre = /^([a-z][a-z0-9.+-]*:)?(\\/\\/)?([\\S\\s]*)/i\n , whitespace = '[\\\\x09\\\\x0A\\\\x0B\\\\x0C\\\\x0D\\\\x20\\\\xA0\\\\u1680\\\\u180E\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200A\\\\u202F\\\\u205F\\\\u3000\\\\u2028\\\\u2029\\\\uFEFF]'\n , left = new RegExp('^'+ whitespace +'+');\n\n/**\n * Trim a given string.\n *\n * @param {String} str String to trim.\n * @public\n */\nfunction trimLeft(str) {\n return (str ? str : '').toString().replace(left, '');\n}\n\n/**\n * These are the parse rules for the URL parser, it informs the parser\n * about:\n *\n * 0. The char it Needs to parse, if it's a string it should be done using\n * indexOf, RegExp using exec and NaN means set as current value.\n * 1. The property we should set when parsing this value.\n * 2. Indication if it's backwards or forward parsing, when set as number it's\n * the value of extra chars that should be split off.\n * 3. Inherit from location if non existing in the parser.\n * 4. `toLowerCase` the resulting value.\n */\nvar rules = [\n ['#', 'hash'], // Extract from the back.\n ['?', 'query'], // Extract from the back.\n function sanitize(address) { // Sanitize what is left of the address\n return address.replace('\\\\', '/');\n },\n ['/', 'pathname'], // Extract from the back.\n ['@', 'auth', 1], // Extract from the front.\n [NaN, 'host', undefined, 1, 1], // Set left over value.\n [/:(\\d+)$/, 'port', undefined, 1], // RegExp the back.\n [NaN, 'hostname', undefined, 1, 1] // Set left over.\n];\n\n/**\n * These properties should not be copied or inherited from. This is only needed\n * for all non blob URL's as a blob URL does not include a hash, only the\n * origin.\n *\n * @type {Object}\n * @private\n */\nvar ignore = { hash: 1, query: 1 };\n\n/**\n * The location object differs when your code is loaded through a normal page,\n * Worker or through a worker using a blob. And with the blobble begins the\n * trouble as the location object will contain the URL of the blob, not the\n * location of the page where our code is loaded in. The actual origin is\n * encoded in the `pathname` so we can thankfully generate a good \"default\"\n * location from it so we can generate proper relative URL's again.\n *\n * @param {Object|String} loc Optional default location object.\n * @returns {Object} lolcation object.\n * @public\n */\nfunction lolcation(loc) {\n var globalVar;\n\n if (typeof window !== 'undefined') globalVar = window;\n else if (typeof global !== 'undefined') globalVar = global;\n else if (typeof self !== 'undefined') globalVar = self;\n else globalVar = {};\n\n var location = globalVar.location || {};\n loc = loc || location;\n\n var finaldestination = {}\n , type = typeof loc\n , key;\n\n if ('blob:' === loc.protocol) {\n finaldestination = new Url(unescape(loc.pathname), {});\n } else if ('string' === type) {\n finaldestination = new Url(loc, {});\n for (key in ignore) delete finaldestination[key];\n } else if ('object' === type) {\n for (key in loc) {\n if (key in ignore) continue;\n finaldestination[key] = loc[key];\n }\n\n if (finaldestination.slashes === undefined) {\n finaldestination.slashes = slashes.test(loc.href);\n }\n }\n\n return finaldestination;\n}\n\n/**\n * @typedef ProtocolExtract\n * @type Object\n * @property {String} protocol Protocol matched in the URL, in lowercase.\n * @property {Boolean} slashes `true` if protocol is followed by \"//\", else `false`.\n * @property {String} rest Rest of the URL that is not part of the protocol.\n */\n\n/**\n * Extract protocol information from a URL with/without double slash (\"//\").\n *\n * @param {String} address URL we want to extract from.\n * @return {ProtocolExtract} Extracted information.\n * @private\n */\nfunction extractProtocol(address) {\n address = trimLeft(address);\n var match = protocolre.exec(address);\n\n return {\n protocol: match[1] ? match[1].toLowerCase() : '',\n slashes: !!match[2],\n rest: match[3]\n };\n}\n\n/**\n * Resolve a relative URL pathname against a base URL pathname.\n *\n * @param {String} relative Pathname of the relative URL.\n * @param {String} base Pathname of the base URL.\n * @return {String} Resolved pathname.\n * @private\n */\nfunction resolve(relative, base) {\n if (relative === '') return base;\n\n var path = (base || '/').split('/').slice(0, -1).concat(relative.split('/'))\n , i = path.length\n , last = path[i - 1]\n , unshift = false\n , up = 0;\n\n while (i--) {\n if (path[i] === '.') {\n path.splice(i, 1);\n } else if (path[i] === '..') {\n path.splice(i, 1);\n up++;\n } else if (up) {\n if (i === 0) unshift = true;\n path.splice(i, 1);\n up--;\n }\n }\n\n if (unshift) path.unshift('');\n if (last === '.' || last === '..') path.push('');\n\n return path.join('/');\n}\n\n/**\n * The actual URL instance. Instead of returning an object we've opted-in to\n * create an actual constructor as it's much more memory efficient and\n * faster and it pleases my OCD.\n *\n * It is worth noting that we should not use `URL` as class name to prevent\n * clashes with the global URL instance that got introduced in browsers.\n *\n * @constructor\n * @param {String} address URL we want to parse.\n * @param {Object|String} [location] Location defaults for relative paths.\n * @param {Boolean|Function} [parser] Parser for the query string.\n * @private\n */\nfunction Url(address, location, parser) {\n address = trimLeft(address);\n\n if (!(this instanceof Url)) {\n return new Url(address, location, parser);\n }\n\n var relative, extracted, parse, instruction, index, key\n , instructions = rules.slice()\n , type = typeof location\n , url = this\n , i = 0;\n\n //\n // The following if statements allows this module two have compatibility with\n // 2 different API:\n //\n // 1. Node.js's `url.parse` api which accepts a URL, boolean as arguments\n // where the boolean indicates that the query string should also be parsed.\n //\n // 2. The `URL` interface of the browser which accepts a URL, object as\n // arguments. The supplied object will be used as default values / fall-back\n // for relative paths.\n //\n if ('object' !== type && 'string' !== type) {\n parser = location;\n location = null;\n }\n\n if (parser && 'function' !== typeof parser) parser = qs.parse;\n\n location = lolcation(location);\n\n //\n // Extract protocol information before running the instructions.\n //\n extracted = extractProtocol(address || '');\n relative = !extracted.protocol && !extracted.slashes;\n url.slashes = extracted.slashes || relative && location.slashes;\n url.protocol = extracted.protocol || location.protocol || '';\n address = extracted.rest;\n\n //\n // When the authority component is absent the URL starts with a path\n // component.\n //\n if (!extracted.slashes) instructions[3] = [/(.*)/, 'pathname'];\n\n for (; i < instructions.length; i++) {\n instruction = instructions[i];\n\n if (typeof instruction === 'function') {\n address = instruction(address);\n continue;\n }\n\n parse = instruction[0];\n key = instruction[1];\n\n if (parse !== parse) {\n url[key] = address;\n } else if ('string' === typeof parse) {\n if (~(index = address.indexOf(parse))) {\n if ('number' === typeof instruction[2]) {\n url[key] = address.slice(0, index);\n address = address.slice(index + instruction[2]);\n } else {\n url[key] = address.slice(index);\n address = address.slice(0, index);\n }\n }\n } else if ((index = parse.exec(address))) {\n url[key] = index[1];\n address = address.slice(0, index.index);\n }\n\n url[key] = url[key] || (\n relative && instruction[3] ? location[key] || '' : ''\n );\n\n //\n // Hostname, host and protocol should be lowercased so they can be used to\n // create a proper `origin`.\n //\n if (instruction[4]) url[key] = url[key].toLowerCase();\n }\n\n //\n // Also parse the supplied query string in to an object. If we're supplied\n // with a custom parser as function use that instead of the default build-in\n // parser.\n //\n if (parser) url.query = parser(url.query);\n\n //\n // If the URL is relative, resolve the pathname against the base URL.\n //\n if (\n relative\n && location.slashes\n && url.pathname.charAt(0) !== '/'\n && (url.pathname !== '' || location.pathname !== '')\n ) {\n url.pathname = resolve(url.pathname, location.pathname);\n }\n\n //\n // We should not add port numbers if they are already the default port number\n // for a given protocol. As the host also contains the port number we're going\n // override it with the hostname which contains no port number.\n //\n if (!required(url.port, url.protocol)) {\n url.host = url.hostname;\n url.port = '';\n }\n\n //\n // Parse down the `auth` for the username and password.\n //\n url.username = url.password = '';\n if (url.auth) {\n instruction = url.auth.split(':');\n url.username = instruction[0] || '';\n url.password = instruction[1] || '';\n }\n\n url.origin = url.protocol && url.host && url.protocol !== 'file:'\n ? url.protocol +'//'+ url.host\n : 'null';\n\n //\n // The href is just the compiled result.\n //\n url.href = url.toString();\n}\n\n/**\n * This is convenience method for changing properties in the URL instance to\n * insure that they all propagate correctly.\n *\n * @param {String} part Property we need to adjust.\n * @param {Mixed} value The newly assigned value.\n * @param {Boolean|Function} fn When setting the query, it will be the function\n * used to parse the query.\n * When setting the protocol, double slash will be\n * removed from the final url if it is true.\n * @returns {URL} URL instance for chaining.\n * @public\n */\nfunction set(part, value, fn) {\n var url = this;\n\n switch (part) {\n case 'query':\n if ('string' === typeof value && value.length) {\n value = (fn || qs.parse)(value);\n }\n\n url[part] = value;\n break;\n\n case 'port':\n url[part] = value;\n\n if (!required(value, url.protocol)) {\n url.host = url.hostname;\n url[part] = '';\n } else if (value) {\n url.host = url.hostname +':'+ value;\n }\n\n break;\n\n case 'hostname':\n url[part] = value;\n\n if (url.port) value += ':'+ url.port;\n url.host = value;\n break;\n\n case 'host':\n url[part] = value;\n\n if (/:\\d+$/.test(value)) {\n value = value.split(':');\n url.port = value.pop();\n url.hostname = value.join(':');\n } else {\n url.hostname = value;\n url.port = '';\n }\n\n break;\n\n case 'protocol':\n url.protocol = value.toLowerCase();\n url.slashes = !fn;\n break;\n\n case 'pathname':\n case 'hash':\n if (value) {\n var char = part === 'pathname' ? '/' : '#';\n url[part] = value.charAt(0) !== char ? char + value : value;\n } else {\n url[part] = value;\n }\n break;\n\n default:\n url[part] = value;\n }\n\n for (var i = 0; i < rules.length; i++) {\n var ins = rules[i];\n\n if (ins[4]) url[ins[1]] = url[ins[1]].toLowerCase();\n }\n\n url.origin = url.protocol && url.host && url.protocol !== 'file:'\n ? url.protocol +'//'+ url.host\n : 'null';\n\n url.href = url.toString();\n\n return url;\n}\n\n/**\n * Transform the properties back in to a valid and full URL string.\n *\n * @param {Function} stringify Optional query stringify function.\n * @returns {String} Compiled version of the URL.\n * @public\n */\nfunction toString(stringify) {\n if (!stringify || 'function' !== typeof stringify) stringify = qs.stringify;\n\n var query\n , url = this\n , protocol = url.protocol;\n\n if (protocol && protocol.charAt(protocol.length - 1) !== ':') protocol += ':';\n\n var result = protocol + (url.slashes ? '//' : '');\n\n if (url.username) {\n result += url.username;\n if (url.password) result += ':'+ url.password;\n result += '@';\n }\n\n result += url.host + url.pathname;\n\n query = 'object' === typeof url.query ? stringify(url.query) : url.query;\n if (query) result += '?' !== query.charAt(0) ? '?'+ query : query;\n\n if (url.hash) result += url.hash;\n\n return result;\n}\n\nUrl.prototype = { set: set, toString: toString };\n\n//\n// Expose the URL parser and some additional properties that might be useful for\n// others or testing.\n//\nUrl.extractProtocol = extractProtocol;\nUrl.location = lolcation;\nUrl.trimLeft = trimLeft;\nUrl.qs = qs;\n\nmodule.exports = Url;\n","function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n try {\n var info = gen[key](arg);\n var value = info.value;\n } catch (error) {\n reject(error);\n return;\n }\n\n if (info.done) {\n resolve(value);\n } else {\n Promise.resolve(value).then(_next, _throw);\n }\n}\n\nexport default function _asyncToGenerator(fn) {\n return function () {\n var self = this,\n args = arguments;\n return new Promise(function (resolve, reject) {\n var gen = fn.apply(self, args);\n\n function _next(value) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);\n }\n\n function _throw(err) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err);\n }\n\n _next(undefined);\n });\n };\n}"],"names":["module","defaultZone","excludedPropsFromGeo","createContext","device","widgets","Consumer","Provider","toGeo","tree","geoList","usedGroups","allGroups","Set","noGeoSelected","length","orderedGeoList","includes","filter","zone","getOrderedGeoList","widget","widgetDisabled","widgetGeo","forEach","el","add","some","geo","map","child","properties","Array","isArray","prop","values","name","value","find","geoProp","push","__mocksource","children","Object","fromEntries","BrowserRouter","activeGroups","mockInfo","pageContent","treeWithGeo","t","n","e","concat","Date","now","Math","floor","random","i","arguments","delta","entries","id","isFinal","a","PerformanceObserver","supportedEntryTypes","getEntries","observe","type","buffered","r","o","s","persisted","u","addEventListener","c","timeStamp","document","visibilityState","isUnloading","capture","once","l","disconnect","p","hadRecentInput","takeRecords","d","v","startTime","f","processingStart","window","perfMetrics","onFirstInputDelay","entryType","target","cancelable","m","Promise","passive","g","then","h","performance","getEntriesByType","timing","max","navigationStart","responseStart","readyState","setTimeout","sendMetric","metricData","data","body","JSON","stringify","fetch","process","CLIENT_METRICS_HOST","method","keepalive","res","ok","console","error","status","statusText","MOCK_GEO_GROUPS_COOKIE_NAME","updateGroupsForGeoMockCookie","from","cookies","expires","path","location","pathname","GeoSwitcherPanel","onClose","possilbleGroups","useState","parse","setActiveGroups","onChange","groups","checked","delete","onChangeAll","newActiveGroups","useEffect","size","usedGroupsSet","className","styles","onClick","group","key","htmlFor","has","cloneElement","GeoSwitcher","visible","setVisible","useCallback","RENDER_HOST_COOKIE_NAME","CurrentHost","Boolean","showBanner","setShowBanner","onHide","PUBLIC_PATH","domain","host","getWidgetRecord","deviceType","widgetRecord","getWidgetsManifests","componentRecord","common","otherRecordProps","mapObjectValues","props","mapper","item","isValidElement","RegExp","Error","isObject","reduce","acc","Paragraph","Fragment","MarkdownLink","href","Markdown","compiler","forceInline","overrides","strong","component","Strong","mapMarkdownProps","prefix","regexp","startsWith","createElement","createMarkdown","replace","isWidgetRendered","isWidgetPersonalized","condition","EXTENDED_LOG_FIELDS","api_operation_type","api_operation_target","createReactTree","logger","collectorData","EXTENDED_FIELDS","reactTree","personalizedTree","personal","productCode","PERSONAL_PROP_NAME","widgetProduct","product","isWidgetDefault","default","getPersonalizedTree","index","uid","version","fallbackWidget","defaultProps","transformedProps","enhancedProperties","rendersTree","createTree","treeFromProps","withCollectorData","fallbackComponentRecord","wrappedComponent","withErrorBoundary","reactElement","Renderer","PLATFORM_ID_KEY","config","htmlAttributes","lang","title","titleTemplate","meta","content","hostname","passedId","str","search","split","result","val","getKeyValueFromSearchStr","refillPIDCookie","AppCore","seo","linkCanonical","headMeta","headCanonical","link","rel","headTitle","headParams","Helmet","hotAppCore","hot","Application","cityInfo","fetchProcess","queryParams","CoreComponent","useHot","HotAppCore","BEFORE_REACT_HYDRATE","AFTER_REACT_HYDRATE","root","getElementById","__APP_STATE__","state","querySelector","textContent","getAppState","fetchResults","results","isFirstServerRender","clientQueryObject","URL","toString","query","loadableReady","mark","measure","hydrate","additionalProperties","abTest","googleExpId","googleVarId","hydrateTime","commonData","webVitals","getCLS","getFID","getLCP","getFCP","getTTFB","fpl","duration","loadEventEnd","metricName","getMetric","toLowerCase","getClientMetrics","isModernBrowser","__IS_MODERN_BROWSER__","expId","varId","getEntriesByName","city","cityTitle","url","prototype","hasOwnProperty","decode","input","decodeURIComponent","encode","encodeURIComponent","exports","obj","pairs","call","isNaN","join","part","parser","exec","port","protocol","required","qs","slashes","protocolre","left","trimLeft","rules","address","NaN","undefined","ignore","hash","lolcation","loc","self","finaldestination","Url","unescape","test","extractProtocol","match","rest","this","relative","extracted","instruction","instructions","slice","indexOf","charAt","base","last","unshift","up","splice","resolve","username","password","auth","origin","set","fn","pop","char","ins","asyncGeneratorStep","gen","reject","_next","_throw","arg","info","done","_asyncToGenerator","args","apply","err"],"sourceRoot":""}