{"version":3,"file":"bundle.js","mappings":"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","sources":["webpack://elc-component-renderer/webpack/universalModuleDefinition","webpack://elc-component-renderer/./node_modules/odiff/odiff.js","webpack://elc-component-renderer/external umd \"ElcServiceBus\"","webpack://elc-component-renderer/external umd {\"root\":[\"ElcRuntime\",\"ELCLogger\"],\"commonjs2\":\"ELCLogger\",\"commonjs\":\"ELCLogger\",\"amd\":\"ELCLogger\"}","webpack://elc-component-renderer/external umd {\"root\":[\"ElcRuntime\",\"React\"],\"commonjs2\":\"react\",\"commonjs\":\"react\",\"amd\":\"react\"}","webpack://elc-component-renderer/external umd {\"root\":[\"ElcRuntime\",\"ReactDom\"],\"commonjs2\":\"react-dom\",\"commonjs\":\"react-dom\",\"amd\":\"react-dom\"}","webpack://elc-component-renderer/webpack/bootstrap","webpack://elc-component-renderer/webpack/runtime/define property getters","webpack://elc-component-renderer/webpack/runtime/global","webpack://elc-component-renderer/webpack/runtime/hasOwnProperty shorthand","webpack://elc-component-renderer/webpack/runtime/make namespace object","webpack://elc-component-renderer/./node_modules/@estee/elc-universal-utils/src/UniversalUtils.ts","webpack://elc-component-renderer/./node_modules/@estee/elc-universal-utils/src/BrowserStorage.ts","webpack://elc-component-renderer/./node_modules/@estee/elc-universal-utils/src/Service/ServiceVersion.ts","webpack://elc-component-renderer/./node_modules/@estee/elc-telemetry/src/PerformanceMarker/PerformanceMarker.ts","webpack://elc-component-renderer/./node_modules/@estee/elc-telemetry/src/ErrorBoundary/ErrorBoundary.tsx","webpack://elc-component-renderer/./src/renderers/LazyRenderer.ts","webpack://elc-component-renderer/./src/renderers/ComponentRenderer.ts","webpack://elc-component-renderer/./src/BrowserComponentRenderer.ts","webpack://elc-component-renderer/./src/preloader/ViewDataPreloader.ts","webpack://elc-component-renderer/./src/utils/Debounce.ts","webpack://elc-component-renderer/./src/index.ts"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"react-dom\"), require(\"ElcServiceBus\"), require(\"ELCLogger\"), require(\"react\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"react-dom\", \"ElcServiceBus\", \"ELCLogger\", \"react\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"elc-component-renderer\"] = factory(require(\"react-dom\"), require(\"ElcServiceBus\"), require(\"ELCLogger\"), require(\"react\"));\n\telse\n\t\troot[\"elc-component-renderer\"] = factory(root[\"ElcRuntime\"][\"ReactDom\"], root[\"ElcServiceBus\"], root[\"ElcRuntime\"][\"ELCLogger\"], root[\"ElcRuntime\"][\"React\"]);\n})(self, (__WEBPACK_EXTERNAL_MODULE_react_dom__, __WEBPACK_EXTERNAL_MODULE__estee_elc_service_bus__, __WEBPACK_EXTERNAL_MODULE__estee_elc_logging__, __WEBPACK_EXTERNAL_MODULE_react__) => {\nreturn ","\"use strict\";\n\n/* Copyright (c) 2013 Billy Tetrud - Free to use for any purpose: MIT License*/\n// gets the changes that need to happen to a to change it into b\n// returns an object with the members\n // type\n // property\n // value\n // values\n // count\nmodule.exports = function(a,b) {\n var results = []\n diffInternal(a,b,results,[])\n return results\n}\n\nvar diffInternal = function(a,b,acc,base) {\n if(a === b || Number.isNaN(a)&&Number.isNaN(b)) {\n return;\n } else if(a instanceof Array && b instanceof Array) {\n var an=a.length-1,bn=b.length-1\n while(an >= 0 && bn >= 0) { // loop backwards (so that making changes in order will work correctly)\n if(!equal(a[an], b[bn])) {\n var indexes = findMatchIndexes(equal, a,b, an,bn, 0, 0)\n\n var anInner=an,bnInner=bn\n while(anInner > indexes.a && bnInner > indexes.b) {\n if(similar(a[anInner], b[bnInner])) {\n // get change for that element\n diffInternal(a[anInner],b[bnInner],acc, base.concat([anInner]))\n anInner--; bnInner--;\n } else {\n var indexesInner = findMatchIndexes(similar, a,b, anInner,bnInner, indexes.a+1, indexes.b+1)\n\n var numberPulled = anInner-indexesInner.a\n var numberPushed = bnInner-indexesInner.b\n\n if(numberPulled === 1 && numberPushed === 1) {\n set(acc, base.concat(indexesInner.a+1), b[indexesInner.b+1]) // set the one\n } else if(numberPulled === 1 && numberPushed === 2) {\n // set one, push the other\n add(acc, base,indexesInner.a+2, b.slice(indexesInner.b+2, bnInner+1))\n set(acc, base.concat(indexesInner.a+1), b[indexesInner.b+1])\n } else if(numberPulled === 2 && numberPushed === 1) {\n // set one, pull the other\n rm(acc, base, indexesInner.a+2, 1, a)\n set(acc, base.concat(indexesInner.a+1), b[indexesInner.b+1])\n } else if(numberPulled === 2 && numberPushed === 2) {\n set(acc, base.concat(indexesInner.a+2), b[indexesInner.b+2])\n set(acc, base.concat(indexesInner.a+1), b[indexesInner.b+1])\n } else {\n if(numberPulled > 0) { // if there were some elements pulled\n rm(acc, base, indexesInner.a+1, numberPulled, a)\n }\n if(numberPushed > 0) { // if there were some elements pushed\n add(acc, base,indexesInner.a+1, b.slice(indexesInner.b+1, bnInner+1))\n }\n }\n\n anInner = indexesInner.a\n bnInner = indexesInner.b\n }\n }\n\n if(anInner > indexes.a) { // more to pull\n rm(acc, base, anInner, anInner-indexes.a, a)\n } else if(bnInner > indexes.b) { // more to push\n add(acc, base, anInner+1, b.slice(indexes.b+1, bnInner+1))\n }\n\n an = indexes.a\n bn = indexes.b\n } else {\n an--; bn--;\n }\n }\n\n if(an >= 0) { // more to pull\n rm(acc, base, 0, an+1, a)\n } else if(bn >= 0) { // more to push\n add(acc, base,0, b.slice(0, bn+1))\n }\n\n } else if(a instanceof Date && b instanceof Date) {\n if(a.getTime() !== b.getTime()) {\n set(acc, base, b)\n }\n } else if(a instanceof Object && b instanceof Object) {\n var keyMap = merge(arrayToMap(Object.keys(a)), arrayToMap(Object.keys(b)))\n for(var key in keyMap) {\n var path = base.concat([key])\n if(key in a && !(key in b)) {\n unset(acc, path)\n } else {\n diffInternal(a[key],b[key],acc, path)\n }\n }\n } else {\n set(acc, base, b)\n }\n\n // adds a 'set' type to the changeList\n function set(changeList, property, value) {\n changeList.push({\n type:'set',\n path: property,\n val: value\n })\n }\n\n // adds an 'unset' type to the changeList\n function unset(changeList, property) {\n changeList.push({\n type:'unset',\n path: property\n })\n }\n\n // adds an 'rm' type to the changeList\n function rm(changeList, property, index, count, a) {\n var finalIndex = index ? index - count + 1 : 0\n changeList.push({\n type:'rm',\n path: property,\n index: finalIndex,\n num: count,\n vals: a.slice(finalIndex, finalIndex+count)\n })\n }\n\n // adds an 'add' type to the changeList\n function add(changeList, property, index, values) {\n changeList.push({\n type:'add',\n path: property,\n index: index,\n vals: values\n })\n }\n}\n\nmodule.exports.similar = similar\nmodule.exports.equal = equal\n\n\n// finds and returns the closest indexes in a and b that match starting with divergenceIndex\n// note: loops backwards like the rest of this stuff\n// returns the index beyond the first element (aSubMin-1 or bSubMin-1) for each if there is no match\n// parameters:\n // compareFn - determines what matches (returns true if the arguments match)\n // a,b - two arrays to compare\n // divergenceIndexA,divergenceIndexB - the two positions of a and b to start comparing from\n // aSubMin,bSubMin - the two positions to compare until\nfunction findMatchIndexes(compareFn, a,b, divergenceIndexA,divergenceIndexB, aSubMin, bSubMin) {\n var maxNForA = divergenceIndexA-aSubMin\n var maxNForB = divergenceIndexB-bSubMin\n var maxN = Math.max(maxNForA, maxNForB)\n for(var n=1; n<=maxN; n++) {\n var newestA = a[divergenceIndexA-n] // the current item farthest from the divergence index being compared\n var newestB = b[divergenceIndexB-n]\n\n if(n<=maxNForB && n<=maxNForA && compareFn(newestA, newestB)) {\n return {a:divergenceIndexA-n, b:divergenceIndexB-n}\n }\n\n for(var j=0; j= 2 && notEqual > tenPercent || notEqual === a.length) {\n return false\n }\n\n notEqual++\n }\n }\n // else\n return true\n\n } else if(a instanceof Object) {\n if(!(b instanceof Object))\n return false\n\n var keyMap = merge(arrayToMap(Object.keys(a)), arrayToMap(Object.keys(b)))\n var keyLength = Object.keys(keyMap).length\n var tenPercent = keyLength / 10\n var notEqual = 0\n for(var key in keyMap) {\n var aVal = a[key]\n var bVal = b[key]\n\n if(!equal(aVal,bVal)) {\n if(notEqual >= 2 && notEqual > tenPercent || notEqual+1 === keyLength) {\n return false\n }\n\n notEqual++\n }\n }\n // else\n return true\n\n } else {\n return a===b || Number.isNaN(a) && Number.isNaN(b)\n }\n}\n\n// compares arrays and objects for value equality (all elements and members must match)\nfunction equal(a,b) {\n if(a instanceof Array) {\n if(!(b instanceof Array))\n return false\n if(a.length !== b.length) {\n return false\n } else {\n for(var n=0; n {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { ServiceBus } from '@estee/elc-service-bus';\nimport {\n IServiceRegistry,\n IComponentViewController,\n IEcommApp,\n AllServicesTypes\n} from './Service/ServiceUtils';\n\nexport const MOBILE_VERSION_SELECTOR = 'js-mobile-version';\nexport const DESKTOP_VERSION_SELECTOR = 'js-desktop-version';\n\nexport interface ISingleServiceInfo {\n [key: string]: string;\n}\n\nexport interface IServiceInfo {\n [name: string]: ISingleServiceInfo;\n}\n\nexport type ArrayMinOne = {\n 0: T;\n} & T[];\n\ninterface IObjectOfStrings {\n [key: string]: string;\n}\n\ninterface IServiceBusTopics {\n commands: IObjectOfStrings;\n events: IObjectOfStrings;\n queries: IObjectOfStrings;\n}\n\nexport interface IPayload {\n url: string;\n body?: {};\n options?: {};\n headers?: {};\n}\n\nexport interface IGetPayload {\n url: string;\n options?: {};\n headers?: {};\n params?: {};\n}\n\nexport interface IRequestOptions {\n debounceInterval?: number;\n}\n\nexport type HeaderType = 'Business-Unit' | 'Authorization' | 'AuthorizationToken' | 'ClientId';\nexport type HeaderObject = { [key in HeaderType]?: string };\nexport type IHeaderSetter = () => Promise;\nexport type IRequestTransformerConfig = { url: string } & RequestInit;\nexport type IRequestTransformer = (config: IRequestTransformerConfig) => Promise;\n\nexport interface IHttpTransport {\n getStaticGlobalHeaders(): HeaderObject;\n setBaseUrl(baseUrl: string): void;\n addGlobalHeaders(headers: HeaderObject): void;\n removeGlobalHeader(headerName: string): void;\n addGlobalHeaderSetter(setter: IHeaderSetter): void;\n removeGlobalHeaderSetter(setter: IHeaderSetter): void;\n addRequestTransformer(transformer: IRequestTransformer): void;\n removeRequestTransformer(transformer: IRequestTransformer): void;\n delete(payload: string | IPayload): Promise;\n post(payload: IPayload): Promise;\n patch(payload: IPayload): Promise;\n put(payload: IPayload): Promise;\n get(payload: string | IGetPayload, IRequestOptions?: IRequestOptions): Promise;\n readonly isAuthFailureHandlingEnabled: boolean;\n setAuthFailureHandlingEnabled(enabled: boolean): void;\n}\n\nexport interface IUtagData {\n [key: string]: string | string[] | undefined | boolean | number | null | number[];\n}\nexport interface IUtagCfgOvrd {\n noview: boolean;\n dom_complete?: boolean;\n lowerqp?: boolean;\n noload?: boolean | number;\n nocookie?: boolean;\n readywait?: boolean | number;\n waittimer?: number;\n}\nexport interface IUtag {\n link(data: IUtagData, cb?: Function): void;\n view(data: IUtagData, cb?: Function): void;\n}\n\nexport interface IFrontendLogger {\n isEnabled?: boolean;\n loggedServices?: {\n [key: string]: {\n isEnabled?: boolean;\n };\n };\n}\n\ninterface IDrupalSite {\n translations?: any;\n trackingDataLayer?: any;\n client?: {\n subdomain?: string;\n isMobile?: number;\n };\n frontendLogger?: IFrontendLogger;\n}\nexport type AnyObject = { [key: string]: any };\ntype ITranslationsCollection = { [key: string]: string | IObjectOfStrings };\ntype ViewDataPreloader = {\n addConfigs(configs: AnyObject): void;\n addTranslations(translations: ITranslationsCollection): void;\n getPreloadedConfigs(arg: string[]): AnyObject | null;\n getPreloadedTranslations(arg: string[]): ITranslationsCollection | null;\n preload(): Promise;\n registerTranslationFieldsToPreload(fields?: string[]): void;\n registerConfigFieldsToPreload(fields?: string[]): void;\n};\ninterface IComponentRenderer {\n init(): Promise;\n getDataPreloader(): ViewDataPreloader | null;\n setDataPreloader(arg: ViewDataPreloader): void;\n}\n\ntype IObjectLike = { [key: string]: any } | null;\nexport interface IViewManager {\n loadComponent(): Promise;\n module: React.ComponentType | null;\n controllerFromView: IComponentViewController | null;\n}\nexport interface IViewsManager {\n lazyServicesStarted: boolean;\n getViewManager(viewName: string): IViewManager;\n startService(service: AllServicesTypes): Promise;\n startLazyServices(): Promise;\n}\n\ntype ObjectWithNumbers = { [key: string]: number };\n\nexport interface ImPulse {\n sendMetric(name: string, value: number): void;\n sendMetrics(metrics: ObjectWithNumbers): void;\n sendTimer(name: string, value: number): void;\n sendTimers(metrics: ObjectWithNumbers): void;\n}\n\ndeclare global {\n // Augment Node.js `global`\n namespace NodeJS {\n interface Global {\n ServiceBusTopics: IServiceBusTopics;\n ServiceRegistry: IServiceRegistry;\n GlobalServiceBus: ServiceBus;\n HttpTransport: IHttpTransport;\n __translationsCache__: { [key: string]: string };\n __configsCache__: { [key: string]: any };\n getPreloadedConfigs(fields?: string[]): IObjectLike;\n addConfigs(configs: object): void;\n getPreloadedTranslations(fields?: string[]): IObjectLike;\n addTranslations(translations: object): void;\n replaceSrc(originalSrc: string): string;\n utag_data: IUtagData;\n utag_cfg_ovrd: IUtagCfgOvrd;\n utag: IUtag;\n site?: IDrupalSite;\n location: Location;\n navigator: Navigator;\n ComponentRenderer: IComponentRenderer;\n ViewsManager: IViewsManager;\n registerTranslationFieldsToPreload: Function;\n registerConfigFieldsToPreload: Function;\n serviceInfo: IServiceInfo;\n getServiceVersions(): void;\n __ssr: boolean;\n __SENTRY__: IObjectLike;\n Sentry: IObjectLike;\n onerror(\n message: string,\n url: string,\n line: number,\n column: number,\n error: Error\n ): boolean;\n env: string;\n buid: string;\n requestIdleCallback: Function;\n cancelIdleCallback: Function;\n }\n }\n\n // Augment Browser `window`\n interface Window {\n EcommApp?: IEcommApp;\n ServiceBusTopics: IServiceBusTopics;\n __translationsCache__: { [key: string]: string };\n __configsCache__: { [key: string]: any };\n getPreloadedConfigs(fields?: string[]): IObjectLike;\n addConfigs(configs: object): void;\n getPreloadedTranslations(fields?: string[]): IObjectLike;\n addTranslations(translations: object): void;\n ServiceRegistry: IServiceRegistry;\n GlobalServiceBus: ServiceBus;\n HttpTransport: IHttpTransport;\n replaceSrc(originalSrc: string): string;\n utag_data: any;\n utag_cfg_ovrd: IUtagCfgOvrd;\n utag: IUtag;\n location: Location;\n site?: IDrupalSite;\n addEventListener(a: string, b: Function): void;\n ComponentRenderer: IComponentRenderer;\n ViewsManager: IViewsManager;\n registerTranslationFieldsToPreload: Function;\n registerConfigFieldsToPreload: Function;\n getServiceVersions(): void;\n __ssr: boolean;\n onerror(message: string, url: string, line: number, column: number, error: Error): boolean;\n env: string;\n buid: string;\n serviceInfo: IServiceInfo;\n __SENTRY__: IObjectLike;\n Sentry: IObjectLike;\n requestIdleCallback: Function;\n cancelIdleCallback: Function;\n mPulse: ImPulse;\n }\n\n // Augment Web Worker `self`\n interface WorkerGlobalScope {\n ServiceBusTopics: IServiceBusTopics;\n ServiceRegistry: IServiceRegistry;\n GlobalServiceBus: ServiceBus;\n HttpTransport: IHttpTransport;\n __translationsCache__: { [key: string]: string };\n __configsCache__: { [key: string]: any };\n getPreloadedConfigs(fields?: string[]): IObjectLike;\n addConfigs(configs: object): void;\n getPreloadedTranslations(fields?: string[]): IObjectLike;\n addTranslations(translations: object): void;\n replaceSrc(originalSrc: string): string;\n utag_data: IUtagData;\n utag_cfg_ovrd: IUtagCfgOvrd;\n __SENTRY__: IObjectLike;\n Sentry: IObjectLike;\n utag: IUtag;\n location: Location;\n addEventListener(a: string, b: Function): void;\n ComponentRenderer: IComponentRenderer;\n ViewsManager: IViewsManager;\n registerTranslationFieldsToPreload: Function;\n registerConfigFieldsToPreload: Function;\n }\n}\n\nexport const isWebRendered = typeof self === 'object' && self.self === self;\n\nexport const root: NodeJS.Global | Window = typeof window === 'undefined' ? global : window;\n\nexport const setupServiceInfo = (serviceInfo: ISingleServiceInfo) => {\n const { name, ...rest } = serviceInfo;\n\n root.serviceInfo = root.serviceInfo || {};\n root.serviceInfo[name] = rest;\n};\n\nexport enum ISandboxEnvironment {\n LIVE = 'live',\n FEATURE = 'feature',\n DEV = 'dev',\n STAGE = 'stage',\n CMS = 'cms',\n PERSONAL = 'personal',\n PRODUCTION = 'production'\n}\n\nexport const getSandboxEnvironment: () => string = () => {\n let urlParts = root.location.hostname.split('.');\n const { LIVE, FEATURE, DEV, STAGE, CMS, PERSONAL } = ISandboxEnvironment;\n\n urlParts = urlParts.filter(part => !['www', 'm'].includes(part));\n const isLive = !(urlParts[0] === 'c') && !(urlParts[0] === 'e');\n\n return isLive\n ? LIVE\n : urlParts.includes(FEATURE)\n ? FEATURE\n : urlParts.includes(DEV)\n ? DEV\n : urlParts.includes(STAGE)\n ? STAGE\n : urlParts.includes(CMS)\n ? CMS\n : PERSONAL;\n};\n","export type storageKeyType = 'localStorage' | 'sessionStorage';\nexport namespace BrowserStorage {\n export function eraseCookie(name: string) {\n document.cookie = `${name}=; Max-Age=-99999999;`;\n }\n\n export function setCookie(name: string, value: string, daysOrDate: number | Date) {\n let expires = '';\n if (daysOrDate) {\n const expirationDate =\n typeof daysOrDate === 'number'\n ? new Date(Date.now() + daysOrDate * 24 * 60 * 60 * 1000)\n : daysOrDate;\n expires = `; expires=${expirationDate.toUTCString()}`;\n }\n document.cookie = `${name}=${value || ''}${expires};path=/`;\n }\n\n export function getCookie(name: string) {\n const nameEQ = `${name}=`;\n const ca = document.cookie.split(';');\n // eslint-disable-next-line @typescript-eslint/prefer-for-of\n for (let i = 0; i < ca.length; i++) {\n let c = ca[i];\n while (c.charAt(0) === ' ') {\n c = c.substring(1, c.length);\n }\n if (c.indexOf(nameEQ) === 0) {\n return c.substring(nameEQ.length, c.length);\n }\n }\n\n return null;\n }\n\n export function getItem(key: string, storageKey: storageKeyType = 'localStorage') {\n try {\n if (window[storageKey].getItem(key) !== null) {\n return window[storageKey].getItem(key);\n }\n } catch (e) {\n console.error(e);\n\n return getCookie(key);\n }\n }\n\n export function setItem(\n key: string,\n value: string,\n storageKey: storageKeyType = 'localStorage'\n ) {\n try {\n window[storageKey].setItem(key, value);\n } catch (e) {\n console.error(e);\n setCookie(key, value, 20);\n }\n }\n\n export function removeItem(key: string, storageKey: storageKeyType = 'localStorage') {\n try {\n window[storageKey].removeItem(key);\n } catch (e) {\n console.error(e);\n eraseCookie(key);\n }\n }\n\n export function storagePolling(key: string, callBack: Function) {\n let storageValue = getItem(key);\n\n const checkForKeyChange = () => {\n const latestValue = getItem(key);\n\n if (storageValue !== latestValue) {\n storageValue = latestValue;\n callBack(latestValue);\n }\n };\n\n return setInterval(checkForKeyChange, 2000);\n }\n}\n","import { root, ISingleServiceInfo } from '../UniversalUtils';\n\nconst extractServiceVersion = (serviceInfo: ISingleServiceInfo) =>\n serviceInfo && serviceInfo.version;\n\nconst searchForServiceInfo = (serviceName: string) => {\n root.serviceInfo = root.serviceInfo || {};\n root.ServiceRegistry = root.ServiceRegistry || {};\n\n return root.serviceInfo[serviceName] || root.ServiceRegistry[serviceName];\n};\n\nexport const getServiceVersion = (serviceName: string, fallback: string = '') =>\n extractServiceVersion(searchForServiceInfo(serviceName)) || fallback;\n","import { ELCLogger, TriggerType } from '@estee/elc-logging';\nexport class PerformanceMarker {\n private readonly logger: ELCLogger;\n private readonly serviceViewName: string;\n\n constructor(logger: ELCLogger, name: string) {\n this.logger = logger;\n this.serviceViewName = name;\n }\n\n startMark = (name: string) => {\n try {\n performance.mark(`${this.serviceViewName}_${name}`);\n } catch (error) {\n this.logger.error({\n message: `[${this.serviceViewName}]: ${error}`,\n triggerType: TriggerType.other,\n payload: {\n error\n }\n });\n }\n };\n\n endMark = (name: string) => {\n try {\n if (performance.getEntriesByName(name)) {\n const markName = `${this.serviceViewName}_${name}`;\n const markNameEnd = `${markName}_end`;\n\n performance.mark(markNameEnd);\n\n const measurement = performance.measure(\n `${this.serviceViewName}_measure_${name}`,\n markName,\n markNameEnd\n ) as unknown as PerformanceMeasure;\n this.logger.info({\n triggerType: TriggerType.other,\n message: `Performance measure between (${markName}) and (${markNameEnd})`,\n payload: {\n context: measurement.toJSON(),\n serviceName: this.serviceViewName\n }\n });\n this.clearMark(markName);\n\n return measurement;\n }\n } catch (error) {\n this.logger.error({\n message: `[${this.serviceViewName}]: ${error}`,\n triggerType: TriggerType.other,\n payload: {\n error\n }\n });\n }\n };\n\n // Chrome has a limit of markers that it can support at the same time\n // In order to limit the amount of markers we'll clean everything except the measure one after we take the measurements\n clearMark = (name: string) => {\n performance.clearMarks(name);\n performance.clearMarks(`${name}_end`);\n };\n}\n","import * as React from 'react';\nimport { ELCLogger, TriggerType } from '@estee/elc-logging';\nimport { root, getServiceVersion } from '@estee/elc-universal-utils';\n\ninterface IProps {\n children: JSX.Element | null;\n serviceName: string;\n name: string;\n}\n\ninterface IState {\n error?: Error;\n}\n\nexport class ErrorBoundary extends React.Component {\n private logger: ELCLogger;\n\n constructor(props: IProps) {\n super(props);\n this.state = { error: undefined };\n this.logger = new ELCLogger({\n serviceName: props.serviceName,\n buid: root.buid || '',\n environment: root.env || '',\n serviceVersion: getServiceVersion(props.serviceName) || ''\n });\n }\n\n static getDerivedStateFromError(error?: Error) {\n return { error };\n }\n\n public componentDidCatch(error?: Error) {\n this.logger.error({\n triggerType: TriggerType.render,\n message: `Error caught in external view ${this.props.name}`,\n payload: {\n error: error,\n context: { serviceRegistry: root.ServiceRegistry }\n }\n });\n }\n\n public render() {\n return this.state.error ? null : this.props.children;\n }\n}\n","import { ELCLogger, TriggerType } from '@estee/elc-logging';\n\nexport enum RenderStrategies {\n default = 'default',\n ondemand = 'ondemand'\n}\n\nexport type OnDemandRenderOffset = { onDemandRenderOffset?: number };\nexport type RenderStrategiesTypes = keyof typeof RenderStrategies;\n\nenum ObservedValues {\n parent = 'parent',\n node = 'node',\n none = 'none'\n}\n\ninterface CheckVisibilityOptions {\n checkOpacity?: boolean;\n checkVisibilityCSS?: boolean;\n}\ninterface WithVisibilityElement extends Element {\n checkVisibility(options: CheckVisibilityOptions): boolean;\n}\n\ntype PendingNodes = {\n parent: HTMLElement;\n node: HTMLElement;\n isObserved: ObservedValues;\n};\n\nexport abstract class LazyRenderer {\n protected abstract getNodeAttribute(node: HTMLElement, name: string): string | null;\n protected abstract isServiceViewNode(element: HTMLElement): boolean;\n protected abstract getServiceViewsFromNode(node: HTMLElement): NodeListOf;\n protected abstract readonly logger: ELCLogger;\n protected renderMethodAttribute = 'data-render-method';\n\n private intersectionObserver: IntersectionObserver;\n private viewHeight: number;\n private ALLOWED_PIXELS = 200;\n private pendingNodes: Set = new Set([]);\n\n private updateViewHeight = () => {\n this.viewHeight = Math.max(document.documentElement.clientHeight, window.innerHeight);\n };\n\n private isInViewport = (node: Element, customMargin = this.ALLOWED_PIXELS): boolean => {\n const { bottom, top } = node.getBoundingClientRect();\n if (!this.viewHeight) {\n this.updateViewHeight();\n }\n\n if (bottom === top && top === 0) {\n let _node = node as WithVisibilityElement;\n let previousNode = node;\n let isNodeVisible = false;\n\n do {\n previousNode = _node;\n _node = _node.parentElement as unknown as WithVisibilityElement;\n\n isNodeVisible = _node.checkVisibility({\n checkOpacity: true,\n checkVisibilityCSS: true\n });\n // eslint-disable-next-line no-empty, @typescript-eslint/semi\n } while (!isNodeVisible) {}\n\n if (\n previousNode.className.includes('tabbed-block__content-item')\n &&\n previousNode.getAttribute('aria-hidden') === 'true'\n ) {\n previousNode.setAttribute('aria-hidden', 'false');\n const rect = node.getBoundingClientRect();\n if (rect.bottom === rect.top && rect.top === 0) {\n // wasn't able to fix the height of the component,\n // by default we must render it to avoid bugs\n return true;\n }\n\n return this.isInViewport(node, customMargin);\n }\n }\n // To load before get's into screen (scrolling down)\n const isBottomLessThanViewport = bottom < this.viewHeight + customMargin;\n // Check if its on viewport or close to it\n const isBottomInViewport = bottom > -customMargin;\n\n const isBottomVisible = isBottomLessThanViewport && isBottomInViewport;\n\n // In case it is scrolling up to start rendering\n const isTopVisible = top + customMargin > 0 && top < this.viewHeight;\n\n // In case node is higher than viewport\n const isHigherThanViewHeight = bottom < 0 && top > this.viewHeight;\n\n return isBottomVisible || isTopVisible || isHigherThanViewHeight;\n };\n\n private getRenderMethodStrategy = (node: HTMLElement) =>\n this.getNodeAttribute(node, this.renderMethodAttribute) ||\n RenderStrategies.default;\n\n private getRenderConfig = (node: HTMLElement) =>\n this.getNodeAttribute(node, 'data-render-config') || '{}';\n\n private isNodeInViewport = ({\n node,\n addToPendingNode,\n parentNode\n }: {\n node: HTMLElement,\n addToPendingNode: boolean,\n parentNode?: HTMLElement\n }): boolean => {\n const parent = parentNode || node.parentNode as HTMLElement;\n\n try {\n const config = this.getRenderConfig(node);\n const { onDemandRenderOffset }: { onDemandRenderOffset?: number } = JSON.parse(config);\n\n if (!parent ||\n (\n !this.isInViewport(node, onDemandRenderOffset) &&\n !this.isInViewport(parent, onDemandRenderOffset)\n )\n ) {\n addToPendingNode && this.pendingNodes.add({\n node, parent, isObserved: ObservedValues.none\n });\n\n return false;\n }\n\n return true;\n } catch (error) {\n this.logger.error({\n message: error.message,\n triggerType: TriggerType.render,\n payload: error\n });\n\n return true;\n }\n };\n\n private isNodeSkeleton = (node: Element): boolean =>\n [...(node.classList || [])].some((className) => className.includes('skeleton'));\n\n private hasSkeletonsAsSiblings = (node: Element, checkNextSibling: boolean): boolean => {\n let currentNode = checkNextSibling ? node.nextElementSibling : node.previousElementSibling;\n let isSkeleton = false;\n\n while (currentNode) {\n isSkeleton = this.isNodeSkeleton(currentNode as Element);\n currentNode = checkNextSibling ?\n currentNode.nextElementSibling :\n currentNode.previousElementSibling;\n }\n\n return isSkeleton;\n };\n\n private hasOnlySkeletons = (node: Element): boolean => {\n const hasNextSibling = Boolean(node.nextSibling);\n const hasPreviousSibling = Boolean(node.previousSibling);\n\n if (hasNextSibling || hasPreviousSibling) {\n const isNextSiblingSkeletonOnly = this.hasSkeletonsAsSiblings(node, true);\n\n if (hasPreviousSibling && (isNextSiblingSkeletonOnly || hasNextSibling)) {\n const isPreviousSiblingSkeletonOnly = this.hasSkeletonsAsSiblings(node, false);\n\n return isPreviousSiblingSkeletonOnly;\n }\n\n return isNextSiblingSkeletonOnly;\n }\n\n return false;\n };\n\n public shouldRenderNode = (node: HTMLElement): boolean => {\n const renderStrategy: RenderStrategiesTypes = this.getRenderMethodStrategy(node);\n\n if (renderStrategy === RenderStrategies.ondemand) {\n return this.isNodeInViewport({ node, addToPendingNode: true });\n }\n\n return true;\n };\n\n public initLazyRenderer = (onNodeDisplay: (node: Element) => void) => {\n const options = {\n root: null,\n rootMargin: '0px',\n threshold: 0\n };\n\n const intersectionCallback = ([entry]: IntersectionObserverEntry[]) => {\n const target = entry.target as HTMLElement;\n\n const isServiceView = this.isServiceViewNode(target);\n const serviceViewNode = isServiceView\n ? target\n : this.getServiceViewsFromNode(target)[0];\n const parentNode = (isServiceView ? target.parentNode : target) as HTMLElement;\n\n try {\n if (\n entry.isIntersecting ||\n (serviceViewNode && this.isNodeInViewport({\n node: serviceViewNode,\n addToPendingNode: false,\n parentNode\n }))\n ) {\n this.pendingNodes.forEach((nodes, _, set) => {\n if (target.isSameNode(nodes.parent) || target.isSameNode(nodes.node)) {\n set.delete(nodes);\n }\n });\n\n this.intersectionObserver.unobserve(target);\n // No more nodes to observe\n if (this.pendingNodes.size === 0) {\n this.intersectionObserver.disconnect();\n // Setting the property as an optional `null` in the interface would add more checks and that could end up in a bug\n // @ts-ignore\n this.intersectionObserver = null;\n }\n onNodeDisplay(serviceViewNode);\n }\n } catch (error) {\n this.logger.error({\n message: error.message,\n triggerType: TriggerType.render,\n payload: error\n });\n }\n };\n\n this.intersectionObserver = new IntersectionObserver(intersectionCallback, options);\n this.pendingNodes.forEach((pendingNode) => {\n const { node, parent } = pendingNode;\n\n if (node.getBoundingClientRect().height === 0) {\n (node as HTMLElement).style.minHeight = '1px';\n }\n\n const hasSkeletons = this.hasOnlySkeletons(node);\n\n pendingNode.isObserved = hasSkeletons ? ObservedValues.parent : ObservedValues.node;\n\n this.intersectionObserver.observe(hasSkeletons ? parent : node);\n });\n };\n}\n","import * as React from 'react';\nimport {\n AnyObject,\n IComponentViewController,\n IViewManager,\n root\n} from '@estee/elc-universal-utils';\nimport { ELCLogger } from '@estee/elc-logging';\nimport { ErrorBoundary } from '@estee/elc-telemetry';\nimport { ViewDataPreloader, IConfigsCollection } from '../preloader/ViewDataPreloader';\nimport { LazyRenderer } from './LazyRenderer';\n\nexport type ComponentNodeType = {\n name: string;\n config: string | null;\n component: React.ReactElement | null;\n node: HTMLElement;\n};\n\ninterface IComponentPropsFunctions {\n [key: string]: Function | object | null;\n}\n\ninterface IComponentProps extends IComponentPropsFunctions {\n config: object;\n viewController: IComponentViewController | null;\n parentMountPointNode: Element;\n}\n\nconst { name: serviceName, version } = __serviceInfo__;\n\nexport abstract class ComponentRenderer extends LazyRenderer {\n private preloader: ViewDataPreloader | null = null;\n\n protected readonly logger: ELCLogger = new ELCLogger({\n serviceName,\n serviceVersion: version,\n environment: root.env,\n buid: root.buid\n });\n\n private handleEventsFromProps = (node: HTMLElement, parsedConfig: AnyObject) =>\n Object.keys(parsedConfig)\n .filter((configKey) => parsedConfig[configKey] === '__event__')\n .reduce((eventHandlers, configKey) => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const eventHandler = function (...args: any[]) {\n const event = new CustomEvent(configKey, {\n detail: args,\n cancelable: true,\n bubbles: false\n });\n node.dispatchEvent(event);\n };\n\n return { ...eventHandlers, [configKey]: eventHandler };\n }, {});\n\n private getConfig = async (component: ComponentNodeType) => {\n let configs: IConfigsCollection | null = null;\n // Don't overload components for non exported views otherwise will crash\n if (this.getNodeAttribute(component.node, 'data-version')) {\n if (this.preloader) {\n await this.preloader.preload();\n configs = this.preloader.getPreloadedConfigs();\n }\n }\n\n return { configs };\n };\n\n private getElementProps = async (\n component: ComponentNodeType,\n viewManager: IViewManager\n ): Promise => {\n const parsedConfig = component.config ? JSON.parse(component.config) : {};\n\n const viewController = viewManager.controllerFromView;\n\n const { configs } = await this.getConfig(component);\n const fnProps = this.handleEventsFromProps(component.node, parsedConfig);\n\n return {\n ...fnProps,\n config: { ...configs, ...parsedConfig },\n parentMountPointNode: component.node.parentNode as Element,\n viewController\n };\n };\n\n private getElementToRender = (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n registeredComponent: React.ComponentType,\n props: IComponentProps,\n viewName: string\n ) => React.createElement(ErrorBoundary, {\n serviceName,\n name: viewName,\n children: React.createElement(registeredComponent, props)\n });\n\n protected getComponentForNode = async (node: ComponentNodeType) => {\n const nodeObject = { ...node };\n\n const viewManager = root.ViewsManager.getViewManager(node.name);\n await viewManager.loadComponent();\n const module = viewManager.module;\n if (module) {\n const props = await this.getElementProps(nodeObject, viewManager);\n nodeObject.component = this.getElementToRender(module, props, nodeObject.name);\n }\n\n return Promise.resolve(nodeObject);\n };\n\n protected convertNodeToComponentNodeType = (node: HTMLElement) => ({\n component: null,\n config: this.getNodeAttribute(node, 'data-config'),\n name: this.getNodeAttribute(node, 'data-component') || '',\n node\n });\n\n public setDataPreloader = (preloader: ViewDataPreloader) => {\n this.preloader = preloader;\n };\n\n public getDataPreloader = () => this.preloader;\n}\n","import * as React from 'react';\nimport * as ReactDOM from 'react-dom';\nimport { emit, events } from '@estee/elc-service-bus';\nimport { TriggerType } from '@estee/elc-logging';\nimport { ComponentRenderer, ComponentNodeType } from './renderers/ComponentRenderer';\nimport { RenderStrategies } from './renderers/LazyRenderer';\nimport { PerformanceMarker } from '@estee/elc-telemetry';\nimport { root } from '@estee/elc-universal-utils';\n\nconst COMPONENT_ATTRIBUTE = 'data-component';\nconst COMPONENT_SELECTOR = `[${COMPONENT_ATTRIBUTE}]`;\n\nconst { name: serviceName } = __serviceInfo__;\n\ntype PrimitiveTypes = number | boolean | object | null | string;\ninterface IComponentLoaded {\n shouldRender: boolean;\n config: PrimitiveTypes | PrimitiveTypes[];\n}\n\ninterface IComponentsLoaded {\n [key: string]: IComponentLoaded[];\n}\n\ninterface IRenderParams {\n component: React.ReactElement;\n node: HTMLElement;\n name: string;\n}\n\nfunction isNodeProductFull(node: HTMLElement) {\n return node.getAttribute(COMPONENT_ATTRIBUTE) === 'product-full';\n}\nfunction isNodeProductGrid(node: HTMLElement) {\n return node.getAttribute(COMPONENT_ATTRIBUTE) === 'product-grid';\n}\n\nconst MAIN_VIEW_ATTRIBUTE = 'data-main-view';\n\nexport class BrowserComponentRenderer extends ComponentRenderer {\n private nodesToRenderList: Set = new Set([]);\n private isRenderReadyPromise: Promise;\n private renderedNodes: string[] = [];\n protected readonly performanceMarker = new PerformanceMarker(this.logger, serviceName);\n\n public isRenderReady = () => this.isRenderReadyPromise;\n\n protected getNodeAttribute = (node: HTMLElement, name: string) => node.getAttribute(name);\n\n protected isServiceViewNode = (element: HTMLElement): boolean =>\n element.matches(COMPONENT_SELECTOR);\n\n protected getServiceViewsFromNode = (node: HTMLElement) =>\n node.querySelectorAll(COMPONENT_SELECTOR) as NodeListOf;\n\n private isElement = (node: Node) => node.nodeType === Node.ELEMENT_NODE;\n\n private addNodeToRenderList = (nodes: Set, nodeToAdd: HTMLElement) => {\n if (!this.nodesToRenderList.has(nodeToAdd)) {\n nodes.add(nodeToAdd);\n this.nodesToRenderList.add(nodeToAdd);\n }\n };\n\n private removeNodeFromRenderList = (nodeToRemove: HTMLElement) => {\n if (this.nodesToRenderList.has(nodeToRemove)) {\n this.nodesToRenderList.delete(nodeToRemove);\n }\n };\n\n private processMutationRecord = (nodes: Set, record: MutationRecord) => {\n record.addedNodes.forEach((node: HTMLElement) => {\n if (this.isElement(node)) {\n const serviceViews = this.isServiceViewNode(node)\n ? [node]\n : this.getServiceViewsFromNode(node);\n\n serviceViews.forEach((view: HTMLElement) => this.addNodeToRenderList(nodes, view));\n }\n });\n\n // If a ServiceView is removed from DOM we need to remove also the reference to it\n record.removedNodes.forEach(this.removeNodeFromRenderList);\n\n return nodes;\n };\n\n private onHTMLChanged = async (records: MutationRecord[]) => {\n const addedNodes = records.reduce(this.processMutationRecord, new Set());\n\n await this.renderReactNodes([...addedNodes]);\n };\n\n private createMutationObserver = (callback: MutationCallback) => {\n if (typeof MutationObserver !== 'undefined') {\n return new MutationObserver(callback);\n }\n\n return null;\n };\n\n private watchRenderOutput() {\n const mutationObserverComponent = this.createMutationObserver(this.onHTMLChanged);\n if (mutationObserverComponent) {\n mutationObserverComponent.observe(document.body, {\n subtree: true,\n childList: true\n });\n }\n }\n\n private onReactNodeChange = (\n node: HTMLElement,\n markerName: string\n ) => (records: MutationRecord[], observer: MutationObserver) => {\n records.some((record: MutationRecord) => {\n if (record.addedNodes.length > 0) {\n const perfMeasure = this.performanceMarker.endMark(markerName);\n observer?.disconnect();\n\n try {\n if (node.getAttribute(MAIN_VIEW_ATTRIBUTE)) {\n const timerName = isNodeProductFull(node)\n ? 'Full'\n : 'Grid';\n (root as Window).mPulse.sendTimers({\n [`PROD${timerName}Load`]: performance.now(),\n [`PROD${timerName}Render`]: perfMeasure?.duration || 0\n });\n }\n } catch (error) {\n this.logger.error({\n triggerType: TriggerType.other,\n message: error.message,\n payload: {\n error\n }\n });\n }\n\n return true;\n }\n\n return false;\n });\n };\n\n private render = ({ component, node, name }: IRenderParams) => {\n const counterSameView = this.renderedNodes.filter((_name) => _name === name).length;\n\n this.renderedNodes.push(name);\n\n const renderMark = `view_${name}`.concat(counterSameView ? `_${counterSameView}` : '');\n const firstRenderMark = `first_view_${name}`.concat(\n counterSameView ? `_${counterSameView}` : ''\n );\n\n this.performanceMarker.startMark(renderMark);\n this.performanceMarker.startMark(firstRenderMark);\n\n return new Promise((resolve, reject) => {\n try {\n ReactDOM.render(component, node, () => {\n this.performanceMarker.endMark(firstRenderMark);\n const mutationObserver = this.createMutationObserver(\n this.onReactNodeChange(node, renderMark)\n );\n if (mutationObserver) {\n mutationObserver.observe(node, {\n childList: true\n });\n }\n resolve();\n });\n } catch (error) {\n this.logger.error({\n message: `Failed to render view ${name}`,\n triggerType: TriggerType.render,\n payload: {\n error\n }\n });\n this.performanceMarker.endMark(renderMark);\n reject(node);\n }\n });\n };\n\n private renderNode = async (node: HTMLElement) => {\n try {\n const componentNode = this.convertNodeToComponentNodeType(node);\n const nodeToRender: ComponentNodeType = await this.getComponentForNode(componentNode);\n\n if (nodeToRender.component) {\n const { component, name } = nodeToRender;\n\n const renderPromise = this.render({\n component,\n node: nodeToRender.node,\n name\n });\n\n return renderPromise;\n }\n } catch (error) {\n this.logger.error({\n triggerType: TriggerType.render,\n message: `Error trying to render node: ${node?.getAttribute(COMPONENT_ATTRIBUTE)}`,\n payload: {\n error\n }\n });\n }\n\n return Promise.resolve(node);\n };\n\n private renderReactNodes = async (nodes: Element[]) => {\n const renderedNodes = (await Promise.all(\n nodes.map(this.renderNode)\n )) as (null | HTMLElement)[];\n\n const pendingNodes = renderedNodes.filter(Boolean) as Element[];\n\n if (pendingNodes.length > 0) {\n this.setTimeoutRenderingNodes(pendingNodes);\n }\n\n return Promise.resolve();\n };\n\n private setTimeoutRenderingNodes = async (nodes: Element[]) => {\n setTimeout(async () => {\n await this.renderReactNodes(nodes);\n }, 250);\n };\n\n private renderLazyNode = (node: HTMLElement) => {\n if (!this.nodesToRenderList.has(node)) {\n this.nodesToRenderList.add(node);\n this.renderReactNodes([node]);\n }\n };\n\n private setMainViews = (nodes: HTMLElement[]) => {\n const productFullNode = nodes.find(isNodeProductFull);\n const firstProductGridNode = nodes.find(isNodeProductGrid);\n\n if (productFullNode || firstProductGridNode) {\n nodes.forEach(node => {\n node.setAttribute(this.renderMethodAttribute, RenderStrategies.ondemand);\n });\n // If SPP page then render first the product-full\n if (productFullNode) {\n productFullNode.setAttribute(this.renderMethodAttribute, RenderStrategies.default);\n productFullNode.setAttribute(MAIN_VIEW_ATTRIBUTE, 'true');\n // If MPP page then render first the product-grid\n } else if (firstProductGridNode) {\n firstProductGridNode.setAttribute(\n this.renderMethodAttribute, RenderStrategies.default\n );\n firstProductGridNode.setAttribute(MAIN_VIEW_ATTRIBUTE, 'true');\n }\n }\n };\n\n private processMountPoints = async () => {\n const allNodes: HTMLElement[] = Array.from(document.querySelectorAll(COMPONENT_SELECTOR));\n this.setMainViews(allNodes);\n\n const toRenderNodes = allNodes.filter(this.shouldRenderNode).sort(\n (viewA, viewB) =>\n viewA.getAttribute(MAIN_VIEW_ATTRIBUTE) ? -1 : 1\n );\n this.nodesToRenderList = new Set(toRenderNodes);\n\n await this.renderReactNodes(toRenderNodes);\n\n if (toRenderNodes.length < allNodes.length) {\n this.initLazyRenderer(this.renderLazyNode);\n }\n\n this.announceMountPoints([...allNodes]);\n };\n\n private announceMountPoints = (nodes: HTMLElement[]) => {\n const loadedComponents = nodes.reduce(\n (components: IComponentsLoaded, node: HTMLElement) => {\n try {\n const { component, config } = node.dataset;\n\n if (component) {\n components[component] = components[component] || [];\n\n components[component].push({\n shouldRender: this.nodesToRenderList.has(node),\n config: JSON.parse(config || '{}')\n });\n }\n } catch (error) {\n this.logger.error({\n triggerType: TriggerType.render,\n message: 'Failed parsing config',\n payload: {\n error\n }\n });\n }\n\n return components;\n },\n {} as IComponentsLoaded\n );\n\n emit(events.COMPONENTS_LOADED, loadedComponents);\n };\n\n private onDOMContentLoaded = () => {\n this.isRenderReadyPromise = this.processMountPoints();\n this.watchRenderOutput();\n };\n\n public init = async () => {\n const initMark = 'init_component_renderer';\n this.performanceMarker.startMark(initMark);\n const isDocumentReady = ['complete', 'interactive'].includes(document.readyState);\n\n if (isDocumentReady) {\n this.performanceMarker.endMark(initMark);\n this.onDOMContentLoaded();\n } else {\n await new Promise((resolve) =>\n document.addEventListener('DOMContentLoaded', () => {\n this.performanceMarker.endMark(initMark);\n this.onDOMContentLoaded();\n resolve();\n })\n );\n }\n\n await this.isRenderReady();\n };\n}\n","import { root } from '@estee/elc-universal-utils';\nimport { debounceAsync } from '../utils/Debounce';\n\nexport interface ITranslationsCollection {\n [key: string]: string;\n}\n\nexport interface IConfigsCollection {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [key: string]: any;\n}\n\nexport class ViewDataPreloader {\n private translationsCache: ITranslationsCollection = {};\n private translationsFieldsToPreload: string[] = [];\n\n private configsCache: IConfigsCollection = {};\n private configFieldsToPreload: string[] = [];\n\n private getKeysFromObject(keys: string[], obj: IConfigsCollection | ITranslationsCollection) {\n const requestedObject: IConfigsCollection | ITranslationsCollection = {};\n\n const isKeyMissing: boolean = keys.some((key) => {\n const hasKeyInCache: boolean = obj.hasOwnProperty(key);\n if (hasKeyInCache) {\n requestedObject[key] = obj[key];\n }\n\n return !hasKeyInCache;\n });\n\n return !isKeyMissing ? requestedObject : null;\n }\n\n public getPreloadedConfigs = (fields: string[] = []) => {\n if (fields.length === 0) {\n return this.configsCache;\n }\n\n return this.getKeysFromObject(fields, this.configsCache);\n };\n\n public getPreloadedTranslations = (fields: string[] = []) => {\n if (fields.length === 0) {\n return this.translationsCache;\n }\n\n return this.getKeysFromObject(fields, this.translationsCache);\n };\n\n public addTranslations = (translations: ITranslationsCollection) => {\n this.translationsCache = {\n ...(this.translationsCache || {}),\n ...(translations || {})\n };\n };\n\n public registerTranslationFieldsToPreload = (fields: string[] = []) => {\n this.translationsFieldsToPreload = [\n ...new Set(this.translationsFieldsToPreload.concat(fields))\n ];\n this.preload();\n };\n\n public addConfigs = (configs: object) => {\n this.configsCache = {\n ...(this.configsCache || {}),\n ...(configs || {})\n };\n };\n\n public registerConfigFieldsToPreload = (fields: string[] = []) => {\n this.configFieldsToPreload = [...new Set(this.configFieldsToPreload.concat(fields))];\n this.preload();\n };\n\n public preload = debounceAsync(async () => {\n const translations = this.translationsFieldsToPreload;\n const configs = this.configFieldsToPreload;\n\n if (!this.getPreloadedTranslations(this.translationsFieldsToPreload)) {\n const trans = await root.GlobalServiceBus.query(\n 'get.translations',\n this.translationsFieldsToPreload\n );\n this.addTranslations(trans);\n this.translationsFieldsToPreload = this.translationsFieldsToPreload.filter(\n (tr) => !translations.includes(tr)\n );\n }\n if (!this.getPreloadedConfigs(this.configFieldsToPreload)) {\n const cfg = await root.GlobalServiceBus.query('get.config', this.configFieldsToPreload);\n this.addConfigs(cfg);\n this.configFieldsToPreload = this.configFieldsToPreload.filter(\n (cg) => !configs.includes(cg)\n );\n }\n }, 100);\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\ntype AnyFn = (...rest: any[]) => Promise;\n\nexport const debounceAsync = (fn: AnyFn, ms: number) => (...args: any[]) => {\n let timer: any = null;\n\n if ('_timer_' in fn) {\n timer = (fn as any)._timer_;\n clearTimeout(timer.id);\n timer.id = setTimeout(timer.resolve, ms);\n\n return timer.promise;\n }\n\n timer = {\n promise: Promise.resolve(),\n resolve: () => {},\n id: null\n };\n timer.promise = new Promise((resolve, _) => {\n timer.resolve = () => {\n delete (fn as any)._timer_;\n resolve(fn(...args));\n };\n (timer as any).id = setTimeout(timer.resolve, ms);\n });\n (fn as any)._timer_ = timer;\n\n return timer.promise;\n};\n","/* eslint-disable no-restricted-syntax */\nimport { root, setupServiceInfo } from '@estee/elc-universal-utils';\nimport { BrowserComponentRenderer } from './BrowserComponentRenderer';\nimport { ViewDataPreloader } from './preloader/ViewDataPreloader';\n\nsetupServiceInfo(__serviceInfo__);\n\nif (root && !root.ComponentRenderer) {\n root.ComponentRenderer = new BrowserComponentRenderer();\n const preloader = new ViewDataPreloader();\n root.registerConfigFieldsToPreload =\n root.registerConfigFieldsToPreload || preloader.registerConfigFieldsToPreload;\n root.getPreloadedConfigs = root.getPreloadedConfigs || preloader.getPreloadedConfigs;\n root.registerTranslationFieldsToPreload =\n root.registerTranslationFieldsToPreload || preloader.registerTranslationFieldsToPreload;\n root.getPreloadedTranslations =\n root.getPreloadedTranslations || preloader.getPreloadedTranslations;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (root.ComponentRenderer as any).setDataPreloader(preloader);\n}\n\nexport { BrowserComponentRenderer };\n"],"names":["root","factory","exports","module","require","define","amd","self","__WEBPACK_EXTERNAL_MODULE_react_dom__","__WEBPACK_EXTERNAL_MODULE__estee_elc_service_bus__","__WEBPACK_EXTERNAL_MODULE__estee_elc_logging__","__WEBPACK_EXTERNAL_MODULE_react__","a","b","results","diffInternal","acc","base","property","Number","isNaN","Array","an","length","bn","equal","indexes","findMatchIndexes","anInner","bnInner","similar","concat","indexesInner","numberPulled","numberPushed","set","add","slice","rm","Date","getTime","Object","keyMap","merge","arrayToMap","keys","key","path","push","type","changeList","value","val","index","count","finalIndex","num","vals","values","compareFn","divergenceIndexA","divergenceIndexB","aSubMin","bSubMin","maxNForA","maxNForB","maxN","Math","max","n","newestA","newestB","j","elemA","elemB","tenPercent","notEqual","abs","keyLength","aKeys","bKeys","array","result","forEach","v","obj1","obj2","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","__webpack_modules__","d","definition","o","defineProperty","enumerable","get","g","globalThis","this","Function","e","window","obj","prop","prototype","hasOwnProperty","call","r","Symbol","toStringTag","BrowserStorage","eraseCookie","name","document","cookie","setCookie","daysOrDate","expires","now","toUTCString","getCookie","nameEQ","ca","split","i","c","charAt","substring","indexOf","getItem","storageKey","console","error","setItem","removeItem","storagePolling","callBack","storageValue","setInterval","latestValue","getServiceVersion","serviceName","fallback","extractServiceVersion","serviceInfo","searchForServiceInfo","version","PerformanceMarker","constructor","logger","startMark","performance","mark","serviceViewName","message","triggerType","TriggerType","payload","endMark","getEntriesByName","markName","markNameEnd","measurement","measure","info","context","toJSON","clearMark","clearMarks","ErrorBoundary","props","super","state","ELCLogger","buid","environment","serviceVersion","static","componentDidCatch","serviceRegistry","render","children","RenderStrategies","LazyRenderer","renderMethodAttribute","ALLOWED_PIXELS","pendingNodes","Set","updateViewHeight","viewHeight","documentElement","clientHeight","innerHeight","isInViewport","node","customMargin","bottom","top","getBoundingClientRect","_node","previousNode","isNodeVisible","parentElement","checkVisibility","checkOpacity","checkVisibilityCSS","className","includes","getAttribute","setAttribute","rect","isBottomVisible","isTopVisible","isHigherThanViewHeight","getRenderMethodStrategy","getNodeAttribute","getRenderConfig","isNodeInViewport","addToPendingNode","parentNode","parent","config","onDemandRenderOffset","JSON","parse","isObserved","isNodeSkeleton","classList","some","hasSkeletonsAsSiblings","checkNextSibling","currentNode","nextElementSibling","previousElementSibling","isSkeleton","hasOnlySkeletons","hasNextSibling","Boolean","nextSibling","hasPreviousSibling","previousSibling","isNextSiblingSkeletonOnly","shouldRenderNode","initLazyRenderer","onNodeDisplay","intersectionObserver","IntersectionObserver","entry","target","isServiceView","isServiceViewNode","serviceViewNode","getServiceViewsFromNode","isIntersecting","nodes","_","isSameNode","delete","unobserve","size","disconnect","rootMargin","threshold","pendingNode","height","style","minHeight","hasSkeletons","observe","ComponentRenderer","preloader","handleEventsFromProps","parsedConfig","filter","configKey","reduce","eventHandlers","args","event","CustomEvent","detail","cancelable","bubbles","dispatchEvent","getConfig","component","configs","preload","getPreloadedConfigs","getElementProps","viewManager","viewController","controllerFromView","fnProps","parentMountPointNode","getElementToRender","registeredComponent","viewName","getComponentForNode","nodeObject","loadComponent","Promise","resolve","convertNodeToComponentNodeType","setDataPreloader","getDataPreloader","COMPONENT_ATTRIBUTE","COMPONENT_SELECTOR","isNodeProductFull","isNodeProductGrid","MAIN_VIEW_ATTRIBUTE","BrowserComponentRenderer","nodesToRenderList","renderedNodes","performanceMarker","isRenderReady","isRenderReadyPromise","element","matches","querySelectorAll","isElement","nodeType","Node","ELEMENT_NODE","addNodeToRenderList","nodeToAdd","has","removeNodeFromRenderList","nodeToRemove","processMutationRecord","record","addedNodes","view","removedNodes","onHTMLChanged","records","renderReactNodes","createMutationObserver","callback","MutationObserver","onReactNodeChange","markerName","observer","perfMeasure","timerName","duration","counterSameView","_name","renderMark","firstRenderMark","reject","mutationObserver","childList","renderNode","componentNode","nodeToRender","all","map","setTimeoutRenderingNodes","setTimeout","renderLazyNode","setMainViews","productFullNode","find","firstProductGridNode","ondemand","processMountPoints","allNodes","from","toRenderNodes","sort","viewA","viewB","announceMountPoints","loadedComponents","components","dataset","shouldRender","emit","events","onDOMContentLoaded","watchRenderOutput","init","initMark","readyState","addEventListener","mutationObserverComponent","body","subtree","ViewDataPreloader","fn","ms","translationsCache","translationsFieldsToPreload","configsCache","configFieldsToPreload","fields","getKeysFromObject","getPreloadedTranslations","addTranslations","translations","registerTranslationFieldsToPreload","addConfigs","registerConfigFieldsToPreload","trans","tr","cfg","cg","timer","_timer_","clearTimeout","id","promise","requestedObject","hasKeyInCache","rest","setupServiceInfo"],"sourceRoot":""}