{"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<n; j++) {\n            var elemA = a[divergenceIndexA-j] // an element between the divergence index and the newest items\n            var elemB = b[divergenceIndexB-j]\n\n            if(n<=maxNForB && compareFn(elemA, newestB)) {\n                return {a:divergenceIndexA-j, b:divergenceIndexB-n}\n            } else if(n<=maxNForA && compareFn(newestA, elemB)) {\n                return {a:divergenceIndexA-n, b:divergenceIndexB-j}\n            }\n        }\n    }\n    // else\n    return {a: aSubMin-1, b: bSubMin-1}\n}\n\n\n// compares arrays and objects and returns true if they're similar meaning:\n    // less than 2 changes, or\n    // less than 10% different members\nfunction similar(a,b) {\n    if(a instanceof Array) {\n        if(!(b instanceof Array))\n            return false\n\n        var tenPercent = a.length/10\n        var notEqual = Math.abs(a.length-b.length) // initialize with the length difference\n        for(var n=0; n<a.length; n++) {\n            if(equal(a[n],b[n])) {\n                if(notEqual >= 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<a.length; n++) {\n                if(!equal(a[n],b[n])) {\n                    return false\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 aKeys = Object.keys(a)\n        var bKeys = Object.keys(b)\n\n        if(aKeys.length !== bKeys.length) {\n            return false\n        } else {\n            for(var n=0; n<aKeys.length; n++) {\n                var key = aKeys[n]\n                var aVal = a[key]\n                var bVal = b[key]\n\n                if(!equal(aVal,bVal)) {\n                    return false\n                }\n            }\n            // else\n            return true\n        }\n    } else {\n        return a===b || Number.isNaN(a) && Number.isNaN(b)\n    }\n}\n\n\n// turns an array of values into a an object where those values are all keys that point to 'true'\nfunction arrayToMap(array) {\n    var result = {}\n    array.forEach(function(v) {\n        result[v] = true\n    })\n    return result\n}\n\n// Overwrites obj1's values with obj2's and adds obj2's if non existent in obj1\n// returns obj1 (now mutated)\nfunction merge(obj1, obj2){\n    for(var key in obj2){\n        obj1[key] = obj2[key]\n    }\n\n    return obj1\n}\n\n","module.exports = __WEBPACK_EXTERNAL_MODULE__estee_elc_service_bus__;","module.exports = __WEBPACK_EXTERNAL_MODULE__estee_elc_logging__;","module.exports = __WEBPACK_EXTERNAL_MODULE_react__;","module.exports = __WEBPACK_EXTERNAL_MODULE_react_dom__;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\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<T> = {\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<HeaderObject>;\nexport type IRequestTransformerConfig = { url: string } & RequestInit;\nexport type IRequestTransformer = (config: IRequestTransformerConfig) => Promise<void>;\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<any>;\n    post(payload: IPayload): Promise<any>;\n    patch(payload: IPayload): Promise<any>;\n    put(payload: IPayload): Promise<any>;\n    get(payload: string | IGetPayload, IRequestOptions?: IRequestOptions): Promise<any>;\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<void>;\n    registerTranslationFieldsToPreload(fields?: string[]): void;\n    registerConfigFieldsToPreload(fields?: string[]): void;\n};\ninterface IComponentRenderer {\n    init(): Promise<void>;\n    getDataPreloader(): ViewDataPreloader | null;\n    setDataPreloader(arg: ViewDataPreloader): void;\n}\n\ntype IObjectLike = { [key: string]: any } | null;\nexport interface IViewManager {\n    loadComponent(): Promise<void>;\n    module: React.ComponentType<any> | null;\n    controllerFromView: IComponentViewController | null;\n}\nexport interface IViewsManager {\n    lazyServicesStarted: boolean;\n    getViewManager(viewName: string): IViewManager;\n    startService(service: AllServicesTypes): Promise<void>;\n    startLazyServices(): Promise<void>;\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<any, any, any, any, any>;\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<any, any, any, any, any>;\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<any, any, any, any, any>;\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\n                this.logger.info({\n                    triggerType: TriggerType.other,\n                    message: `Performance measure between (${markName}) and (${markNameEnd})`,\n                    payload: {\n                        context: measurement ?\n                            measurement.toJSON() :\n                            'measurement API not available',\n                        serviceName: this.serviceViewName\n                    }\n                });\n                this.clearMark(markName);\n\n                return measurement;\n            }\n        } catch (error) {\n            this.logger.warning({\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<IProps, IState> {\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\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<HTMLElement>;\n    protected abstract safeJSONParse<T>(data: string | null | undefined, defaultValue: T): T;\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<PendingNodes> = 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            return false;\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        <RenderStrategiesTypes>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 } = this.safeJSONParse<OnDemandRenderOffset>(config, {});\n\n            if (\n                !parent ||\n                (!this.isInViewport(node, onDemandRenderOffset) &&\n                    !this.isInViewport(parent, onDemandRenderOffset))\n            ) {\n                addToPendingNode &&\n                    this.pendingNodes.add({\n                        node,\n                        parent,\n                        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 &&\n                        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, TriggerType } 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    productData: string | 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    protected safeJSONParse<T>(data: string | null | undefined, defaultValue: T) {\n        try {\n            return data ? JSON.parse(data) : defaultValue;\n        } catch (error) {\n            this.logger.error({\n                triggerType: TriggerType.render,\n                message: `Failed parsing object: (${data})`,\n                payload: {\n                    error\n                }\n            });\n\n            return defaultValue;\n        }\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<IComponentProps> => {\n        const parsedConfig = this.safeJSONParse<{}>(component.config, {});\n        const parsedProductData = this.safeJSONParse<[]>(component.productData, []);\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            productData: parsedProductData,\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<any>,\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        productData: this.getNodeAttribute(node, 'product-data'),\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<HTMLElement> = new Set([]);\n    private isRenderReadyPromise: Promise<void>;\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<HTMLElement>;\n\n    private isElement = (node: Node) => node.nodeType === Node.ELEMENT_NODE;\n\n    private addNodeToRenderList = (nodes: Set<HTMLElement>, 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<HTMLElement>, 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<HTMLElement>());\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        timeoutId: number,\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                    clearTimeout(timeoutId);\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 checkComponentHasRendered = (name: string) =>\n        setTimeout(() => {\n            this.logger.error({\n                message: `Failed to render view ${name}`,\n                triggerType: TriggerType.render,\n                payload: {\n                    context: Object.keys(root.ServiceRegistry).reduce(\n                        (acc, serviceName) => {\n                            const serviceVesion = root.ServiceRegistry[serviceName].version;\n                            if (serviceVesion) {\n                                return { ...acc, [serviceName]: serviceVesion };\n                            }\n        \n                            return acc;\n                        },\n                        {}\n                    )\n                }\n            });\n        }, 8000);\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<void>((resolve, reject) => {\n            try {\n                ReactDOM.render(component, node, () => {\n                    this.performanceMarker.endMark(firstRenderMark);\n\n                    if (name.includes('search-gnav-input-field')) {\n                        resolve();\n\n                        return ;\n                    }\n\n                    const timeoutId = this.checkComponentHasRendered(name);\n                    const mutationObserver = this.createMutationObserver(\n                        this.onReactNodeChange(node, timeoutId, 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        try {\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        } catch (error) {\n            this.logger.error({\n                triggerType: TriggerType.render,\n                message: 'Error trying to render nodes',\n                payload: {\n                    error\n                }\n            });\n        } finally {\n            return Promise.resolve();\n        }\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: this.safeJSONParse<{}>(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<void>((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<any>;\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","warning","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","isBottomVisible","isTopVisible","isHigherThanViewHeight","getRenderMethodStrategy","getNodeAttribute","getRenderConfig","isNodeInViewport","addToPendingNode","parentNode","parent","config","onDemandRenderOffset","safeJSONParse","isObserved","isNodeSkeleton","classList","some","className","includes","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","parsedProductData","productData","viewController","controllerFromView","fnProps","parentMountPointNode","getElementToRender","registeredComponent","viewName","getComponentForNode","nodeObject","loadComponent","Promise","resolve","convertNodeToComponentNodeType","setDataPreloader","getDataPreloader","data","defaultValue","JSON","parse","COMPONENT_ATTRIBUTE","COMPONENT_SELECTOR","isNodeProductFull","getAttribute","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","timeoutId","markerName","observer","perfMeasure","clearTimeout","timerName","duration","checkComponentHasRendered","setTimeout","serviceVesion","counterSameView","_name","renderMark","firstRenderMark","reject","mutationObserver","childList","renderNode","componentNode","nodeToRender","all","map","setTimeoutRenderingNodes","renderLazyNode","setMainViews","productFullNode","find","firstProductGridNode","setAttribute","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_","id","promise","requestedObject","hasKeyInCache","rest","setupServiceInfo"],"sourceRoot":""}