diff --git a/dist/beaver-logger.js.map b/dist/beaver-logger.js.map deleted file mode 100644 index 6fbef91..0000000 --- a/dist/beaver-logger.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["webpack://beaver/webpack/universalModuleDefinition","webpack://beaver/webpack/bootstrap","webpack://beaver/./node_modules/@babel/runtime/helpers/esm/extends.js","webpack://beaver/./node_modules/zalgo-promise/src/utils.js","webpack://beaver/./node_modules/zalgo-promise/src/exceptions.js","webpack://beaver/./node_modules/zalgo-promise/src/flush.js","webpack://beaver/./node_modules/zalgo-promise/src/promise.js","webpack://beaver/./node_modules/belter/src/device.js","webpack://beaver/./node_modules/cross-domain-utils/src/util.js","webpack://beaver/./node_modules/cross-domain-utils/src/constants.js","webpack://beaver/./node_modules/cross-domain-utils/src/utils.js","webpack://beaver/./node_modules/cross-domain-utils/src/types.js","webpack://beaver/./node_modules/cross-domain-utils/src/index.js","webpack://beaver/./node_modules/cross-domain-safe-weakmap/src/native.js","webpack://beaver/./node_modules/cross-domain-safe-weakmap/src/util.js","webpack://beaver/./node_modules/cross-domain-safe-weakmap/src/weakmap.js","webpack://beaver/./node_modules/belter/src/util.js","webpack://beaver/./node_modules/belter/src/constants.js","webpack://beaver/./node_modules/belter/src/dom.js","webpack://beaver/./node_modules/belter/src/storage.js","webpack://beaver/./node_modules/belter/src/experiment.js","webpack://beaver/./node_modules/belter/src/global.js","webpack://beaver/./node_modules/belter/src/http.js","webpack://beaver/./node_modules/belter/src/types.js","webpack://beaver/./node_modules/belter/src/decorators.js","webpack://beaver/./node_modules/belter/src/css.js","webpack://beaver/./node_modules/belter/src/test.js","webpack://beaver/./node_modules/belter/src/index.js","webpack://beaver/./src/constants.js","webpack://beaver/./src/config.js","webpack://beaver/./src/logger.js","webpack://beaver/./src/index.js"],"names":["_extends","Object","assign","target","i","arguments","length","source","key","prototype","hasOwnProperty","call","apply","isPromise","item","Promise","window","Window","constructor","toString","name","then","err","dispatchedErrors","possiblyUnhandledPromiseHandlers","dispatchPossiblyUnhandledError","promise","indexOf","push","setTimeout","__DEBUG__","j","onPossiblyUnhandledException","handler","cancel","splice","activeCount","flushPromise","flushActive","resolve","startActive","endActive","awaitActive","Zalgo","ZalgoPromise","resolved","rejected","errorHandled","value","error","handlers","dispatching","stack","result","isAsync","res","reject","Error","dispatch","asyncReject","chain","firstPromise","secondPromise","onSuccess","onError","catch","undefined","finally","onFinally","try","timeout","time","clearTimeout","toPromise","TypeError","all","promises","count","results","prom","hash","keys","map","items","method","context","args","delay","flush","getUserAgent","navigator","mockUserAgent","userAgent","isDevice","match","isWebView","test","isStandAlone","standalone","matchMedia","matches","isFacebookWebView","ua","isFirefoxIOS","isEdgeIOS","isOperaMini","isAndroid","isIos","isGoogleSearchApp","isQQBrowser","isIosWebview","isAndroidWebview","isIE","document","documentMode","Boolean","isIECompHeader","mHttp","querySelector","mContent","isElectron","process","versions","electron","isIEIntranet","status","isMacOsCna","supportsPopups","isChrome","isSafari","isRegex","noop","PROTOCOL","MOCK","FILE","ABOUT","WILDCARD","WINDOW_TYPE","IFRAME","POPUP","IE_WIN_ACCESS_ERROR","isFileProtocol","win","location","protocol","isAboutProtocol","getParent","parent","getOpener","opener","canReadFromWindow","href","getActualDomain","host","getDomain","domain","mockDomain","isBlankDomain","isActuallySameDomain","desc","getOwnPropertyDescriptor","enumerable","isSameDomain","assertSameDomain","getParents","isAncestorParent","child","childParent","getFrames","frames","len","frame","getAllChildFrames","childFrame","getTop","top","getNextOpener","getUltimateTop","getAllFramesInWindow","getAllWindows","isTop","isFrameWindowClosed","contentWindow","parentNode","doc","ownerDocument","documentElement","contains","safeIndexOf","collection","iframeWindows","iframeFrames","isWindowClosed","allowMock","closed","message","mockclosed","iframeIndex","cleanIframes","linkFrameWindow","getFrameByName","winFrames","findChildFrameByName","namedFrame","findFrameByName","isParent","frameParent","isOpener","getAncestor","getAncestors","ancestor","isAncestor","actualParent","isPopup","isIframe","isFullpage","anyMatch","collection1","collection2","item1","item2","getDistanceFromTop","distance","getNthParent","n","getNthParentFromTop","isSameTopWindow","win1","win2","top1","top2","allFrames1","allFrames2","opener1","opener2","matchDomain","pattern","origin","Array","isArray","JSON","stringify","some","subpattern","stringifyDomainPattern","join","getDomainFromUrl","url","split","slice","onCloseWindow","callback","maxtime","Infinity","check","isWindow","obj","self","__cross_domain_utils_window_check__","isBrowser","isCurrentDomain","isMockDomain","normalizeMockUrl","replace","closeWindow","close","getFrameForWindow","frameElement","querySelectorAll","TYPES","hasNativeWeakMap","WeakMap","freeze","testWeakMap","testKey","testValue","set","get","CrossDomainSafeWeakMap","weakmap","values","Math","random","_cleanupClosedWindows","delete","isSafeToReadWrite","entry","defineProperty","writable","index","has","getOrSet","getter","getFunctionName","fn","__name__","displayName","setFunctionName","base64encode","str","btoa","encodeURIComponent","m","p1","String","fromCharCode","parseInt","Buffer","from","base64decode","atob","decodeURIComponent","c","charCodeAt","uniqueID","chars","randomID","charAt","floor","timeID","Date","toISOString","toLowerCase","getGlobal","global","__GLOBAL__","objectIDs","getObjectID","uid","serializeArgs","subkey","val","memoize","options","cacheMap","memoizedFunction","cache","thisNamespace","cacheTime","now","reset","promiseIdentity","memoizePromise","memoizedPromiseFunction","promisify","promisifiedFunction","inlineMemoize","logic","__inline_memoize_cache__","once","called","onceFunction","hashStr","pow","sqrt","strHashStr","total","abs","regmatch","awaitKey","configurable","stringifyError","level","newErr","stringifyErrorMessage","defaultMessage","domainMatches","hostname","patchMethod","original","patchedMethod","callOriginal","extend","perc","pixels","percentage","round","min","max","regexMap","regexp","regexMapMatcher","svgToBase64","svg","objFilter","filter","identity","regexTokenize","text","token","promiseDebounce","promiseDebounced","localPromise","safeInterval","loop","isInteger","isFloat","serializePrimitive","deserializePrimitive","parseFloat","dotify","prefix","newobj","every","undotify","keyResult","parts","part","isLast","isIndex","eventEmitter","triggered","on","eventName","handlerList","cancelled","listener","trigger","triggerOnce","camelToDasherize","string","g","dasherizeToCamel","toUpperCase","capitalizeFirstLetter","path","def","pathParts","safeTimeout","interval","defineLazyProp","arrayFrom","isObject","isObjectObject","isPlainObject","replaceObject","replacer","fullKey","itemKey","el","copyProp","descriptor","regex","start","RegExp","groups","end","regexAll","isDefined","cycle","debounce","debounceWrapper","weakMapMemoize","weakmapMemoized","arg","weakMapMemoizePromise","weakmapMemoizedPromise","cleanup","tasks","cleaned","register","task","pop","tryCatch","removeFromArray","arr","assertExists","thing","unique","KEY_CODES","ENTER","isDocumentReady","body","readyState","urlEncode","waitForWindowReady","addEventListener","waitForDocumentReady","setInterval","clearInterval","waitForDocumentBody","parseQuery","queryString","params","pair","getQueryParam","search","urlWillRedirectPage","formatQuery","extendQuery","originalQuery","props","extendUrl","query","originalUrl","originalHash","hashString","redirect","hasMetaViewPort","meta","screen","width","isElementVisible","offsetWidth","offsetHeight","getClientRects","enablePerformance","performance","timing","connectEnd","navigationStart","getPageRenderTime","domInteractive","htmlEncode","html","selector","onClick","element","event","keyCode","getScript","scripts","getElementsByTagName","script","src","isLocalStorageEnabled","localStorage","setItem","getItem","removeItem","getBrowserLocales","nav","locales","languages","language","userLanguage","locale","lang","country","appendChild","container","isElement","Element","nodeType","style","getElementSafe","id","getElement","elementReady","PopupOpenError","create","popup","height","left","outerWidth","screenX","outerHeight","screenY","toolbar","menubar","resizable","scrollbars","open","writeToWindow","write","err2","writeElementToWindow","tag","tagName","children","removeChild","setStyle","styleText","styleSheet","cssText","createTextNode","awaitFrameLoadPromises","awaitFrameLoad","awaitFrameWindow","loadedFrame","createElement","class","className","setAttribute","attributes","innerHTML","iframe","allowTransparency","backgroundColor","border","hasAttribute","removeEventListener","bindEvents","eventNames","VENDOR_PREFIXES","setVendorCSS","capitalizedName","ANIMATION_START_EVENTS","ANIMATION_END_EVENTS","animate","clean","hasStarted","startTimeout","endTimeout","startEvent","endEvent","cleanUp","animationName","stopPropagation","STYLE","DISPLAY","NONE","BLOCK","VISIBILITY","VISIBLE","HIDDEN","IMPORTANT","makeElementVisible","setProperty","makeElementInvisible","showElement","hideElement","destroyElement","showAndAnimate","animation","animateAndHide","addClass","classList","add","removeClass","remove","isElementClosed","watchElementForClose","fixScripts","newScript","textContent","replaceChild","onResize","currentWidth","currentHeight","newWidth","newHeight","observer","ResizeObserver","observe","MutationObserver","childList","subtree","characterData","disconnect","getResourceLoadTime","getEntries","entries","duration","DEFAULT_SESSION_STORAGE","getStorage","lifetime","STORAGE_KEY","accessedStorage","getState","localStorageEnabled","storage","rawStorage","parse","getID","getSession","session","__session__","created","guid","getSessionState","state","getSessionID","getBelterExperimentStorage","isEventUnique","loggedBeacons","getThrottlePercentile","throttlePercentiles","THROTTLE_GROUP","TEST","CONTROL","THROTTLE","experiment","sample","logTreatment","logCheckpoint","throttle","group","treatment","started","forced","isEnabled","isDisabled","getTreatment","log","checkpoint","payload","logStart","logComplete","getGlobalNameSpace","version","globalKey","namespace","defValue","HEADERS","CONTENT_TYPE","ACCEPT","headerBuilders","parseHeaders","rawHeaders","trim","line","request","headers","json","data","normalizedHeaders","headerBuilder","builtHeaders","xhr","XMLHttpRequest","xhrLoad","responseHeaders","getAllResponseHeaders","contentType","isJSON","responseBody","responseText","evt","setRequestHeader","ontimeout","xhrTimeout","send","addHeaderBuilder","memoized","isPerc","isPx","toNum","toPx","toCSS","percOf","num","normalizeDimension","dim","wrapPromise","expected","timer","expect","expectWrapper","avoid","avoidWrapper","expectError","expectErrorWrapper","drain","LOG_LEVEL","DEBUG","INFO","WARN","ERROR","AUTO_FLUSH_LEVEL","LOG_LEVEL_PRIORITY","FLUSH_INTERVAL","DEFAULT_LOG_LEVEL","httpTransport","extendIfDefined","Logger","logLevel","transport","flushInterval","events","tracking","payloadBuilders","metaBuilders","trackingBuilders","print","console","warning","immediateFlush","builder","req","enqueue","logger","logPayload","timestamp","addBuilder","builders","addPayloadBuilder","addMetaBuilder","addTrackingBuilder","debug","info","warn","track","trackingPayload","setTransport","newTransport"],"mappings":"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","file":"beaver-logger.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"beaver\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"beaver\"] = factory();\n\telse\n\t\troot[\"beaver\"] = factory();\n})((typeof self !== 'undefined' ? self : this), function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 0);\n","export default function _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}","/* @flow */\n\nexport function isPromise(item : mixed) : boolean {\n try {\n if (!item) {\n return false;\n }\n\n if (typeof Promise !== 'undefined' && item instanceof Promise) {\n return true;\n }\n\n if (typeof window !== 'undefined' && typeof window.Window === 'function' && item instanceof window.Window) {\n return false;\n }\n\n if (typeof window !== 'undefined' && typeof window.constructor === 'function' && item instanceof window.constructor) {\n return false;\n }\n\n let toString = ({}).toString;\n\n if (toString) {\n let name = toString.call(item);\n\n if (name === '[object Window]' || name === '[object global]' || name === '[object DOMWindow]') {\n return false;\n }\n }\n\n if (typeof item.then === 'function') {\n return true;\n }\n } catch (err) {\n return false;\n }\n\n return false;\n}\n","/* @flow */\n\nimport type { ZalgoPromise } from './promise';\n\nconst dispatchedErrors = [];\nconst possiblyUnhandledPromiseHandlers : Array<(mixed, promise? : ZalgoPromise) => void> = [];\n\nexport function dispatchPossiblyUnhandledError(err : mixed, promise : ZalgoPromise) {\n\n if (dispatchedErrors.indexOf(err) !== -1) {\n return;\n }\n\n dispatchedErrors.push(err);\n\n setTimeout(() => {\n if (__DEBUG__) {\n // $FlowFixMe\n throw new Error(`${ err.stack || err.toString() }\\n\\nFrom promise:\\n\\n${ promise.stack }`);\n }\n\n throw err;\n }, 1);\n\n for (let j = 0; j < possiblyUnhandledPromiseHandlers.length; j++) {\n // $FlowFixMe\n possiblyUnhandledPromiseHandlers[j](err, promise);\n }\n}\n\nexport function onPossiblyUnhandledException(handler : (mixed, promise? : ZalgoPromise) => void) : { cancel : () => void } {\n possiblyUnhandledPromiseHandlers.push(handler);\n\n return {\n cancel() {\n possiblyUnhandledPromiseHandlers.splice(possiblyUnhandledPromiseHandlers.indexOf(handler), 1);\n }\n };\n}\n","/* @flow */\n\nimport type { ZalgoPromise } from './promise';\n\nlet activeCount = 0;\nlet flushPromise;\n\nfunction flushActive() {\n if (!activeCount && flushPromise) {\n const promise = flushPromise;\n flushPromise = null;\n promise.resolve();\n }\n}\n\nexport function startActive() {\n activeCount += 1;\n}\n\nexport function endActive() {\n activeCount -= 1;\n flushActive();\n}\n\nexport function awaitActive(Zalgo : Class>) : ZalgoPromise { // eslint-disable-line no-undef\n let promise = flushPromise = flushPromise || new Zalgo();\n flushActive();\n return promise;\n}\n","/* @flow */\n\nimport { isPromise } from './utils';\nimport { onPossiblyUnhandledException, dispatchPossiblyUnhandledError } from './exceptions';\nimport { startActive, endActive, awaitActive } from './flush';\n\nexport class ZalgoPromise {\n\n resolved : boolean\n rejected : boolean\n errorHandled : boolean\n value : R\n error : mixed\n handlers : Array<{\n promise : ZalgoPromise<*>,\n onSuccess : void | (result : R) => mixed,\n onError : void | (error : mixed) => mixed\n }>\n dispatching : boolean\n stack : string\n\n constructor(handler : ?(resolve : (result : R) => void, reject : (error : mixed) => void) => void) {\n\n this.resolved = false;\n this.rejected = false;\n this.errorHandled = false;\n\n this.handlers = [];\n\n if (handler) {\n\n let result;\n let error;\n let resolved = false;\n let rejected = false;\n let isAsync = false;\n\n startActive();\n\n try {\n handler(res => {\n if (isAsync) {\n this.resolve(res);\n } else {\n resolved = true;\n result = res;\n }\n\n }, err => {\n if (isAsync) {\n this.reject(err);\n } else {\n rejected = true;\n error = err;\n }\n });\n\n } catch (err) {\n endActive();\n this.reject(err);\n return;\n }\n\n endActive();\n\n isAsync = true;\n\n if (resolved) {\n // $FlowFixMe\n this.resolve(result);\n } else if (rejected) {\n this.reject(error);\n }\n }\n\n if (__DEBUG__) {\n try {\n throw new Error(`ZalgoPromise`);\n } catch (err) {\n this.stack = err.stack;\n }\n }\n }\n\n resolve(result : R) : ZalgoPromise {\n if (this.resolved || this.rejected) {\n return this;\n }\n\n if (isPromise(result)) {\n throw new Error('Can not resolve promise with another promise');\n }\n\n this.resolved = true;\n this.value = result;\n this.dispatch();\n\n return this;\n }\n\n reject(error : mixed) : ZalgoPromise {\n if (this.resolved || this.rejected) {\n return this;\n }\n\n if (isPromise(error)) {\n throw new Error('Can not reject promise with another promise');\n }\n\n if (!error) {\n // $FlowFixMe\n let err = (error && typeof error.toString === 'function' ? error.toString() : Object.prototype.toString.call(error));\n error = new Error(`Expected reject to be called with Error, got ${ err }`);\n }\n\n this.rejected = true;\n this.error = error;\n\n if (!this.errorHandled) {\n setTimeout(() => {\n if (!this.errorHandled) {\n dispatchPossiblyUnhandledError(error, this);\n }\n }, 1);\n }\n\n this.dispatch();\n\n return this;\n }\n\n asyncReject(error : mixed) : ZalgoPromise {\n this.errorHandled = true;\n this.reject(error);\n return this;\n }\n \n dispatch() {\n\n let { dispatching, resolved, rejected, handlers } = this;\n\n if (dispatching) {\n return;\n }\n\n if (!resolved && !rejected) {\n return;\n }\n\n this.dispatching = true;\n startActive();\n\n const chain = (firstPromise : ZalgoPromise, secondPromise : ZalgoPromise) => {\n return firstPromise.then(res => {\n secondPromise.resolve(res);\n }, err => {\n secondPromise.reject(err);\n });\n };\n\n for (let i = 0; i < handlers.length; i++) {\n\n let { onSuccess, onError, promise } = handlers[i];\n\n let result;\n\n if (resolved) {\n\n try {\n result = onSuccess ? onSuccess(this.value) : this.value;\n } catch (err) {\n promise.reject(err);\n continue;\n }\n\n } else if (rejected) {\n\n if (!onError) {\n promise.reject(this.error);\n continue;\n }\n\n try {\n result = onError(this.error);\n } catch (err) {\n promise.reject(err);\n continue;\n }\n }\n\n if (result instanceof ZalgoPromise && (result.resolved || result.rejected)) {\n\n if (result.resolved) {\n promise.resolve(result.value);\n } else {\n promise.reject(result.error);\n }\n\n result.errorHandled = true;\n\n } else if (isPromise(result)) {\n\n if (result instanceof ZalgoPromise && (result.resolved || result.rejected)) {\n if (result.resolved) {\n promise.resolve(result.value);\n } else {\n promise.reject(result.error);\n }\n\n } else {\n // $FlowFixMe\n chain(result, promise);\n }\n\n } else {\n\n promise.resolve(result);\n }\n }\n\n handlers.length = 0;\n this.dispatching = false;\n endActive();\n }\n\n then(onSuccess : void | (result : R) => (ZalgoPromise | Y), onError : void | (error : mixed) => (ZalgoPromise | Y)) : ZalgoPromise {\n\n if (onSuccess && typeof onSuccess !== 'function' && !onSuccess.call) {\n throw new Error('Promise.then expected a function for success handler');\n }\n\n if (onError && typeof onError !== 'function' && !onError.call) {\n throw new Error('Promise.then expected a function for error handler');\n }\n\n let promise : ZalgoPromise = new ZalgoPromise();\n\n this.handlers.push({\n promise,\n onSuccess,\n onError\n });\n\n this.errorHandled = true;\n\n this.dispatch();\n\n return promise;\n }\n\n catch(onError : (error : mixed) => ZalgoPromise | Y) : ZalgoPromise {\n return this.then(undefined, onError);\n }\n\n finally(onFinally : () => mixed) : ZalgoPromise {\n\n if (onFinally && typeof onFinally !== 'function' && !onFinally.call) {\n throw new Error('Promise.finally expected a function');\n }\n\n return this.then((result) => {\n return ZalgoPromise.try(onFinally)\n .then(() => {\n return result;\n });\n }, (err) => {\n return ZalgoPromise.try(onFinally)\n .then(() => {\n throw err;\n });\n });\n }\n\n timeout(time : number, err : ?Error) : ZalgoPromise {\n\n if (this.resolved || this.rejected) {\n return this;\n }\n\n let timeout = setTimeout(() => {\n\n if (this.resolved || this.rejected) {\n return;\n }\n\n this.reject(err || new Error(`Promise timed out after ${ time }ms`));\n\n }, time);\n\n return this.then(result => {\n clearTimeout(timeout);\n return result;\n });\n }\n\n // $FlowFixMe\n toPromise() : Promise {\n // $FlowFixMe\n if (typeof Promise === 'undefined') {\n throw new TypeError(`Could not find Promise`);\n }\n // $FlowFixMe\n return Promise.resolve(this); // eslint-disable-line compat/compat\n }\n\n static resolve(value : X | ZalgoPromise) : ZalgoPromise {\n\n if (value instanceof ZalgoPromise) {\n return value;\n }\n\n if (isPromise(value)) {\n // $FlowFixMe\n return new ZalgoPromise((resolve, reject) => value.then(resolve, reject));\n }\n\n return new ZalgoPromise().resolve(value);\n }\n\n static reject(error : mixed) : ZalgoPromise {\n return new ZalgoPromise().reject(error);\n }\n\n static asyncReject(error : mixed) : ZalgoPromise {\n return new ZalgoPromise().asyncReject(error);\n }\n\n static all>(promises : X) : ZalgoPromise<$TupleMap(ZalgoPromise | Y) => Y>> { // eslint-disable-line no-undef\n\n let promise = new ZalgoPromise();\n let count = promises.length;\n let results = [];\n\n if (!count) {\n promise.resolve(results);\n return promise;\n }\n\n const chain = (i : number, firstPromise : ZalgoPromise, secondPromise : ZalgoPromise) => {\n return firstPromise.then(res => {\n results[i] = res;\n count -= 1;\n if (count === 0) {\n promise.resolve(results);\n }\n }, err => {\n secondPromise.reject(err);\n });\n };\n\n for (let i = 0; i < promises.length; i++) {\n let prom = promises[i];\n\n if (prom instanceof ZalgoPromise) {\n if (prom.resolved) {\n results[i] = prom.value;\n count -= 1;\n continue;\n }\n } else if (!isPromise(prom)) {\n results[i] = prom;\n count -= 1;\n continue;\n }\n\n chain(i, ZalgoPromise.resolve(prom), promise);\n }\n\n if (count === 0) {\n promise.resolve(results);\n }\n\n return promise;\n }\n\n static hash(promises : O) : ZalgoPromise<$ObjMap(ZalgoPromise | Y) => Y>> { // eslint-disable-line no-undef\n let result = {};\n \n return ZalgoPromise.all(Object.keys(promises).map(key => {\n return ZalgoPromise.resolve(promises[key]).then(value => {\n result[key] = value;\n });\n })).then(() => {\n return result;\n });\n }\n\n static map(items : Array, method : (T) => (ZalgoPromise | X)) : ZalgoPromise> {\n // $FlowFixMe\n return ZalgoPromise.all(items.map(method));\n }\n\n static onPossiblyUnhandledException(handler : (err : mixed) => void) : { cancel : () => void } {\n return onPossiblyUnhandledException(handler);\n }\n\n static try>(method : (...args : A) => (ZalgoPromise | Y), context : ?C, args : ?A) : ZalgoPromise {\n\n if (method && typeof method !== 'function' && !method.call) {\n throw new Error('Promise.try expected a function');\n }\n\n let result;\n\n startActive();\n \n try {\n // $FlowFixMe\n result = method.apply(context, args || []);\n } catch (err) {\n endActive();\n return ZalgoPromise.reject(err);\n }\n\n endActive();\n\n return ZalgoPromise.resolve(result);\n }\n\n static delay(delay : number) : ZalgoPromise {\n return new ZalgoPromise(resolve => {\n setTimeout(resolve, delay);\n });\n }\n\n static isPromise(value : mixed) : boolean {\n\n if (value && value instanceof ZalgoPromise) {\n return true;\n }\n\n return isPromise(value);\n }\n\n static flush() : ZalgoPromise {\n return awaitActive(ZalgoPromise);\n }\n}\n","/* @flow */\n\nexport function getUserAgent() : string {\n return window.navigator.mockUserAgent || window.navigator.userAgent;\n}\n\nexport function isDevice(userAgent? : string = getUserAgent()) : boolean {\n if (userAgent.match(/Android|webOS|iPhone|iPad|iPod|bada|Symbian|Palm|CriOS|BlackBerry|IEMobile|WindowsMobile|Opera Mini/i)) {\n return true;\n }\n\n return false;\n}\n\nexport function isWebView() : boolean {\n let userAgent = getUserAgent();\n return (/(iPhone|iPod|iPad|Macintosh).*AppleWebKit(?!.*Safari)/i).test(userAgent) ||\n (/\\bwv\\b/).test(userAgent) ||\n (/Android.*Version\\/(\\d)\\.(\\d)/i).test(userAgent);\n}\n\nexport function isStandAlone() : boolean {\n return (window.navigator.standalone === true || window.matchMedia('(display-mode: standalone)').matches);\n}\n\nexport function isFacebookWebView(ua? : string = getUserAgent()) : boolean {\n return (ua.indexOf('FBAN') !== -1) || (ua.indexOf('FBAV') !== -1);\n}\n\nexport function isFirefoxIOS(ua? : string = getUserAgent()) : boolean {\n return (/FxiOS/i).test(ua);\n}\n\nexport function isEdgeIOS(ua? : string = getUserAgent()) : boolean {\n return (/EdgiOS/i).test(ua);\n}\n\nexport function isOperaMini(ua? : string = getUserAgent()) : boolean {\n return ua.indexOf('Opera Mini') > -1;\n}\n\nexport function isAndroid(ua? : string = getUserAgent()) : boolean {\n return (/Android/).test(ua);\n}\n\nexport function isIos(ua? : string = getUserAgent()) : boolean {\n return (/iPhone|iPod|iPad/).test(ua);\n}\n\nexport function isGoogleSearchApp(ua? : string = getUserAgent()) : boolean {\n return (/\\bGSA\\b/).test(ua);\n}\n\nexport function isQQBrowser(ua? : string = getUserAgent()) : boolean {\n return (/QQBrowser/).test(ua);\n}\n\nexport function isIosWebview(ua? : string = getUserAgent()) : boolean {\n if (isIos(ua)) {\n if (isGoogleSearchApp(ua)) {\n return true;\n }\n return (/.+AppleWebKit(?!.*Safari)/).test(ua);\n }\n return false;\n}\n\nexport function isAndroidWebview(ua? : string = getUserAgent()) : boolean {\n if (isAndroid(ua)) {\n return (/Version\\/[\\d.]+/).test(ua) && !isOperaMini(ua);\n }\n return false;\n}\n\nexport function isIE() : boolean {\n\n if (window.document.documentMode) {\n return true;\n }\n\n return Boolean(\n window.navigator &&\n window.navigator.userAgent &&\n (/Edge|MSIE|rv:11/i).test(window.navigator.userAgent)\n );\n}\n\nexport function isIECompHeader() : boolean {\n let mHttp = window.document.querySelector('meta[http-equiv=\"X-UA-Compatible\"]');\n let mContent = window.document.querySelector('meta[content=\"IE=edge\"]');\n if (mHttp && mContent) {\n return true;\n }\n return false;\n}\n\nexport function isElectron() : boolean {\n if (typeof process !== 'undefined' && process.versions && process.versions.electron) {\n return true;\n }\n return false;\n}\n\nexport function isIEIntranet() : boolean {\n\n // This status check only works for older versions of IE with document.documentMode set\n\n if (window.document.documentMode) {\n try {\n let status = window.status;\n\n window.status = 'testIntranetMode';\n\n if (window.status === 'testIntranetMode') {\n window.status = status;\n\n return true;\n }\n\n return false;\n\n } catch (err) {\n\n return false;\n }\n }\n\n return false;\n}\n\nexport function isMacOsCna() : boolean {\n let userAgent = getUserAgent();\n return (/Macintosh.*AppleWebKit(?!.*Safari)/i).test(userAgent);\n}\n\nexport function supportsPopups(ua? : string = getUserAgent()) : boolean {\n return !(isIosWebview(ua) || isAndroidWebview(ua) || isOperaMini(ua) ||\n isFirefoxIOS(ua) || isEdgeIOS(ua) || isFacebookWebView(ua) || isQQBrowser(ua) || isElectron() || isMacOsCna() || isStandAlone());\n}\n\nexport function isChrome(ua? : string = getUserAgent()) : boolean {\n return (/Chrome|Chromium|CriOS/).test(ua);\n}\n\nexport function isSafari(ua? : string = getUserAgent()) : boolean {\n return (/Safari/).test(ua) && !isChrome(ua);\n}\n","/* @flow */\n\nexport function isRegex(item : mixed) : boolean {\n return Object.prototype.toString.call(item) === '[object RegExp]';\n}\n\n// eslint-disable-next-line no-unused-vars\nexport function noop(...args : Array) {\n // pass\n}\n","/* @flow */\n\nexport const PROTOCOL = {\n MOCK: ('mock:' : 'mock:'),\n FILE: ('file:' : 'file:'),\n ABOUT: ('about:' : 'about:')\n};\n\nexport const WILDCARD = '*';\n\nexport const WINDOW_TYPE = {\n IFRAME: ('iframe' : 'iframe'),\n POPUP: ('popup' : 'popup')\n};\n","/* @flow */\n/* eslint max-lines: 0 */\n\nimport { isRegex, noop } from './util';\nimport type { CrossDomainWindowType, SameDomainWindowType, DomainMatcher } from './types';\nimport { PROTOCOL, WILDCARD } from './constants';\n\nlet IE_WIN_ACCESS_ERROR = 'Call was rejected by callee.\\r\\n';\n\nexport function isFileProtocol(win : SameDomainWindowType = window) : boolean {\n return win.location.protocol === PROTOCOL.FILE;\n}\n\nexport function isAboutProtocol(win : SameDomainWindowType = window) : boolean {\n return win.location.protocol === PROTOCOL.ABOUT;\n}\n\nexport function getParent(win? : CrossDomainWindowType = window) : ?CrossDomainWindowType {\n\n if (!win) {\n return;\n }\n\n try {\n if (win.parent && win.parent !== win) {\n return win.parent;\n }\n } catch (err) {\n // pass\n }\n}\n\nexport function getOpener(win? : CrossDomainWindowType = window) : ?CrossDomainWindowType {\n\n if (!win) {\n return;\n }\n\n // Make sure we're not actually an iframe which has had window.open() called on us\n if (getParent(win)) {\n return;\n }\n\n try {\n return win.opener;\n } catch (err) {\n // pass\n }\n}\n\nexport function canReadFromWindow(win : CrossDomainWindowType | SameDomainWindowType) : boolean {\n try {\n // $FlowFixMe\n noop(win && win.location && win.location.href);\n return true;\n } catch (err) {\n // pass\n }\n\n return false;\n}\n\nexport function getActualDomain(win? : SameDomainWindowType = window) : string {\n\n let location = win.location;\n\n if (!location) {\n throw new Error(`Can not read window location`);\n }\n\n let protocol = location.protocol;\n\n if (!protocol) {\n throw new Error(`Can not read window protocol`);\n }\n\n if (protocol === PROTOCOL.FILE) {\n return `${ PROTOCOL.FILE }//`;\n }\n\n if (protocol === PROTOCOL.ABOUT) {\n\n let parent = getParent(win);\n if (parent && canReadFromWindow(parent)) {\n // $FlowFixMe\n return getActualDomain(parent);\n }\n\n return `${ PROTOCOL.ABOUT }//`;\n }\n\n let host = location.host;\n\n if (!host) {\n throw new Error(`Can not read window host`);\n }\n\n return `${ protocol }//${ host }`;\n}\n\nexport function getDomain(win? : SameDomainWindowType = window) : string {\n\n let domain = getActualDomain(win);\n\n if (domain && win.mockDomain && win.mockDomain.indexOf(PROTOCOL.MOCK) === 0) {\n return win.mockDomain;\n }\n\n return domain;\n}\n\nexport function isBlankDomain(win : CrossDomainWindowType) : boolean {\n try {\n // $FlowFixMe\n if (!win.location.href) {\n return true;\n }\n\n if (win.location.href === 'about:blank') {\n return true;\n }\n } catch (err) {\n // pass\n }\n\n return false;\n}\n\nexport function isActuallySameDomain(win : CrossDomainWindowType) : boolean {\n\n try {\n if (win === window) {\n return true;\n }\n\n } catch (err) {\n // pass\n }\n\n try {\n let desc = Object.getOwnPropertyDescriptor(win, 'location');\n\n if (desc && desc.enumerable === false) {\n return false;\n }\n\n } catch (err) {\n // pass\n }\n\n try {\n // $FlowFixMe\n if (isAboutProtocol(win) && canReadFromWindow(win)) {\n return true;\n }\n } catch (err) {\n // pass\n }\n\n try {\n // $FlowFixMe\n if (getActualDomain(win) === getActualDomain(window)) {\n return true;\n }\n\n } catch (err) {\n // pass\n }\n\n return false;\n}\n\nexport function isSameDomain(win : CrossDomainWindowType | SameDomainWindowType) : boolean {\n\n if (!isActuallySameDomain(win)) {\n return false;\n }\n\n try {\n\n if (win === window) {\n return true;\n }\n\n // $FlowFixMe\n if (isAboutProtocol(win) && canReadFromWindow(win)) {\n return true;\n }\n\n // $FlowFixMe\n if (getDomain(window) === getDomain(win)) {\n return true;\n }\n\n } catch (err) {\n // pass\n }\n\n return false;\n}\n\n\nexport function assertSameDomain(win : CrossDomainWindowType | SameDomainWindowType) : SameDomainWindowType {\n if (!isSameDomain(win)) {\n throw new Error(`Expected window to be same domain`);\n }\n\n // $FlowFixMe\n return win;\n}\n\nexport function getParents(win : CrossDomainWindowType) : Array {\n\n let result = [];\n\n try {\n\n while (win.parent !== win) {\n result.push(win.parent);\n win = win.parent;\n }\n\n } catch (err) {\n // pass\n }\n\n return result;\n}\n\nexport function isAncestorParent(parent : CrossDomainWindowType, child : CrossDomainWindowType) : boolean {\n\n if (!parent || !child) {\n return false;\n }\n\n let childParent = getParent(child);\n\n if (childParent) {\n return childParent === parent;\n }\n\n if (getParents(child).indexOf(parent) !== -1) {\n return true;\n }\n\n return false;\n}\n\nexport function getFrames(win : CrossDomainWindowType) : Array {\n\n let result = [];\n\n let frames;\n\n try {\n frames = win.frames;\n } catch (err) {\n frames = win;\n }\n\n let len;\n\n try {\n len = frames.length;\n } catch (err) {\n // pass\n }\n\n if (len === 0) {\n return result;\n }\n\n if (len) {\n for (let i = 0; i < len; i++) {\n\n let frame;\n\n try {\n frame = frames[i];\n } catch (err) {\n continue;\n }\n\n result.push(frame);\n }\n\n return result;\n }\n\n for (let i = 0; i < 100; i++) {\n let frame;\n\n try {\n frame = frames[i];\n } catch (err) {\n return result;\n }\n\n if (!frame) {\n return result;\n }\n\n result.push(frame);\n }\n\n return result;\n}\n\n\nexport function getAllChildFrames(win : CrossDomainWindowType) : Array {\n\n let result = [];\n\n for (let frame of getFrames(win)) {\n result.push(frame);\n\n for (let childFrame of getAllChildFrames(frame)) {\n result.push(childFrame);\n }\n }\n\n return result;\n}\n\nexport function getTop(win? : CrossDomainWindowType = window) : ?CrossDomainWindowType {\n\n try {\n if (win.top) {\n return win.top;\n }\n } catch (err) {\n // pass\n }\n\n if (getParent(win) === win) {\n return win;\n }\n\n try {\n if (isAncestorParent(window, win) && window.top) {\n return window.top;\n }\n } catch (err) {\n // pass\n }\n\n try {\n if (isAncestorParent(win, window) && window.top) {\n return window.top;\n }\n } catch (err) {\n // pass\n }\n\n for (let frame of getAllChildFrames(win)) {\n try {\n if (frame.top) {\n return frame.top;\n }\n } catch (err) {\n // pass\n }\n\n if (getParent(frame) === frame) {\n return frame;\n }\n }\n}\n\nexport function getNextOpener(win? : CrossDomainWindowType = window) : ?CrossDomainWindowType {\n return getOpener(getTop(win) || win);\n}\n\nexport function getUltimateTop(win? : CrossDomainWindowType = window) : CrossDomainWindowType {\n let opener = getNextOpener(win);\n\n if (opener) {\n return getUltimateTop(opener);\n }\n\n return top;\n}\n\nexport function getAllFramesInWindow(win : CrossDomainWindowType) : Array {\n let top = getTop(win);\n\n if (!top) {\n throw new Error(`Can not determine top window`);\n }\n\n return [ ...getAllChildFrames(top), top ];\n}\n\nexport function getAllWindows(win? : CrossDomainWindowType = window) : $ReadOnlyArray {\n let frames = getAllFramesInWindow(win);\n let opener = getNextOpener(win);\n\n if (opener) {\n return [ ...getAllWindows(opener), ...frames ];\n } else {\n return frames;\n }\n}\n\nexport function isTop(win : CrossDomainWindowType) : boolean {\n return win === getTop(win);\n}\n\nexport function isFrameWindowClosed(frame : HTMLIFrameElement) : boolean {\n\n if (!frame.contentWindow) {\n return true;\n }\n\n if (!frame.parentNode) {\n return true;\n }\n\n let doc = frame.ownerDocument;\n\n if (doc && doc.documentElement && !doc.documentElement.contains(frame)) {\n return true;\n }\n\n return false;\n}\n\nfunction safeIndexOf(collection : Array, item : T) : number {\n for (let i = 0; i < collection.length; i++) {\n\n try {\n if (collection[i] === item) {\n return i;\n }\n } catch (err) {\n // pass\n }\n }\n\n return -1;\n}\n\nlet iframeWindows = [];\nlet iframeFrames = [];\n\nexport function isWindowClosed(win : CrossDomainWindowType, allowMock : boolean = true) : boolean {\n\n try {\n if (win === window) {\n return false;\n }\n } catch (err) {\n return true;\n }\n\n try {\n if (!win) {\n return true;\n }\n\n } catch (err) {\n return true;\n }\n\n try {\n if (win.closed) {\n return true;\n }\n\n } catch (err) {\n\n // I love you so much IE\n\n if (err && err.message === IE_WIN_ACCESS_ERROR) {\n return false;\n }\n\n return true;\n }\n\n\n if (allowMock && isSameDomain(win)) {\n try {\n // $FlowFixMe\n if (win.mockclosed) {\n return true;\n }\n } catch (err) {\n // pass\n }\n }\n\n // Mobile safari\n\n try {\n if (!win.parent || !win.top) {\n return true;\n }\n } catch (err) {\n // pass\n }\n\n // Yes, this actually happens in IE. win === win errors out when the window\n // is from an iframe, and the iframe was removed from the page.\n\n try {\n noop(win === win); // eslint-disable-line no-self-compare\n } catch (err) {\n return true;\n }\n\n // IE orphaned frame\n\n let iframeIndex = safeIndexOf(iframeWindows, win);\n\n if (iframeIndex !== -1) {\n let frame = iframeFrames[iframeIndex];\n\n if (frame && isFrameWindowClosed(frame)) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction cleanIframes() {\n for (let i = 0; i < iframeWindows.length; i++) {\n let closed = false;\n\n try {\n closed = iframeWindows[i].closed;\n } catch (err) {\n // pass\n }\n\n if (closed) {\n iframeFrames.splice(i, 1);\n iframeWindows.splice(i, 1);\n }\n }\n}\n\nexport function linkFrameWindow(frame : HTMLIFrameElement) {\n\n cleanIframes();\n\n if (frame && frame.contentWindow) {\n try {\n iframeWindows.push(frame.contentWindow);\n iframeFrames.push(frame);\n } catch (err) {\n // pass\n }\n }\n}\n\nexport function getUserAgent(win : ?SameDomainWindowType) : string {\n win = win || window;\n return win.navigator.mockUserAgent || win.navigator.userAgent;\n}\n\n\nexport function getFrameByName(win : CrossDomainWindowType, name : string) : ?CrossDomainWindowType {\n\n let winFrames = getFrames(win);\n\n for (let childFrame of winFrames) {\n try {\n // $FlowFixMe\n if (isSameDomain(childFrame) && childFrame.name === name && winFrames.indexOf(childFrame) !== -1) {\n return childFrame;\n }\n } catch (err) {\n // pass\n }\n }\n\n try {\n // $FlowFixMe\n if (winFrames.indexOf(win.frames[name]) !== -1) {\n // $FlowFixMe\n return win.frames[name];\n }\n } catch (err) {\n // pass\n }\n\n try {\n if (winFrames.indexOf(win[name]) !== -1) {\n return win[name];\n }\n } catch (err) {\n // pass\n }\n}\n\nexport function findChildFrameByName(win : CrossDomainWindowType, name : string) : ?CrossDomainWindowType {\n\n let frame = getFrameByName(win, name);\n\n if (frame) {\n return frame;\n }\n\n for (let childFrame of getFrames(win)) {\n let namedFrame = findChildFrameByName(childFrame, name);\n\n if (namedFrame) {\n return namedFrame;\n }\n }\n}\n\nexport function findFrameByName(win : CrossDomainWindowType, name : string) : ?CrossDomainWindowType {\n\n let frame;\n\n frame = getFrameByName(win, name);\n\n if (frame) {\n return frame;\n }\n\n let top = getTop(win) || win;\n\n return findChildFrameByName(top, name);\n}\n\nexport function isParent(win : CrossDomainWindowType, frame : CrossDomainWindowType) : boolean {\n\n let frameParent = getParent(frame);\n\n if (frameParent) {\n return frameParent === win;\n }\n\n for (let childFrame of getFrames(win)) {\n if (childFrame === frame) {\n return true;\n }\n }\n\n return false;\n}\n\nexport function isOpener(parent : CrossDomainWindowType, child : CrossDomainWindowType) : boolean {\n\n return parent === getOpener(child);\n}\n\nexport function getAncestor(win? : CrossDomainWindowType = window) : ?CrossDomainWindowType {\n win = win || window;\n\n let opener = getOpener(win);\n\n if (opener) {\n return opener;\n }\n\n let parent = getParent(win);\n\n if (parent) {\n return parent;\n }\n}\n\nexport function getAncestors(win : CrossDomainWindowType) : Array {\n\n let results = [];\n\n let ancestor = win;\n\n while (ancestor) {\n ancestor = getAncestor(ancestor);\n if (ancestor) {\n results.push(ancestor);\n }\n }\n\n return results;\n}\n\n\nexport function isAncestor(parent : CrossDomainWindowType, child : CrossDomainWindowType) : boolean {\n\n let actualParent = getAncestor(child);\n\n if (actualParent) {\n if (actualParent === parent) {\n return true;\n }\n\n return false;\n }\n\n if (child === parent) {\n return false;\n }\n\n if (getTop(child) === child) {\n return false;\n }\n\n for (let frame of getFrames(parent)) {\n if (frame === child) {\n return true;\n }\n }\n\n return false;\n}\n\nexport function isPopup(win? : CrossDomainWindowType = window) : boolean {\n return Boolean(getOpener(win));\n}\n\nexport function isIframe(win? : CrossDomainWindowType = window) : boolean {\n return Boolean(getParent(win));\n}\n\nexport function isFullpage(win? : CrossDomainWindowType = window) : boolean {\n return Boolean(!isIframe(win) && !isPopup(win));\n}\n\nfunction anyMatch(collection1, collection2) : boolean {\n\n for (let item1 of collection1) {\n for (let item2 of collection2) {\n if (item1 === item2) {\n return true;\n }\n }\n }\n\n return false;\n}\n\nexport function getDistanceFromTop(win : CrossDomainWindowType = window) : number {\n let distance = 0;\n let parent = win;\n\n while (parent) {\n parent = getParent(parent);\n if (parent) {\n distance += 1;\n }\n }\n\n return distance;\n}\n\nexport function getNthParent(win : CrossDomainWindowType, n : number = 1) : ?CrossDomainWindowType {\n let parent = win;\n\n for (let i = 0; i < n; i++) {\n if (!parent) {\n return;\n }\n\n parent = getParent(parent);\n }\n\n return parent;\n}\n\nexport function getNthParentFromTop(win : CrossDomainWindowType, n : number = 1) : ?CrossDomainWindowType {\n return getNthParent(win, getDistanceFromTop(win) - n);\n}\n\nexport function isSameTopWindow(win1 : CrossDomainWindowType, win2 : CrossDomainWindowType) : boolean {\n\n let top1 = getTop(win1) || win1;\n let top2 = getTop(win2) || win2;\n\n try {\n if (top1 && top2) {\n if (top1 === top2) {\n return true;\n }\n\n return false;\n }\n } catch (err) {\n // pass\n }\n\n let allFrames1 = getAllFramesInWindow(win1);\n let allFrames2 = getAllFramesInWindow(win2);\n\n if (anyMatch(allFrames1, allFrames2)) {\n return true;\n }\n\n let opener1 = getOpener(top1);\n let opener2 = getOpener(top2);\n\n if (opener1 && anyMatch(getAllFramesInWindow(opener1), allFrames2)) {\n return false;\n }\n\n if (opener2 && anyMatch(getAllFramesInWindow(opener2), allFrames1)) {\n return false;\n }\n\n return false;\n}\n\nexport function matchDomain(pattern : DomainMatcher, origin : DomainMatcher) : boolean {\n\n if (typeof pattern === 'string') {\n\n if (typeof origin === 'string') {\n return pattern === WILDCARD || origin === pattern;\n }\n\n if (isRegex(origin)) {\n return false;\n }\n\n if (Array.isArray(origin)) {\n return false;\n }\n }\n\n if (isRegex(pattern)) {\n\n if (isRegex(origin)) {\n return pattern.toString() === origin.toString();\n }\n\n if (Array.isArray(origin)) {\n return false;\n }\n\n // $FlowFixMe\n return Boolean(origin.match(pattern));\n }\n\n if (Array.isArray(pattern)) {\n\n if (Array.isArray(origin)) {\n return JSON.stringify(pattern) === JSON.stringify(origin);\n }\n\n if (isRegex(origin)) {\n return false;\n }\n\n return pattern.some(subpattern => matchDomain(subpattern, origin));\n }\n\n return false;\n}\n\nexport function stringifyDomainPattern(pattern : DomainMatcher) : string {\n if (Array.isArray(pattern)) {\n return `(${ pattern.join(' | ') })`;\n } else if (isRegex(pattern)) {\n return `RegExp(${ pattern.toString() }`;\n } else {\n return pattern.toString();\n }\n}\n\nexport function getDomainFromUrl(url : string) : string {\n\n let domain;\n\n if (url.match(/^(https?|mock|file):\\/\\//)) {\n domain = url;\n } else {\n return getDomain();\n }\n\n domain = domain.split('/').slice(0, 3).join('/');\n\n return domain;\n}\n\nexport function onCloseWindow(win : CrossDomainWindowType, callback : Function, delay : number = 1000, maxtime : number = Infinity) : { cancel : () => void } {\n\n let timeout;\n\n let check = () => {\n\n if (isWindowClosed(win)) {\n\n if (timeout) {\n clearTimeout(timeout);\n }\n\n return callback();\n }\n\n if (maxtime <= 0) {\n clearTimeout(timeout);\n } else {\n maxtime -= delay;\n timeout = setTimeout(check, delay);\n }\n };\n\n check();\n\n return {\n cancel() {\n if (timeout) {\n clearTimeout(timeout);\n }\n }\n };\n}\n\n// eslint-disable-next-line complexity\nexport function isWindow(obj : Object) : boolean {\n\n try {\n if (obj === window) {\n return true;\n }\n } catch (err) {\n if (err && err.message === IE_WIN_ACCESS_ERROR) {\n return true;\n }\n }\n\n try {\n if (Object.prototype.toString.call(obj) === '[object Window]') {\n return true;\n }\n } catch (err) {\n if (err && err.message === IE_WIN_ACCESS_ERROR) {\n return true;\n }\n }\n\n try {\n if (window.Window && obj instanceof window.Window) {\n return true;\n }\n } catch (err) {\n if (err && err.message === IE_WIN_ACCESS_ERROR) {\n return true;\n }\n }\n\n try {\n if (obj && obj.self === obj) {\n return true;\n }\n } catch (err) {\n if (err && err.message === IE_WIN_ACCESS_ERROR) {\n return true;\n }\n }\n\n try {\n if (obj && obj.parent === obj) {\n return true;\n }\n } catch (err) {\n if (err && err.message === IE_WIN_ACCESS_ERROR) {\n return true;\n }\n }\n\n try {\n if (obj && obj.top === obj) {\n return true;\n }\n } catch (err) {\n if (err && err.message === IE_WIN_ACCESS_ERROR) {\n return true;\n }\n }\n\n try {\n if (noop(obj === obj) === '__unlikely_value__') { // eslint-disable-line no-self-compare\n return false;\n }\n\n } catch (err) {\n return true;\n }\n\n try {\n if (obj && obj.__cross_domain_utils_window_check__ === '__unlikely_value__') {\n return false;\n }\n\n } catch (err) {\n return true;\n }\n\n return false;\n}\n\nexport function isBrowser() : boolean {\n return (typeof window !== 'undefined' && typeof window.location !== 'undefined');\n}\n\nexport function isCurrentDomain(domain : string) : boolean {\n if (!isBrowser()) {\n return false;\n }\n\n return (getDomain() === domain);\n}\n\nexport function isMockDomain(domain : string) : boolean {\n return domain.indexOf(PROTOCOL.MOCK) === 0;\n}\n\nexport function normalizeMockUrl(url : string) : string {\n if (!isMockDomain(getDomainFromUrl(url))) {\n return url;\n }\n\n if (!__TEST__) {\n throw new Error(`Mock urls not supported out of test mode`);\n }\n\n return url.replace(/^mock:\\/\\/[^/]+/, getActualDomain(window));\n}\n\nexport function closeWindow(win : CrossDomainWindowType) {\n try {\n win.close();\n } catch (err) {\n // pass\n }\n}\n\nexport function getFrameForWindow(win : CrossDomainWindowType) : ?HTMLElement {\n if (isSameDomain(win)) {\n return assertSameDomain(win).frameElement;\n }\n\n for (const frame of document.querySelectorAll('iframe')) {\n if (frame && frame.contentWindow && frame.contentWindow === win) {\n return frame;\n }\n }\n}\n","/* @flow */\n\n// export something to force webpack to see this as an ES module\nexport const TYPES = true;\n\nexport type CrossDomainLocationType = {|\n\n|};\n\nexport type CrossDomainWindowType = {|\n location : string | CrossDomainLocationType,\n self : CrossDomainWindowType,\n closed : boolean,\n open : (string, string, string) => CrossDomainWindowType,\n close : () => void,\n focus : () => void,\n top : CrossDomainWindowType,\n frames : Array,\n opener ? : CrossDomainWindowType,\n parent : CrossDomainWindowType,\n length : number,\n postMessage : (string, string) => void\n|};\n\nexport type SameDomainWindowType = Object & {\n location : string | Object,\n self : CrossDomainWindowType,\n closed : boolean,\n open : (string, string, string) => CrossDomainWindowType,\n close : () => void,\n focus : () => void,\n XMLHttpRequest : typeof XMLHttpRequest,\n document : Document,\n navigator : {\n userAgent : string,\n mockUserAgent? : string\n }\n};\n\nexport type DomainMatcher = string | Array | $ReadOnlyArray | RegExp;\n","/* @flow */\n\nexport * from './utils';\nexport * from './types';\nexport * from './constants';\n","/* @flow */\n\nexport function hasNativeWeakMap() : boolean {\n\n if (typeof WeakMap === 'undefined') {\n return false;\n }\n\n if (typeof Object.freeze === 'undefined') {\n return false;\n }\n\n try {\n\n let testWeakMap = new WeakMap();\n let testKey = {};\n let testValue = '__testvalue__';\n\n Object.freeze(testKey);\n\n testWeakMap.set(testKey, testValue);\n\n if (testWeakMap.get(testKey) === testValue) {\n return true;\n }\n\n return false;\n\n } catch (err) {\n\n return false;\n }\n}\n","/* @flow */\n\nexport function safeIndexOf(collection : Array, item : T) : number {\n for (let i = 0; i < collection.length; i++) {\n\n try {\n if (collection[i] === item) {\n return i;\n }\n } catch (err) {\n // pass\n }\n }\n\n return -1;\n}\n\n// eslint-disable-next-line no-unused-vars\nexport function noop(...args : Array) {\n // pass\n}\n","/* @flow */\n\nimport { isWindow, isWindowClosed } from 'cross-domain-utils/src';\n\nimport { hasNativeWeakMap } from './native';\nimport { noop, safeIndexOf } from './util';\n\nexport class CrossDomainSafeWeakMap {\n\n name : string\n weakmap : ?WeakMap\n keys : Array\n values : Array\n\n constructor() {\n // eslint-disable-next-line no-bitwise\n this.name = `__weakmap_${ Math.random() * 1e9 >>> 0 }__`;\n\n if (hasNativeWeakMap()) {\n try {\n this.weakmap = new WeakMap();\n } catch (err) {\n // pass\n }\n }\n\n this.keys = [];\n this.values = [];\n }\n\n _cleanupClosedWindows() {\n\n let weakmap = this.weakmap;\n let keys = this.keys;\n\n for (let i = 0; i < keys.length; i++) {\n let value = keys[i];\n\n if (isWindow(value) && isWindowClosed(value)) {\n\n if (weakmap) {\n try {\n weakmap.delete(value);\n } catch (err) {\n // pass\n }\n }\n\n keys.splice(i, 1);\n this.values.splice(i, 1);\n\n i -= 1;\n }\n }\n }\n\n isSafeToReadWrite(key : K) : boolean {\n\n if (isWindow(key)) {\n return false;\n }\n\n try {\n noop(key && key.self);\n noop(key && key[this.name]);\n } catch (err) {\n return false;\n }\n\n return true;\n }\n\n set(key : K, value : V) {\n\n if (!key) {\n throw new Error(`WeakMap expected key`);\n }\n\n let weakmap = this.weakmap;\n\n if (weakmap) {\n try {\n weakmap.set(key, value);\n } catch (err) {\n delete this.weakmap;\n }\n }\n\n if (this.isSafeToReadWrite(key)) {\n try {\n let name = this.name;\n let entry = key[name];\n\n if (entry && entry[0] === key) {\n entry[1] = value;\n } else {\n Object.defineProperty(key, name, {\n value: [ key, value ],\n writable: true\n });\n }\n\n return;\n\n } catch (err) {\n // pass\n }\n }\n\n this._cleanupClosedWindows();\n\n let keys = this.keys;\n let values = this.values;\n let index = safeIndexOf(keys, key);\n\n if (index === -1) {\n keys.push(key);\n values.push(value);\n } else {\n values[index] = value;\n }\n }\n\n get(key : K) : V | void {\n\n if (!key) {\n throw new Error(`WeakMap expected key`);\n }\n\n let weakmap = this.weakmap;\n\n if (weakmap) {\n try {\n if (weakmap.has(key)) {\n return weakmap.get(key);\n }\n \n } catch (err) {\n delete this.weakmap;\n }\n }\n\n if (this.isSafeToReadWrite(key)) {\n try {\n let entry = key[this.name];\n\n if (entry && entry[0] === key) {\n return entry[1];\n }\n\n return;\n } catch (err) {\n // pass\n }\n }\n\n this._cleanupClosedWindows();\n\n let keys = this.keys;\n let index = safeIndexOf(keys, key);\n\n if (index === -1) {\n return;\n }\n\n return this.values[index];\n }\n\n delete(key : K) {\n\n if (!key) {\n throw new Error(`WeakMap expected key`);\n }\n\n let weakmap = this.weakmap;\n\n if (weakmap) {\n try {\n weakmap.delete(key);\n } catch (err) {\n delete this.weakmap;\n }\n }\n\n if (this.isSafeToReadWrite(key)) {\n try {\n let entry = key[this.name];\n\n if (entry && entry[0] === key) {\n entry[0] = entry[1] = undefined;\n }\n } catch (err) {\n // pass\n }\n }\n\n this._cleanupClosedWindows();\n\n let keys = this.keys;\n let index = safeIndexOf(keys, key);\n\n if (index !== -1) {\n keys.splice(index, 1);\n this.values.splice(index, 1);\n }\n }\n\n has(key : K) : boolean {\n\n if (!key) {\n throw new Error(`WeakMap expected key`);\n }\n\n let weakmap = this.weakmap;\n\n if (weakmap) {\n try {\n if (weakmap.has(key)) {\n return true;\n }\n } catch (err) {\n delete this.weakmap;\n }\n }\n\n if (this.isSafeToReadWrite(key)) {\n try {\n let entry = key[this.name];\n\n if (entry && entry[0] === key) {\n return true;\n }\n\n return false;\n } catch (err) {\n // pass\n }\n }\n\n this._cleanupClosedWindows();\n\n let index = safeIndexOf(this.keys, key);\n return index !== -1;\n }\n\n getOrSet(key : K, getter : () => V) : V {\n if (this.has(key)) {\n // $FlowFixMe\n return this.get(key);\n }\n\n let value = getter();\n this.set(key, value);\n return value;\n }\n}\n","/* @flow */\n/* eslint max-lines: 0 */\n\nimport { ZalgoPromise } from 'zalgo-promise/src';\nimport { WeakMap } from 'cross-domain-safe-weakmap/src';\n\nimport type { CancelableType } from './types';\n\nexport function getFunctionName (fn : T) : string {\n return fn.name || fn.__name__ || fn.displayName || 'anonymous';\n}\n\nexport function setFunctionName (fn : T, name : string) : T {\n try {\n delete fn.name;\n fn.name = name;\n } catch (err) {\n // pass\n }\n\n fn.__name__ = fn.displayName = name;\n return fn;\n}\n\nexport function base64encode(str : string) : string {\n if (typeof btoa === 'function') {\n return btoa(encodeURIComponent(str).replace(/%([0-9A-F]{2})/g, (m, p1) => {\n return String.fromCharCode(parseInt(p1, 16));\n }));\n }\n\n if (typeof Buffer !== 'undefined') {\n return Buffer.from(str, 'utf8').toString('base64');\n }\n\n throw new Error(`Can not find window.btoa or Buffer`);\n}\n\nexport function base64decode(str : string) : string {\n if (typeof atob === 'function') {\n return decodeURIComponent(Array.prototype.map.call(atob(str), c => {\n // eslint-disable-next-line prefer-template\n return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);\n }).join(''));\n }\n\n if (typeof Buffer !== 'undefined') {\n return Buffer.from(str, 'base64').toString('utf8');\n }\n\n throw new Error(`Can not find window.atob or Buffer`);\n}\n\nexport function uniqueID() : string {\n\n let chars = '0123456789abcdef';\n\n let randomID = 'xxxxxxxxxx'.replace(/./g, () => {\n return chars.charAt(Math.floor(Math.random() * chars.length));\n });\n\n let timeID = base64encode(\n new Date().toISOString().slice(11, 19).replace('T', '.')\n ).replace(/[^a-zA-Z0-9]/g, '').toLowerCase();\n\n return `${ randomID }_${ timeID }`;\n}\n\nexport function getGlobal() : Object {\n if (typeof window !== 'undefined') {\n return window;\n }\n if (typeof global !== 'undefined') {\n return global;\n }\n if (typeof __GLOBAL__ !== 'undefined') {\n return __GLOBAL__;\n }\n throw new Error(`No global found`);\n}\n\nlet objectIDs;\n\nexport function getObjectID(obj : Object) : string {\n\n objectIDs = objectIDs || new WeakMap();\n\n if (obj === null || obj === undefined || (typeof obj !== 'object' && typeof obj !== 'function')) {\n throw new Error(`Invalid object`);\n }\n\n let uid = objectIDs.get(obj);\n\n if (!uid) {\n uid = `${ typeof obj }:${ uniqueID() }`;\n objectIDs.set(obj, uid);\n }\n\n return uid;\n}\n\nfunction serializeArgs(args : Array) : string {\n try {\n return JSON.stringify(Array.prototype.slice.call(args), (subkey, val) => {\n if (typeof val === 'function') {\n return `memoize[${ getObjectID(val) }]`;\n }\n return val;\n });\n } catch (err) {\n throw new Error(`Arguments not serializable -- can not be used to memoize`);\n }\n}\nexport function memoize) => R, X : { (...args : Array) : R, displayName : string, reset : () => void }>(method : F, options : { time? : number, thisNamespace? : boolean } = {}) : X {\n let cacheMap = new WeakMap();\n\n // $FlowFixMe\n let memoizedFunction : X = function memoizedFunction(...args : Array) : R {\n let cache = cacheMap.getOrSet(options.thisNamespace ? this : method, () => ({}));\n\n let key : string = serializeArgs(args);\n\n let cacheTime = options.time;\n if (cache[key] && cacheTime && (Date.now() - cache[key].time) < cacheTime) {\n delete cache[key];\n }\n\n if (cache[key]) {\n return cache[key].value;\n }\n\n let time = Date.now();\n let value = method.apply(this, arguments);\n\n cache[key] = { time, value };\n\n return cache[key].value;\n };\n\n memoizedFunction.reset = () => {\n cacheMap.delete(options.thisNamespace ? this : method);\n };\n\n return setFunctionName(memoizedFunction, `${ getFunctionName(method) }::memoized`);\n}\n\nexport function promiseIdentity(item : ZalgoPromise | T) : ZalgoPromise {\n // $FlowFixMe\n return ZalgoPromise.resolve(item);\n}\n\n// eslint-disable-next-line flowtype/no-weak-types\nexport function memoizePromise(method : (...args : Array) => ZalgoPromise) : ((...args : Array) => ZalgoPromise) {\n let cache = {};\n\n // eslint-disable-next-line flowtype/no-weak-types\n function memoizedPromiseFunction(...args : Array) : ZalgoPromise {\n let key : string = serializeArgs(args);\n\n if (cache.hasOwnProperty(key)) {\n return cache[key];\n }\n\n cache[key] = ZalgoPromise.try(() => method.apply(this, arguments))\n .finally(() => {\n delete cache[key];\n });\n\n return cache[key];\n }\n\n memoizedPromiseFunction.reset = () => {\n cache = {};\n };\n\n return setFunctionName(memoizedPromiseFunction, `${ getFunctionName(method) }::promiseMemoized`);\n}\n\n// eslint-disable-next-line flowtype/no-weak-types\nexport function promisify(method : (...args : Array) => R, options : { name? : string } = {}) : ((...args : Array) => ZalgoPromise) {\n function promisifiedFunction() : ZalgoPromise {\n return ZalgoPromise.try(method, this, arguments);\n }\n\n if (options.name) {\n promisifiedFunction.displayName = `${ options.name }:promisified`;\n }\n\n return setFunctionName(promisifiedFunction, `${ getFunctionName(method) }::promisified`);\n}\n\n// eslint-disable-next-line flowtype/no-weak-types\nexport function inlineMemoize(method : (...args : Array) => R, logic : (...args : Array) => R, args : Array = []) : R {\n // $FlowFixMe\n let cache = method.__inline_memoize_cache__ = method.__inline_memoize_cache__ || {};\n let key = serializeArgs(args);\n\n if (cache.hasOwnProperty(key)) {\n return cache[key];\n }\n \n let result = cache[key] = logic(...args);\n\n return result;\n}\n\n// eslint-disable-next-line no-unused-vars\nexport function noop(...args : Array) {\n // pass\n}\n\nexport function once(method : Function) : Function {\n let called = false;\n\n const onceFunction = function() : mixed {\n if (!called) {\n called = true;\n return method.apply(this, arguments);\n }\n };\n\n return setFunctionName(onceFunction, `${ getFunctionName(method) }::once`);\n}\n\nexport function hashStr(str : string) : number {\n let hash = 0;\n for (let i = 0; i < str.length; i++) {\n hash += str[i].charCodeAt(0) * Math.pow((i % 10) + 1, 5);\n }\n return Math.floor(Math.pow(Math.sqrt(hash), 5));\n}\n\nexport function strHashStr(str : string) : string {\n let hash = '';\n\n for (let i = 0; i < str.length; i++) {\n let total = (str[i].charCodeAt(0) * i);\n\n if (str[i + 1]) {\n total += (str[i + 1].charCodeAt(0) * (i - 1));\n }\n\n hash += String.fromCharCode(97 + (Math.abs(total) % 26));\n }\n\n return hash;\n}\n\nexport function match(str : string, pattern : RegExp) : ?string {\n let regmatch = str.match(pattern);\n if (regmatch) {\n return regmatch[1];\n }\n}\n\nexport function awaitKey(obj : Object, key : string) : ZalgoPromise {\n return new ZalgoPromise(resolve => {\n\n let value = obj[key];\n\n if (value) {\n return resolve(value);\n }\n\n delete obj[key];\n\n Object.defineProperty(obj, key, {\n\n configurable: true,\n\n set(item) {\n value = item;\n\n if (value) {\n resolve(value);\n }\n },\n\n get() : mixed {\n return value;\n }\n });\n });\n}\n\nexport function stringifyError(err : mixed, level : number = 1) : string {\n\n if (level >= 3) {\n return 'stringifyError stack overflow';\n }\n\n try {\n if (!err) {\n return ``;\n }\n\n if (typeof err === 'string') {\n return err;\n }\n\n if (err instanceof Error) {\n let stack = err && err.stack;\n let message = err && err.message;\n\n if (stack && message) {\n if (stack.indexOf(message) !== -1) {\n return stack;\n } else {\n return `${ message }\\n${ stack }`;\n }\n } else if (stack) {\n return stack;\n } else if (message) {\n return message;\n }\n }\n\n if (err && err.toString && typeof err.toString === 'function') {\n // $FlowFixMe\n return err.toString();\n }\n\n return Object.prototype.toString.call(err);\n\n } catch (newErr) { // eslint-disable-line unicorn/catch-error-name\n return `Error while stringifying error: ${ stringifyError(newErr, level + 1) }`;\n }\n}\n\nexport function stringifyErrorMessage(err : mixed) : string {\n\n let defaultMessage = ``;\n\n if (!err) {\n return defaultMessage;\n }\n\n if (err instanceof Error) {\n return err.message || defaultMessage;\n }\n\n if (typeof err.message === 'string') {\n return err.message || defaultMessage;\n }\n\n return defaultMessage;\n}\n\nexport function stringify(item : mixed) : string {\n if (typeof item === 'string') {\n return item;\n }\n\n if (item && item.toString && typeof item.toString === 'function') {\n // $FlowFixMe\n return item.toString();\n }\n\n return Object.prototype.toString.call(item);\n}\n\nexport function domainMatches(hostname : string, domain : string) : boolean {\n hostname = hostname.split('://')[1];\n let index = hostname.indexOf(domain);\n return (index !== -1 && hostname.slice(index) === domain);\n}\n\nexport function patchMethod(obj : Object, name : string, handler : Function) {\n let original = obj[name];\n\n obj[name] = function patchedMethod() : mixed {\n return handler({\n context: this,\n args: Array.prototype.slice.call(arguments),\n original,\n callOriginal: () => original.apply(this, arguments)\n });\n };\n}\n\nexport function extend(obj : T, source : Object) : T {\n if (!source) {\n return obj;\n }\n\n if (Object.assign) {\n return Object.assign(obj, source);\n }\n\n for (let key in source) {\n if (source.hasOwnProperty(key)) {\n obj[key] = source[key];\n }\n }\n\n return obj;\n}\n\nexport function values(obj : { [string] : T }) : Array {\n let result = [];\n for (let key in obj) {\n if (obj.hasOwnProperty(key)) {\n result.push(obj[key]);\n }\n }\n return result;\n}\n\nexport function perc(pixels : number, percentage : number) : number {\n return Math.round((pixels * percentage) / 100);\n}\n\nexport function min(...args : Array) : number {\n return Math.min(...args);\n}\n\nexport function max(...args : Array) : number {\n return Math.max(...args);\n}\n\nexport function regexMap(str : string, regexp : RegExp, handler : () => T) : Array {\n let results = [];\n\n // $FlowFixMe\n str.replace(regexp, function regexMapMatcher(item) {\n results.push(handler ? handler.apply(null, arguments) : item);\n });\n\n // $FlowFixMe\n return results;\n}\n\nexport function svgToBase64(svg : string) : string {\n return `data:image/svg+xml;base64,${ base64encode(svg) }`;\n}\n\nexport function objFilter(obj : { [string] : T }, filter? : (T, ?string) => mixed = Boolean) : { [string] : R } {\n let result = {};\n\n for (let key in obj) {\n if (!obj.hasOwnProperty(key) || !filter(obj[key], key)) {\n continue;\n }\n\n result[key] = obj[key];\n }\n\n return result;\n}\n\nexport function identity (item : T) : T {\n return item;\n}\n\nexport function regexTokenize(text : string, regexp : RegExp) : Array {\n let result = [];\n text.replace(regexp, token => {\n result.push(token);\n return '';\n });\n return result;\n}\n\nexport function promiseDebounce(method : () => ZalgoPromise | T, delay : number = 50) : () => ZalgoPromise {\n\n let promise;\n let timeout;\n\n const promiseDebounced = function() : ZalgoPromise {\n if (timeout) {\n clearTimeout(timeout);\n }\n\n let localPromise = promise = promise || new ZalgoPromise();\n\n timeout = setTimeout(() => {\n promise = null;\n timeout = null;\n\n ZalgoPromise.try(method).then(\n result => { localPromise.resolve(result); },\n err => { localPromise.reject(err); }\n );\n }, delay);\n\n return localPromise;\n };\n\n return setFunctionName(promiseDebounced, `${ getFunctionName(method) }::promiseDebounced`);\n}\n\nexport function safeInterval(method : Function, time : number) : { cancel : () => void } {\n\n let timeout;\n\n function loop() {\n timeout = setTimeout(() => {\n method();\n loop();\n }, time);\n }\n\n loop();\n\n return {\n cancel() {\n clearTimeout(timeout);\n }\n };\n}\n\nexport function isInteger(str : string) : boolean {\n return Boolean(str.match(/^[0-9]+$/));\n}\n\nexport function isFloat(str : string) : boolean {\n return Boolean(str.match(/^[0-9]+\\.[0-9]+$/));\n}\n\nexport function serializePrimitive(value : string | number | boolean) : string {\n return value.toString();\n}\n\nexport function deserializePrimitive(value : string) : string | number | boolean {\n if (value === 'true') {\n return true;\n } else if (value === 'false') {\n return false;\n } else if (isInteger(value)) {\n return parseInt(value, 10);\n } else if (isFloat(value)) {\n return parseFloat(value);\n } else {\n return value;\n }\n}\n\nexport function dotify(obj : Object, prefix : string = '', newobj : Object = {}) : { [string] : string } {\n prefix = prefix ? `${ prefix }.` : prefix;\n for (let key in obj) {\n if (!obj.hasOwnProperty(key) || obj[key] === undefined || obj[key] === null || typeof obj[key] === 'function') {\n continue;\n } else if (obj[key] && Array.isArray(obj[key]) && obj[key].length && obj[key].every(val => typeof val !== 'object')) {\n newobj[`${ prefix }${ key }[]`] = obj[key].join(',');\n } else if (obj[key] && typeof obj[key] === 'object') {\n newobj = dotify(obj[key], `${ prefix }${ key }`, newobj);\n } else {\n newobj[`${ prefix }${ key }`] = serializePrimitive(obj[key]);\n }\n }\n return newobj;\n}\n\nexport function undotify(obj : { [string] : string }) : Object {\n \n let result = {};\n\n for (let key in obj) {\n if (!obj.hasOwnProperty(key) || typeof obj[key] !== 'string') {\n continue;\n }\n\n let value = obj[key];\n\n if (key.match(/^.+\\[\\]$/)) {\n key = key.slice(0, key.length - 2);\n value = value.split(',').map(deserializePrimitive);\n } else {\n value = deserializePrimitive(value);\n }\n\n let keyResult = result;\n let parts = key.split('.');\n for (let i = 0; i < parts.length; i++) {\n let part = parts[i];\n let isLast = (i + 1 === parts.length);\n let isIndex = !isLast && isInteger(parts[i + 1]);\n\n if (part === 'constructor' || part === 'prototype' || part === '__proto__') {\n throw new Error(`Disallowed key: ${ part }`);\n }\n\n if (isLast) {\n // $FlowFixMe\n keyResult[part] = value;\n } else {\n // $FlowFixMe\n keyResult = keyResult[part] = keyResult[part] || (isIndex ? [] : {});\n }\n }\n }\n\n return result;\n}\n\nexport type EventEmitterType = {\n on : (eventName : string, handler : Function) => CancelableType,\n once : (eventName : string, handler : Function) => CancelableType,\n trigger : (eventName : string, ...args : $ReadOnlyArray) => ZalgoPromise,\n triggerOnce : (eventName : string, ...args : $ReadOnlyArray) => ZalgoPromise,\n reset : () => void\n};\n\nexport function eventEmitter() : EventEmitterType {\n let triggered = {};\n let handlers = {};\n\n return {\n\n on(eventName : string, handler : Function) : CancelableType {\n let handlerList = handlers[eventName] = handlers[eventName] || [];\n\n handlerList.push(handler);\n\n let cancelled = false;\n\n return {\n cancel() {\n if (!cancelled) {\n cancelled = true;\n handlerList.splice(handlerList.indexOf(handler), 1);\n }\n\n }\n };\n },\n\n once(eventName : string, handler : Function) : CancelableType {\n\n let listener = this.on(eventName, () => {\n listener.cancel();\n handler();\n });\n\n return listener;\n },\n\n trigger(eventName : string, ...args : $ReadOnlyArray) : ZalgoPromise {\n\n let handlerList = handlers[eventName];\n let promises = [];\n\n if (handlerList) {\n for (let handler of handlerList) {\n promises.push(ZalgoPromise.try(() => handler(...args)));\n }\n }\n\n return ZalgoPromise.all(promises).then(noop);\n },\n\n triggerOnce(eventName : string, ...args : $ReadOnlyArray) : ZalgoPromise {\n\n if (triggered[eventName]) {\n return ZalgoPromise.resolve();\n }\n\n triggered[eventName] = true;\n return this.trigger(eventName, ...args);\n },\n\n reset() {\n handlers = {};\n }\n };\n}\n\nexport function camelToDasherize(string : string) : string {\n return string.replace(/([A-Z])/g, (g) => {\n return `-${ g.toLowerCase() }`;\n });\n}\n\nexport function dasherizeToCamel(string : string) : string {\n return string.replace(/-([a-z])/g, (g) => {\n return g[1].toUpperCase();\n });\n}\n\nexport function capitalizeFirstLetter(string : string) : string {\n return string.charAt(0).toUpperCase() + string.slice(1).toLowerCase();\n}\n\nexport function get(item : Object, path : string, def : mixed) : mixed {\n\n if (!path) {\n return def;\n }\n\n let pathParts = path.split('.');\n\n // Loop through each section of our key path\n\n for (let i = 0; i < pathParts.length; i++) {\n\n // If we have an object, we can get the key\n if (typeof item === 'object' && item !== null) {\n item = item[pathParts[i]];\n\n // Otherwise, we should return the default (undefined if not provided)\n } else {\n return def;\n }\n }\n\n // If our final result is undefined, we should return the default\n\n return item === undefined ? def : item;\n}\n\nexport function safeTimeout(method : Function, time : number) {\n\n let interval = safeInterval(() => {\n time -= 100;\n if (time <= 0) {\n interval.cancel();\n method();\n }\n }, 100);\n}\n\nexport function defineLazyProp(obj : Object | Array, key : string | number, getter : () => T) {\n if (Array.isArray(obj)) {\n if (typeof key !== 'number') {\n throw new TypeError(`Array key must be number`);\n }\n } else if (typeof obj === 'object' && obj !== null) {\n if (typeof key !== 'string') {\n throw new TypeError(`Object key must be string`);\n }\n }\n \n Object.defineProperty(obj, key, {\n configurable: true,\n enumerable: true,\n get: () => {\n // $FlowFixMe\n delete obj[key];\n let value = getter();\n // $FlowFixMe\n obj[key] = value;\n return value;\n },\n set: (value : T) => {\n // $FlowFixMe\n delete obj[key];\n // $FlowFixMe\n obj[key] = value;\n }\n });\n}\n\nexport function arrayFrom(item : Iterable) : Array { // eslint-disable-line no-undef\n return Array.prototype.slice.call(item);\n}\n\nexport function isObject(item : mixed) : boolean {\n return (typeof item === 'object' && item !== null);\n}\n\nexport function isObjectObject(obj : mixed) : boolean {\n return isObject(obj) && Object.prototype.toString.call(obj) === '[object Object]';\n}\n\nexport function isPlainObject(obj : mixed) : boolean {\n if (!isObjectObject(obj)) {\n return false;\n }\n\n // $FlowFixMe\n let constructor = obj.constructor;\n\n if (typeof constructor !== 'function') {\n return false;\n }\n\n let prototype = constructor.prototype;\n\n if (!isObjectObject(prototype)) {\n return false;\n }\n\n if (!prototype.hasOwnProperty('isPrototypeOf')) {\n return false;\n }\n\n return true;\n}\n\nexport function replaceObject | Object> (item : T, replacer : (mixed, string | number, string) => mixed, fullKey : string = '') : T {\n\n if (Array.isArray(item)) {\n let length = item.length;\n let result : Array = [];\n\n for (let i = 0; i < length; i++) {\n\n \n defineLazyProp(result, i, () => {\n let itemKey = fullKey ? `${ fullKey }.${ i }` : `${ i }`;\n let el = item[i];\n\n let child = replacer(el, i, itemKey);\n\n if (isPlainObject(child) || Array.isArray(child)) {\n // $FlowFixMe\n child = replaceObject(child, replacer, itemKey);\n }\n\n return child;\n });\n }\n\n // $FlowFixMe\n return result;\n } else if (isPlainObject(item)) {\n let result = {};\n\n for (let key in item) {\n if (!item.hasOwnProperty(key)) {\n continue;\n }\n\n defineLazyProp(result, key, () => {\n let itemKey = fullKey ? `${ fullKey }.${ key }` : `${ key }`;\n // $FlowFixMe\n let el = item[key];\n\n let child = replacer(el, key, itemKey);\n\n if (isPlainObject(child) || Array.isArray(child)) {\n // $FlowFixMe\n child = replaceObject(child, replacer, itemKey);\n }\n\n return child;\n });\n }\n\n // $FlowFixMe\n return result;\n } else {\n throw new Error(`Pass an object or array`);\n }\n}\n\n\nexport function copyProp(source : Object, target : Object, name : string, def : mixed) {\n if (source.hasOwnProperty(name)) {\n let descriptor = Object.getOwnPropertyDescriptor(source, name);\n // $FlowFixMe\n Object.defineProperty(target, name, descriptor);\n\n } else {\n target[name] = def;\n }\n}\n\ntype RegexResultType = {\n text : string,\n groups : Array,\n start : number,\n end : number,\n length : number,\n replace : (text : string) => string\n};\n\nexport function regex(pattern : string | RegExp, string : string, start : number = 0) : ?RegexResultType {\n\n if (typeof pattern === 'string') {\n // eslint-disable-next-line security/detect-non-literal-regexp\n pattern = new RegExp(pattern);\n }\n\n let result = string.slice(start).match(pattern);\n\n if (!result) {\n return;\n }\n\n // $FlowFixMe\n let index : number = result.index;\n let regmatch = result[0];\n\n return {\n text: regmatch,\n groups: result.slice(1),\n start: start + index,\n end: start + index + regmatch.length,\n length: regmatch.length,\n\n replace(text : string) : string {\n\n if (!regmatch) {\n return '';\n }\n\n return `${ regmatch.slice(0, start + index) }${ text }${ regmatch.slice(index + regmatch.length) }`;\n }\n };\n}\n\nexport function regexAll(pattern : string | RegExp, string : string) : Array {\n\n let matches = [];\n let start = 0;\n\n // eslint-disable-next-line no-constant-condition\n while (true) {\n let regmatch = regex(pattern, string, start);\n\n if (!regmatch) {\n break;\n }\n\n matches.push(regmatch);\n start = match.end;\n }\n\n return matches;\n}\n\nexport function isDefined(value : ?mixed) : boolean {\n return value !== null && value !== undefined;\n}\n\nexport function cycle(method : Function) : ZalgoPromise {\n return ZalgoPromise.try(method).then(() => cycle(method));\n}\n\nexport function debounce(method : (...args : Array) => T, time : number = 100) : (...args : Array) => void {\n\n let timeout;\n\n const debounceWrapper = function() {\n clearTimeout(timeout);\n\n timeout = setTimeout(() => {\n return method.apply(this, arguments);\n }, time);\n };\n\n return setFunctionName(debounceWrapper, `${ getFunctionName(method) }::debounced`);\n}\n\nexport function isRegex(item : mixed) : boolean {\n return Object.prototype.toString.call(item) === '[object RegExp]';\n}\n\ntype FunctionProxy = (method : T) => T;\n\n// eslint-disable-next-line flowtype/no-weak-types\nexport let weakMapMemoize : FunctionProxy<*> = (method : (arg : any) => R) : ((...args : Array) => R) => {\n\n let weakmap = new WeakMap();\n\n // eslint-disable-next-line flowtype/no-weak-types\n return function weakmapMemoized(arg : any) : R {\n return weakmap.getOrSet(arg, () => method.call(this, arg));\n };\n};\n\ntype FunctionPromiseProxy) => ZalgoPromise> = (T) => T;\n\n// eslint-disable-next-line flowtype/no-weak-types\nexport let weakMapMemoizePromise : FunctionPromiseProxy<*, *> = (method : (arg : any) => ZalgoPromise) : ((...args : Array) => ZalgoPromise) => {\n\n let weakmap = new WeakMap();\n\n // eslint-disable-next-line flowtype/no-weak-types\n return function weakmapMemoizedPromise(arg : any) : ZalgoPromise {\n return weakmap.getOrSet(arg, () =>\n method.call(this, arg).finally(() => {\n weakmap.delete(arg);\n })\n );\n };\n};\n\nexport function getOrSet(obj : O, key : string, getter : () => T) : T {\n if (obj.hasOwnProperty(key)) {\n return obj[key];\n }\n\n const val = getter();\n obj[key] = val;\n return val;\n}\n\nexport type CleanupType = {|\n set : (string, T) => T, // eslint-disable-line no-undef\n register : (Function) => void,\n all : () => ZalgoPromise\n|};\n\nexport function cleanup(obj : Object) : CleanupType {\n\n const tasks = [];\n let cleaned = false;\n\n return {\n set(name : string, item : T) : T {\n if (!cleaned) {\n obj[name] = item;\n this.register(() => {\n delete obj[name];\n });\n }\n return item;\n },\n\n register(method : Function) {\n if (cleaned) {\n method();\n } else {\n tasks.push(once(method));\n }\n },\n\n all() : ZalgoPromise {\n const results = [];\n cleaned = true;\n\n while (tasks.length) {\n const task = tasks.pop();\n results.push(task());\n }\n\n return ZalgoPromise.all(results).then(noop);\n }\n };\n}\n\nexport function tryCatch(fn : () => T) : {| result : T, error : void |} | {| result : void, error : mixed |} {\n let result;\n let error;\n\n try {\n result = fn();\n } catch (err) {\n error = err;\n }\n \n // $FlowFixMe\n return { result, error };\n}\n\nexport function removeFromArray>(arr : T, item : X) {\n const index = arr.indexOf(item);\n if (index !== -1) {\n arr.splice(index, 1);\n }\n}\n\nexport function assertExists(name : string, thing : void | null | T) : T {\n if (thing === null || typeof thing === 'undefined') {\n throw new Error(`Expected ${ name } to be present`);\n }\n \n return thing;\n}\n \nexport function unique(arr : $ReadOnlyArray) : $ReadOnlyArray {\n const result = {};\n for (const item of arr) {\n // eslint-disable-next-line const-immutable/no-mutation\n result[item] = true;\n }\n return Object.keys(result);\n}\n","/* @flow */\n\nexport const KEY_CODES = {\n ENTER: 13\n};\n","/* @flow */\n/* eslint max-lines: off */\n\nimport { ZalgoPromise } from 'zalgo-promise/src';\nimport { linkFrameWindow, isWindowClosed,\n type SameDomainWindowType, type CrossDomainWindowType } from 'cross-domain-utils/src';\nimport { WeakMap } from 'cross-domain-safe-weakmap/src';\n\nimport { inlineMemoize, noop, stringify, capitalizeFirstLetter,\n once, extend, safeInterval, uniqueID, arrayFrom } from './util';\nimport { isDevice } from './device';\nimport { KEY_CODES } from './constants';\nimport type { CancelableType } from './types';\n\ntype ElementRefType = string | HTMLElement;\n\nexport function isDocumentReady() : boolean {\n return Boolean(document.body) && document.readyState === 'complete';\n}\n\nexport function urlEncode(str : string) : string {\n return str.replace(/\\?/g, '%3F').replace(/&/g, '%26').replace(/#/g, '%23').replace(/\\+/g, '%2B');\n}\n\nexport function waitForWindowReady() : ZalgoPromise {\n return inlineMemoize(waitForWindowReady, () : ZalgoPromise => {\n return new ZalgoPromise(resolve => {\n if (isDocumentReady()) {\n resolve();\n }\n\n window.addEventListener('load', () => resolve());\n });\n });\n}\n\nexport function waitForDocumentReady() : ZalgoPromise {\n return inlineMemoize(waitForDocumentReady, () : ZalgoPromise => {\n return new ZalgoPromise(resolve => {\n\n if (isDocumentReady()) {\n return resolve();\n }\n\n let interval = setInterval(() => {\n if (isDocumentReady()) {\n clearInterval(interval);\n return resolve();\n }\n }, 10);\n });\n });\n}\n\nexport function waitForDocumentBody() : ZalgoPromise {\n return waitForDocumentReady().then(() => {\n if (document.body) {\n return document.body;\n }\n\n throw new Error('Document ready but document.body not present');\n });\n}\n\nexport function parseQuery(queryString : string) : Object {\n return inlineMemoize(parseQuery, () : Object => {\n let params = {};\n\n if (!queryString) {\n return params;\n }\n\n if (queryString.indexOf('=') === -1) {\n return params;\n }\n\n for (let pair of queryString.split('&')) {\n pair = pair.split('=');\n\n if (pair[0] && pair[1]) {\n params[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1]);\n }\n }\n\n return params;\n }, [ queryString ]);\n}\n\n\nexport function getQueryParam(name : string) : string {\n return parseQuery(window.location.search.slice(1))[name];\n}\n\nexport function urlWillRedirectPage(url : string) : boolean {\n\n if (url.indexOf('#') === -1) {\n return true;\n }\n\n if (url.indexOf('#') === 0) {\n return false;\n }\n\n if (url.split('#')[0] === window.location.href.split('#')[0]) {\n return false;\n }\n\n return true;\n}\n\nexport function formatQuery(obj : { [ string ] : string } = {}) : string {\n\n return Object.keys(obj).filter(key => {\n return typeof obj[key] === 'string';\n }).map(key => {\n return `${ urlEncode(key) }=${ urlEncode(obj[key]) }`;\n }).join('&');\n}\n\nexport function extendQuery(originalQuery : string, props : { [ string ] : string } = {}) : string {\n\n if (!props || !Object.keys(props).length) {\n return originalQuery;\n }\n\n return formatQuery({\n ...parseQuery(originalQuery),\n ...props\n });\n}\n\nexport function extendUrl(url : string, options : { query? : { [string] : string }, hash? : { [string] : string } } = {}) : string {\n\n let query = options.query || {};\n let hash = options.hash || {};\n\n let originalUrl;\n let originalQuery;\n let originalHash;\n\n [ originalUrl, originalHash ] = url.split('#');\n [ originalUrl, originalQuery ] = originalUrl.split('?');\n\n let queryString = extendQuery(originalQuery, query);\n let hashString = extendQuery(originalHash, hash);\n\n if (queryString) {\n originalUrl = `${ originalUrl }?${ queryString }`;\n }\n\n if (hashString) {\n originalUrl = `${ originalUrl }#${ hashString }`;\n }\n\n return originalUrl;\n}\n\nexport function redirect(url : string, win : CrossDomainWindowType = window) : ZalgoPromise {\n return new ZalgoPromise(resolve => {\n win.location = url;\n if (!urlWillRedirectPage(url)) {\n resolve();\n }\n });\n}\n\nexport function hasMetaViewPort() : boolean {\n let meta = document.querySelector('meta[name=viewport]');\n\n if (isDevice() && window.screen.width < 660 && !meta) {\n return false;\n }\n\n return true;\n}\n\nexport function isElementVisible(el : HTMLElement) : boolean {\n return Boolean(el.offsetWidth || el.offsetHeight || el.getClientRects().length);\n}\n\nexport function enablePerformance() : boolean {\n return inlineMemoize(enablePerformance, () : boolean => {\n /* eslint-disable compat/compat */\n return Boolean(\n window.performance &&\n performance.now &&\n performance.timing &&\n performance.timing.connectEnd &&\n performance.timing.navigationStart &&\n (Math.abs(performance.now() - Date.now()) > 1000) &&\n (performance.now() - (performance.timing.connectEnd - performance.timing.navigationStart)) > 0\n );\n /* eslint-enable compat/compat */\n });\n}\n\nexport function getPageRenderTime() : ZalgoPromise {\n return waitForDocumentReady().then(() => {\n\n if (!enablePerformance()) {\n return;\n }\n\n let timing = window.performance.timing;\n\n if (timing.connectEnd && timing.domInteractive) {\n return timing.domInteractive - timing.connectEnd;\n }\n });\n}\n\nexport function htmlEncode(html : string = '') : string {\n return html.toString()\n .replace(/&/g, '&')\n .replace(//g, '>')\n .replace(/\"/g, '"')\n .replace(/'/g, ''')\n .replace(/\\//g, '/');\n}\n\nexport function isBrowser() : boolean {\n return (typeof window !== 'undefined');\n}\n\nexport function querySelectorAll(selector : string, doc : HTMLElement = window.document) : Array {\n return Array.prototype.slice.call(doc.querySelectorAll(selector));\n}\n\nexport function onClick(element : HTMLElement, handler : (Event) => void) {\n element.addEventListener('touchstart', noop);\n element.addEventListener('click', handler);\n element.addEventListener('keypress', (event : Event) => {\n // $FlowFixMe\n if (event.keyCode === KEY_CODES.ENTER) {\n return handler(event);\n }\n });\n}\n\nexport function getScript({ host = window.location.host, path } : { host? : string, path : string }) : ?HTMLScriptElement {\n return inlineMemoize(getScript, () : ?HTMLScriptElement => {\n\n let url = `${ host }${ path }`;\n let scripts = Array.prototype.slice.call(document.getElementsByTagName('script'));\n\n for (let script of scripts) {\n if (!script.src) {\n continue;\n }\n\n let src = script.src.replace(/^https?:\\/\\//, '').split('?')[0];\n\n if (src === url) {\n return script;\n }\n }\n }, [ path ]);\n}\n\nexport function isLocalStorageEnabled() : boolean {\n return inlineMemoize(isLocalStorageEnabled, () => {\n try {\n if (typeof window === 'undefined') {\n return false;\n }\n\n if (window.localStorage) {\n let value = Math.random().toString();\n window.localStorage.setItem('__test__localStorage__', value);\n let result = window.localStorage.getItem('__test__localStorage__');\n window.localStorage.removeItem('__test__localStorage__');\n if (value === result) {\n return true;\n }\n }\n } catch (err) {\n // pass\n }\n return false;\n });\n}\n\nexport function getBrowserLocales() : Array<{ country? : string, lang : string }> {\n let nav = window.navigator;\n\n let locales = nav.languages\n ? Array.prototype.slice.apply(nav.languages)\n : [];\n\n if (nav.language) {\n locales.push(nav.language);\n }\n\n if (nav.userLanguage) {\n locales.push(nav.userLanguage);\n }\n\n return locales.map(locale => {\n\n if (locale && locale.match(/^[a-z]{2}[-_][A-Z]{2}$/)) {\n let [ lang, country ] = locale.split(/[-_]/);\n return { country, lang };\n }\n\n if (locale && locale.match(/^[a-z]{2}$/)) {\n return { lang: locale };\n }\n\n return null;\n\n }).filter(Boolean);\n}\n\n\nexport function appendChild(container : HTMLElement, child : HTMLElement | Text) {\n container.appendChild(child);\n}\n\nexport function isElement(element : mixed) : boolean {\n\n if (element instanceof window.Element) {\n return true;\n }\n\n if (element !== null && typeof element === 'object' && element.nodeType === 1 && typeof element.style === 'object' && typeof element.ownerDocument === 'object') {\n return true;\n }\n\n return false;\n}\n\nexport function getElementSafe(id : ElementRefType, doc : Document | HTMLElement = document) : ?HTMLElement {\n\n if (isElement(id)) {\n // $FlowFixMe\n return id;\n }\n\n if (typeof id === 'string') {\n return doc.querySelector(id);\n }\n}\n\nexport function getElement(id : ElementRefType, doc : Document | HTMLElement = document) : HTMLElement {\n\n let element = getElementSafe(id, doc);\n\n if (element) {\n return element;\n }\n\n throw new Error(`Can not find element: ${ stringify(id) }`);\n}\n\nexport function elementReady(id : ElementRefType) : ZalgoPromise {\n return new ZalgoPromise((resolve, reject) => {\n\n let name = stringify(id);\n let el = getElementSafe(id);\n\n if (el) {\n return resolve(el);\n }\n\n if (isDocumentReady()) {\n return reject(new Error(`Document is ready and element ${ name } does not exist`));\n }\n\n let interval = setInterval(() => {\n\n el = getElementSafe(id);\n\n if (el) {\n clearInterval(interval);\n return resolve(el);\n }\n\n if (isDocumentReady()) {\n clearInterval(interval);\n return reject(new Error(`Document is ready and element ${ name } does not exist`));\n }\n }, 10);\n });\n}\n\nexport function PopupOpenError(message : string) {\n this.message = message;\n}\n\nPopupOpenError.prototype = Object.create(Error.prototype);\n\ntype PopupOptions = {|\n name? : string,\n width? : number,\n height? : number,\n top? : number,\n left? : number,\n status? : 0 | 1,\n resizable? : 0 | 1,\n toolbar? : 0 | 1,\n menubar? : 0 | 1,\n scrollbars? : 0 | 1\n|};\n\nexport function popup(url : string, options? : PopupOptions) : CrossDomainWindowType {\n\n // $FlowFixMe\n options = options || {};\n\n let { width, height } = options;\n\n let top = 0;\n let left = 0;\n\n if (width) {\n if (window.outerWidth) {\n left = Math.round((window.outerWidth - width) / 2) + window.screenX;\n } else if (window.screen.width) {\n left = Math.round((window.screen.width - width) / 2);\n }\n }\n\n if (height) {\n if (window.outerHeight) {\n top = Math.round((window.outerHeight - height) / 2) + window.screenY;\n } else if (window.screen.height) {\n top = Math.round((window.screen.height - height) / 2);\n }\n }\n\n if (width && height) {\n options = {\n top,\n left,\n width,\n height,\n status: 1,\n toolbar: 0,\n menubar: 0,\n resizable: 1,\n scrollbars: 1,\n ...options\n };\n }\n\n let name = options.name || '';\n delete options.name;\n\n // eslint-disable-next-line array-callback-return\n let params = Object.keys(options).map(key => {\n // $FlowFixMe\n if (options[key] !== null && options[key] !== undefined) {\n return `${ key }=${ stringify(options[key]) }`;\n }\n }).filter(Boolean).join(',');\n\n let win;\n\n try {\n win = window.open(url, name, params, true);\n } catch (err) {\n throw new PopupOpenError(`Can not open popup window - ${ err.stack || err.message }`);\n }\n\n if (isWindowClosed(win)) {\n let err = new PopupOpenError(`Can not open popup window - blocked`);\n throw err;\n }\n\n window.addEventListener('unload', () => win.close());\n\n return win;\n}\n\n\nexport function writeToWindow(win : SameDomainWindowType, html : string) {\n try {\n win.document.open();\n win.document.write(html);\n win.document.close();\n } catch (err) {\n try {\n win.location = `javascript: document.open(); document.write(${ JSON.stringify(html) }); document.close();`;\n } catch (err2) {\n // pass\n }\n }\n}\n\nexport function writeElementToWindow(win : SameDomainWindowType, el : HTMLElement) {\n\n let tag = el.tagName.toLowerCase();\n\n if (tag !== 'html') {\n throw new Error(`Expected element to be html, got ${ tag }`);\n }\n\n let documentElement = win.document.documentElement;\n\n for (const child of arrayFrom(documentElement.children)) {\n documentElement.removeChild(child);\n }\n\n for (const child of arrayFrom(el.children)) {\n documentElement.appendChild(child);\n }\n}\n\nexport function setStyle(el : HTMLElement, styleText : string, doc : Document = window.document) {\n // $FlowFixMe\n if (el.styleSheet) {\n // $FlowFixMe\n el.styleSheet.cssText = styleText;\n } else {\n el.appendChild(doc.createTextNode(styleText));\n }\n}\n\nexport type ElementOptionsType = {\n style? : { [ string ] : string },\n id? : string,\n class? : ?Array,\n attributes? : { [ string ] : string },\n styleSheet? : ?string,\n html? : ?string\n};\n\nlet awaitFrameLoadPromises : WeakMap>;\n\nexport function awaitFrameLoad(frame : HTMLIFrameElement) : ZalgoPromise {\n awaitFrameLoadPromises = awaitFrameLoadPromises || new WeakMap();\n\n if (awaitFrameLoadPromises.has(frame)) {\n let promise = awaitFrameLoadPromises.get(frame);\n if (promise) {\n return promise;\n }\n }\n\n let promise = new ZalgoPromise((resolve, reject) => {\n frame.addEventListener('load', () => {\n linkFrameWindow(frame);\n resolve(frame);\n });\n\n frame.addEventListener('error', (err : Event) => {\n if (frame.contentWindow) {\n resolve(frame);\n } else {\n reject(err);\n }\n });\n });\n\n awaitFrameLoadPromises.set(frame, promise);\n\n return promise;\n}\n\nexport function awaitFrameWindow(frame : HTMLIFrameElement) : ZalgoPromise {\n return awaitFrameLoad(frame).then(loadedFrame => {\n\n if (!loadedFrame.contentWindow) {\n throw new Error(`Could not find window in iframe`);\n }\n\n return loadedFrame.contentWindow;\n });\n}\n\nexport function createElement(tag : string = 'div', options : ElementOptionsType = {}, container : ?HTMLElement) : HTMLElement {\n\n tag = tag.toLowerCase();\n let element = document.createElement(tag);\n\n if (options.style) {\n extend(element.style, options.style);\n }\n\n if (options.class) {\n element.className = options.class.join(' ');\n }\n\n if (options.id) {\n element.setAttribute('id', options.id);\n }\n\n if (options.attributes) {\n for (let key of Object.keys(options.attributes)) {\n element.setAttribute(key, options.attributes[key]);\n }\n }\n\n if (options.styleSheet) {\n setStyle(element, options.styleSheet);\n }\n\n if (container) {\n appendChild(container, element);\n }\n\n if (options.html) {\n if (tag === 'iframe') {\n // $FlowFixMe\n if (!container || !element.contentWindow) {\n throw new Error(`Iframe html can not be written unless container provided and iframe in DOM`);\n }\n\n // $FlowFixMe\n writeToWindow(element.contentWindow, options.html);\n\n } else {\n element.innerHTML = options.html;\n }\n }\n\n return element;\n}\n\n\nexport type IframeElementOptionsType = {\n style? : { [ string ] : string },\n class? : ?Array,\n attributes? : { [ string ] : string },\n styleSheet? : ?string,\n html? : ?string,\n url? : ?string\n};\n\nexport function iframe(options : IframeElementOptionsType = {}, container : ?HTMLElement) : HTMLIFrameElement {\n\n let attributes = options.attributes || {};\n let style = options.style || {};\n\n let frame = createElement('iframe', {\n attributes: {\n allowTransparency: 'true',\n ...attributes\n },\n style: {\n backgroundColor: 'transparent',\n border: 'none',\n ...style\n },\n html: options.html,\n class: options.class\n });\n\n const isIE = window.navigator.userAgent.match(/MSIE|Edge/i);\n \n if (!frame.hasAttribute('id')) {\n frame.setAttribute('id', uniqueID());\n }\n\n // $FlowFixMe\n awaitFrameLoad(frame);\n\n if (container) {\n let el = getElement(container);\n el.appendChild(frame);\n }\n\n if (options.url || isIE) {\n frame.setAttribute('src', options.url || 'about:blank');\n }\n\n // $FlowFixMe\n return frame;\n}\n\nexport function addEventListener(obj : HTMLElement, event : string, handler : (event : Event) => void) : CancelableType {\n obj.addEventListener(event, handler);\n return {\n cancel() {\n obj.removeEventListener(event, handler);\n }\n };\n}\n\nexport function bindEvents(element : HTMLElement, eventNames : Array, handler : (event : Event) => void) : CancelableType {\n\n handler = once(handler);\n\n for (let eventName of eventNames) {\n element.addEventListener(eventName, handler);\n }\n\n return {\n cancel: once(() => {\n for (let eventName of eventNames) {\n element.removeEventListener(eventName, handler);\n }\n })\n };\n}\n\nconst VENDOR_PREFIXES = [ 'webkit', 'moz', 'ms', 'o' ];\n\nexport function setVendorCSS(element : HTMLElement, name : string, value : string) {\n\n // $FlowFixMe\n element.style[name] = value;\n\n let capitalizedName = capitalizeFirstLetter(name);\n\n for (let prefix of VENDOR_PREFIXES) {\n // $FlowFixMe\n element.style[`${ prefix }${ capitalizedName }`] = value;\n }\n}\n\nconst ANIMATION_START_EVENTS = [ 'animationstart', 'webkitAnimationStart', 'oAnimationStart', 'MSAnimationStart' ];\nconst ANIMATION_END_EVENTS = [ 'animationend', 'webkitAnimationEnd', 'oAnimationEnd', 'MSAnimationEnd' ];\n\nexport function animate(element : ElementRefType, name : string, clean : (Function) => void, timeout : number = 1000) : ZalgoPromise {\n return new ZalgoPromise((resolve, reject) => {\n\n let el = getElement(element);\n\n if (!el) {\n return resolve();\n }\n\n let hasStarted = false;\n\n let startTimeout;\n let endTimeout;\n let startEvent;\n let endEvent;\n\n function cleanUp() {\n clearTimeout(startTimeout);\n clearTimeout(endTimeout);\n startEvent.cancel();\n endEvent.cancel();\n }\n\n startEvent = bindEvents(el, ANIMATION_START_EVENTS, event => {\n\n // $FlowFixMe\n if (event.target !== el || event.animationName !== name) {\n return;\n }\n\n clearTimeout(startTimeout);\n\n event.stopPropagation();\n\n startEvent.cancel();\n hasStarted = true;\n\n endTimeout = setTimeout(() => {\n cleanUp();\n resolve();\n }, timeout);\n });\n\n endEvent = bindEvents(el, ANIMATION_END_EVENTS, event => {\n\n // $FlowFixMe\n if (event.target !== el || event.animationName !== name) {\n return;\n }\n\n cleanUp();\n\n // $FlowFixMe\n if (typeof event.animationName === 'string' && event.animationName !== name) {\n return reject(`Expected animation name to be ${ name }, found ${ event.animationName }`);\n }\n\n return resolve();\n });\n\n setVendorCSS(el, 'animationName', name);\n\n startTimeout = setTimeout(() => {\n if (!hasStarted) {\n cleanUp();\n return resolve();\n }\n }, 200);\n\n if (clean) {\n clean(cleanUp);\n }\n });\n}\n\nconst STYLE = {\n\n DISPLAY: {\n NONE: 'none',\n BLOCK: 'block'\n },\n\n VISIBILITY: {\n VISIBLE: 'visible',\n HIDDEN: 'hidden'\n },\n\n IMPORTANT: 'important'\n};\n\nexport function makeElementVisible(element : HTMLElement) {\n element.style.setProperty('visibility', '');\n}\n\nexport function makeElementInvisible(element : HTMLElement) {\n element.style.setProperty('visibility', STYLE.VISIBILITY.HIDDEN, STYLE.IMPORTANT);\n}\n\n\nexport function showElement(element : HTMLElement) {\n element.style.setProperty('display', '');\n}\n\nexport function hideElement(element : HTMLElement) {\n element.style.setProperty('display', STYLE.DISPLAY.NONE, STYLE.IMPORTANT);\n}\n\nexport function destroyElement(element : HTMLElement) {\n if (element && element.parentNode) {\n element.parentNode.removeChild(element);\n }\n}\n\nexport function showAndAnimate(element : HTMLElement, name : string, clean : (Function) => void) : ZalgoPromise {\n let animation = animate(element, name, clean);\n showElement(element);\n return animation;\n}\n\nexport function animateAndHide(element : HTMLElement, name : string, clean : (Function) => void) : ZalgoPromise {\n return animate(element, name, clean).then(() => {\n hideElement(element);\n });\n}\n\nexport function addClass(element : HTMLElement, name : string) {\n element.classList.add(name);\n}\n\nexport function removeClass(element : HTMLElement, name : string) {\n element.classList.remove(name);\n}\n\nexport function isElementClosed(el : HTMLElement) : boolean {\n if (!el || !el.parentNode) {\n return true;\n }\n return false;\n}\n\nexport function watchElementForClose(element : HTMLElement, handler : () => mixed) : CancelableType {\n handler = once(handler);\n\n let interval;\n\n if (isElementClosed(element)) {\n handler();\n } else {\n interval = safeInterval(() => {\n if (isElementClosed(element)) {\n interval.cancel();\n handler();\n }\n }, 50);\n }\n\n return {\n cancel() {\n if (interval) {\n interval.cancel();\n }\n }\n };\n}\n\nexport function fixScripts(el : HTMLElement, doc : Document = window.document) {\n for (let script of querySelectorAll('script', el)) {\n let parentNode = script.parentNode;\n\n if (!parentNode) {\n continue;\n }\n\n let newScript = doc.createElement('script');\n newScript.text = script.textContent;\n parentNode.replaceChild(newScript, script);\n }\n}\n\ntype OnResizeOptions = {|\n width? : boolean,\n height? : boolean,\n interval? : number,\n win? : SameDomainWindowType\n|};\n\nexport function onResize(el : HTMLElement, handler : ({ width : number, height : number }) => void, { width = true, height = true, interval = 100, win = window } : OnResizeOptions = {}) : {} {\n let currentWidth = el.offsetWidth;\n let currentHeight = el.offsetHeight;\n\n handler({ width: currentWidth, height: currentHeight });\n\n let check = () => {\n let newWidth = el.offsetWidth;\n let newHeight = el.offsetHeight;\n\n if ((width && newWidth !== currentWidth) || (height && newHeight !== currentHeight)) {\n handler({ width: newWidth, height: newHeight });\n }\n\n currentWidth = newWidth;\n currentHeight = newHeight;\n };\n\n let observer;\n let timeout;\n\n if (typeof win.ResizeObserver !== 'undefined') {\n observer = new win.ResizeObserver(check);\n observer.observe(el);\n\n } else if (typeof win.MutationObserver !== 'undefined') {\n observer = new win.MutationObserver(check);\n observer.observe(el, {\n attributes: true,\n childList: true,\n subtree: true,\n characterData: false\n });\n win.addEventListener('resize', check);\n } else {\n let loop = () => {\n check();\n timeout = setTimeout(loop, interval);\n };\n loop();\n }\n\n return {\n cancel: () => {\n observer.disconnect();\n window.removeEventListener('resize', check);\n clearTimeout(timeout);\n }\n };\n}\n\nexport function getResourceLoadTime(url : string) : ?number {\n\n if (!enablePerformance()) {\n return;\n }\n\n if (!window.performance || typeof window.performance.getEntries !== 'function') {\n return;\n }\n\n const entries = window.performance.getEntries();\n\n for (let i = 0; i < entries.length; i++) {\n const entry = entries[i];\n\n if (entry && entry.name && entry.name.indexOf(url) === 0 && typeof entry.duration === 'number') {\n return Math.floor(entry.duration);\n }\n }\n}\n","/* @flow */\n\nimport { uniqueID, getGlobal, inlineMemoize } from './util';\nimport { isLocalStorageEnabled } from './dom';\n\ntype Getter = (handler : (Object) => T) => T;\n\nexport type Storage = {\n getState : Getter<*>,\n getID : () => string,\n getSessionState : Getter<*>,\n getSessionID : () => string\n};\n\nconst DEFAULT_SESSION_STORAGE = 20 * 60 * 1000;\n\nexport function getStorage({ name, lifetime = DEFAULT_SESSION_STORAGE } : { name : string, lifetime? : number }) : Storage {\n return inlineMemoize(getStorage, () => {\n const STORAGE_KEY = `__${ name }_storage__`;\n\n let accessedStorage;\n\n function getState(handler : (storage : Object) => T) : T {\n\n let localStorageEnabled = isLocalStorageEnabled();\n let storage;\n\n if (accessedStorage) {\n storage = accessedStorage;\n }\n\n if (!storage && localStorageEnabled) {\n let rawStorage = window.localStorage.getItem(STORAGE_KEY);\n\n if (rawStorage) {\n storage = JSON.parse(rawStorage);\n }\n }\n\n if (!storage) {\n storage = getGlobal()[STORAGE_KEY];\n }\n\n if (!storage) {\n storage = {\n id: uniqueID()\n };\n }\n\n if (!storage.id) {\n storage.id = uniqueID();\n }\n\n accessedStorage = storage;\n\n let result = handler(storage);\n\n if (localStorageEnabled) {\n window.localStorage.setItem(STORAGE_KEY, JSON.stringify(storage));\n } else {\n getGlobal()[STORAGE_KEY] = storage;\n }\n\n accessedStorage = null;\n\n return result;\n }\n\n function getID() : string {\n return getState(storage => storage.id);\n }\n\n function getSession(handler : (state : Object) => T) : T {\n return getState(storage => {\n\n let session = storage.__session__;\n let now = Date.now();\n\n if (session && ((now - session.created) > lifetime)) {\n session = null;\n }\n\n if (!session) {\n session = {\n guid: uniqueID(),\n created: now\n };\n }\n\n storage.__session__ = session;\n\n return handler(session);\n });\n }\n\n function getSessionState(handler : (state : Object) => T) : T {\n return getSession(session => {\n session.state = session.state || {};\n return handler(session.state);\n });\n }\n\n function getSessionID() : string {\n return getSession(session => session.guid);\n }\n\n return {\n getState,\n getID,\n getSessionState,\n getSessionID\n };\n }, [ { name, lifetime } ]);\n}\n","/* @flow */\n\nimport { noop } from './util';\nimport { getStorage } from './storage';\n\nfunction getBelterExperimentStorage() : Object {\n return getStorage({ name: 'belter_experiment' });\n}\n\nfunction isEventUnique(name : string) : boolean {\n return getBelterExperimentStorage().getSessionState(state => {\n state.loggedBeacons = state.loggedBeacons || [];\n\n if (state.loggedBeacons.indexOf(name) === -1) {\n state.loggedBeacons.push(name);\n return true;\n }\n\n return false;\n });\n}\n\nexport type Experiment = {\n isEnabled : () => boolean,\n isDisabled : () => boolean,\n getTreatment : () => string,\n log : (string, payload? : { [string] : ?string }) => Experiment,\n logStart : (payload? : { [string] : ?string }) => Experiment,\n logComplete : (payload? : { [string] : ?string }) => Experiment\n};\n\nfunction getThrottlePercentile(name : string) : number {\n return getBelterExperimentStorage().getState(state => {\n state.throttlePercentiles = state.throttlePercentiles || {};\n state.throttlePercentiles[name] = state.throttlePercentiles[name] || Math.floor(Math.random() * 100);\n return state.throttlePercentiles[name];\n });\n}\n\nconst THROTTLE_GROUP = {\n TEST: 'test',\n CONTROL: 'control',\n THROTTLE: 'throttle'\n};\n\ntype ExperimentOptions = {\n name : string,\n sample? : number,\n logTreatment? : ({ name : string, treatment : string, payload : { [string] : ?string } }) => void,\n logCheckpoint? : ({ name : string, treatment : string, checkpoint : string, payload : { [string] : ?string } }) => void\n};\n\nexport function experiment({ name, sample = 50, logTreatment = noop, logCheckpoint = noop } : ExperimentOptions) : Experiment {\n\n let throttle = getThrottlePercentile(name);\n\n let group;\n\n if (throttle < sample) {\n group = THROTTLE_GROUP.TEST;\n } else if ((sample >= 50) || ((sample <= throttle) && (throttle < (sample * 2)))) {\n group = THROTTLE_GROUP.CONTROL;\n } else {\n group = THROTTLE_GROUP.THROTTLE;\n }\n\n let treatment = `${ name }_${ group }`;\n\n let started = false;\n let forced = false;\n\n try {\n if (window.localStorage && window.localStorage.getItem(name)) {\n forced = true;\n }\n } catch (err) {\n // pass\n }\n\n return {\n\n isEnabled() : boolean {\n return (group === THROTTLE_GROUP.TEST) || forced;\n },\n\n isDisabled() : boolean {\n return (group !== THROTTLE_GROUP.TEST) && !forced;\n },\n\n getTreatment() : string {\n return treatment;\n },\n\n log(checkpoint : string, payload? : { [string] : ?string } = {}) : Experiment {\n if (!started) {\n return this;\n }\n\n if (isEventUnique(`${ name }_${ treatment }_${ JSON.stringify(payload) }`)) {\n logTreatment({ name, treatment, payload });\n }\n\n if (isEventUnique(`${ name }_${ treatment }_${ checkpoint }_${ JSON.stringify(payload) }`)) {\n logCheckpoint({ name, treatment, checkpoint, payload });\n }\n\n return this;\n },\n\n logStart(payload? : { [string] : ?string } = {}) : Experiment {\n started = true;\n return this.log(`start`, payload);\n },\n\n logComplete(payload? : { [string] : ?string } = {}) : Experiment {\n return this.log(`complete`, payload);\n }\n };\n}\n","/* @flow */\n\nimport { getGlobal } from './util';\n\nexport function getGlobalNameSpace({ name, version = 'latest' } : { name : string, version? : string }) : { get : (string, defValue? : T) => T } {\n\n let global = getGlobal();\n let globalKey = `__${ name }__${ version }_global__`;\n\n let namespace = global[globalKey] = global[globalKey] || {};\n\n return {\n get: (key : string, defValue? : T) : T => {\n // $FlowFixMe\n defValue = defValue || {};\n let item = namespace[key] = namespace[key] || defValue;\n return item;\n }\n };\n}\n","/* @flow */\n\nimport { ZalgoPromise } from 'zalgo-promise/src';\nimport { type SameDomainWindowType } from 'cross-domain-utils/src';\n\ntype RequestOptionsType = {\n url : string,\n method? : string,\n headers? : { [key : string] : string },\n json? : $ReadOnlyArray | Object,\n data? : { [key : string] : string },\n body? : string,\n win? : SameDomainWindowType,\n timeout? : number\n};\n\ntype ResponseType = {\n status : number,\n headers : { [string] : string },\n body : Object\n};\n\nconst HEADERS = {\n CONTENT_TYPE: 'content-type',\n ACCEPT: 'accept'\n};\n\nlet headerBuilders = [];\n\nfunction parseHeaders(rawHeaders : string = '') : { [string] : string } {\n let result = {};\n for (let line of rawHeaders.trim().split('\\n')) {\n let [ key, ...values ] = line.split(':');\n result[key.toLowerCase()] = values.join(':').trim();\n }\n return result;\n}\n\nexport function request({ url, method = 'get', headers = {}, json, data, body, win = window, timeout = 0 } : RequestOptionsType) : ZalgoPromise {\n return new ZalgoPromise((resolve, reject) => {\n\n if ((json && data) || (json && body) || (data && json)) {\n throw new Error(`Only options.json or options.data or options.body should be passed`);\n }\n\n let normalizedHeaders = {};\n\n for (let key of Object.keys(headers)) {\n normalizedHeaders[key.toLowerCase()] = headers[key];\n }\n\n if (json) {\n normalizedHeaders[HEADERS.CONTENT_TYPE] = normalizedHeaders[HEADERS.CONTENT_TYPE] || 'application/json';\n } else if (data || body) {\n normalizedHeaders[HEADERS.CONTENT_TYPE] = normalizedHeaders[HEADERS.CONTENT_TYPE] || 'application/x-www-form-urlencoded; charset=utf-8';\n }\n\n normalizedHeaders[HEADERS.ACCEPT] = normalizedHeaders[HEADERS.ACCEPT] || 'application/json';\n\n for (let headerBuilder of headerBuilders) {\n let builtHeaders = headerBuilder();\n\n for (let key of Object.keys(builtHeaders)) {\n normalizedHeaders[key.toLowerCase()] = builtHeaders[key];\n }\n }\n\n let xhr = new win.XMLHttpRequest();\n\n xhr.addEventListener('load', function xhrLoad() : void {\n\n let responseHeaders = parseHeaders(this.getAllResponseHeaders());\n\n if (!this.status) {\n return reject(new Error(`Request to ${ method.toLowerCase() } ${ url } failed: no response status code.`));\n }\n \n let contentType = responseHeaders['content-type'];\n let isJSON = contentType && (contentType.indexOf('application/json') === 0 || contentType.indexOf('text/json') === 0);\n let responseBody = this.responseText;\n\n try {\n responseBody = JSON.parse(responseBody);\n } catch (err) {\n if (isJSON) {\n return reject(new Error(`Invalid json: ${ this.responseText }.`));\n }\n }\n\n let res = {\n status: this.status,\n headers: responseHeaders,\n body: responseBody\n };\n\n return resolve(res);\n\n }, false);\n\n xhr.addEventListener('error', (evt) => {\n reject(new Error(`Request to ${ method.toLowerCase() } ${ url } failed: ${ evt.toString() }.`));\n }, false);\n\n xhr.open(method, url, true);\n\n for (let key in normalizedHeaders) {\n if (normalizedHeaders.hasOwnProperty(key)) {\n xhr.setRequestHeader(key, normalizedHeaders[key]);\n }\n }\n\n if (json) {\n body = JSON.stringify(json);\n } else if (data) {\n body = Object.keys(data).map(key => {\n return `${ encodeURIComponent(key) }=${ data ? encodeURIComponent(data[key]) : '' }`;\n }).join('&');\n }\n\n xhr.timeout = timeout;\n xhr.ontimeout = function xhrTimeout() {\n reject(new Error(`Request to ${ method.toLowerCase() } ${ url } has timed out`));\n };\n\n xhr.send(body);\n });\n}\n\nexport function addHeaderBuilder(method : () => { [string] : string }) {\n headerBuilders.push(method);\n}\n","/* @flow */\n\n// export something to force webpack to see this as an ES module\nexport const TYPES = true;\n\ndeclare var __TEST__ : boolean;\n\nexport type JSONPrimitive = string | boolean | number;\nexport type JSONObject = { [string] : JSONPrimitive | JSONObject } | Array;\nexport type JSONType = JSONObject | JSONPrimitive;\n\nexport type CancelableType = {\n cancel : () => void\n};\n","/* @flow */\n\nimport { memoize, promisify } from './util';\n\nexport function memoized(target : Object, name : string, descriptor : Object) {\n descriptor.value = memoize(descriptor.value, { name, thisNamespace: true });\n}\n\nexport function promise(target : Object, name : string, descriptor : Object) {\n descriptor.value = promisify(descriptor.value, { name });\n}\n","/* @flow */\n\nexport function isPerc(str : string) : boolean {\n return typeof str === 'string' && (/^[0-9]+%$/).test(str);\n}\n\nexport function isPx(str : string) : boolean {\n return typeof str === 'string' && (/^[0-9]+px$/).test(str);\n}\n\nexport function toNum(val : string | number) : number {\n\n if (typeof val === 'number') {\n return val;\n }\n\n let match = val.match(/^([0-9]+)(px|%)$/);\n\n if (!match) {\n throw new Error(`Could not match css value from ${ val }`);\n }\n\n return parseInt(match[1], 10);\n}\n\nexport function toPx(val : number | string) : string {\n return `${ toNum(val) }px`;\n}\n\nexport function toCSS(val : number | string) : string {\n\n if (typeof val === 'number') {\n return toPx(val);\n }\n\n return isPerc(val) ? val : toPx(val);\n}\n\nexport function percOf(num : number, perc : string) : number {\n return parseInt(num * toNum(perc) / 100, 10);\n}\n\nexport function normalizeDimension(dim : string | number, max : number) : number {\n if (typeof dim === 'number') {\n return dim;\n } else if (isPerc(dim)) {\n return percOf(max, dim);\n } else if (isPx(dim)) {\n return toNum(dim);\n } else {\n throw new Error(`Can not normalize dimension: ${ dim }`);\n }\n}\n","/* @flow */\n\nimport { ZalgoPromise } from 'zalgo-promise/src';\n\nimport { noop, tryCatch, removeFromArray } from './util';\n\ntype Prom = Promise | ZalgoPromise; // eslint-disable-line no-restricted-globals, promise/no-native\n\ntype Handler = >(name : string, fn? : (...args : A) => T) => (...args : A) => T; // eslint-disable-line no-undef\ntype Wrapper = ({ expect : Handler, avoid : Handler, expectError : Handler, error : Handler }) => (Prom | void);\n\nexport function wrapPromise(method : Wrapper, { timeout = 5000 } : { timeout? : number } = {}) : ZalgoPromise {\n let expected : Array = [];\n let promises : Array> = [];\n\n let timer = setTimeout(() => {\n if (expected.length) {\n promises.push(ZalgoPromise.asyncReject(new Error(`Expected ${ expected[0] } to be called`)));\n }\n }, timeout);\n\n let expect : Handler = (name, fn = noop) => {\n expected.push(name);\n \n // $FlowFixMe\n return function expectWrapper(...args) : * {\n removeFromArray(expected, name);\n\n // $FlowFixMe\n let { result, error } = tryCatch(() => fn.call(this, ...args));\n\n if (error) {\n promises.push(ZalgoPromise.asyncReject(error));\n throw error;\n }\n\n promises.push(ZalgoPromise.resolve(result));\n return result;\n };\n };\n\n let avoid : Handler = (name : string, fn = noop) => {\n\n // $FlowFixMe\n return function avoidWrapper(...args) : * {\n promises.push(ZalgoPromise.asyncReject(new Error(`Expected ${ name } to not be called`)));\n // $FlowFixMe\n return fn.call(this, ...args);\n };\n };\n\n let expectError : Handler = (name, fn = noop) => {\n expected.push(name);\n\n // $FlowFixMe\n return function expectErrorWrapper(...args) : * {\n removeFromArray(expected, name);\n\n // $FlowFixMe\n let { result, error } = tryCatch(() => fn.call(this, ...args));\n\n if (error) {\n throw error;\n }\n\n promises.push(ZalgoPromise.resolve(result).then(() => {\n throw new Error(`Expected ${ name } to throw an error`);\n }, noop));\n return result;\n };\n };\n\n promises.push(ZalgoPromise.try(() => method({ expect, avoid, expectError, error: avoid })));\n\n let drain = () => {\n return ZalgoPromise.try(() => {\n if (promises.length) {\n return promises.pop();\n }\n }).then(() => {\n if (promises.length) {\n return drain();\n }\n if (expected.length) {\n return ZalgoPromise.delay(10).then(drain);\n }\n });\n };\n\n return drain().then(() => {\n clearTimeout(timer);\n });\n}\n","/* @flow */\n\nexport * from './device';\nexport * from './dom';\nexport * from './experiment';\nexport * from './global';\nexport * from './storage';\nexport * from './util';\nexport * from './http';\nexport * from './types';\nexport * from './decorators';\nexport * from './css';\nexport * from './test';\n","/* @flow */\n\nexport const LOG_LEVEL = {\n DEBUG: ('debug' : 'debug'),\n INFO: ('info' : 'info'),\n WARN: ('warn' : 'warn'),\n ERROR: ('error' : 'error')\n};\n\nexport const PROTOCOL = {\n FILE: 'file:'\n};\n","/* @flow */\n\nimport { LOG_LEVEL } from './constants';\n\nexport const AUTO_FLUSH_LEVEL = [ LOG_LEVEL.WARN, LOG_LEVEL.ERROR ];\n\nexport const LOG_LEVEL_PRIORITY = [ LOG_LEVEL.ERROR, LOG_LEVEL.WARN, LOG_LEVEL.INFO, LOG_LEVEL.DEBUG ];\n\nexport const FLUSH_INTERVAL = 60 * 1000;\n\nexport const DEFAULT_LOG_LEVEL = __DEBUG__ ? LOG_LEVEL.DEBUG : LOG_LEVEL.WARN;\n","/* @flow */\n\nimport { ZalgoPromise } from 'zalgo-promise/src';\nimport { request, isBrowser, promiseDebounce, noop, safeInterval, objFilter } from 'belter/src';\n\nimport { DEFAULT_LOG_LEVEL, LOG_LEVEL_PRIORITY, AUTO_FLUSH_LEVEL, FLUSH_INTERVAL } from './config';\nimport { LOG_LEVEL, PROTOCOL } from './constants';\n\ntype Payload = { [string] : string };\ntype Transport = ({ url : string, method : string, headers : Payload, json : Object }) => ZalgoPromise;\n\ntype LoggerOptions = {|\n url : string,\n prefix? : string,\n logLevel? : $Values,\n transport? : Transport,\n flushInterval? : number\n|};\n\ntype ClientPayload = { [string] : ?string };\ntype Log = (name : string, payload? : ClientPayload) => LoggerType; // eslint-disable-line no-use-before-define\ntype Track = (payload : ClientPayload) => LoggerType; // eslint-disable-line no-use-before-define\n\ntype Builder = (Payload) => ClientPayload;\ntype AddBuilder = (Builder) => LoggerType; // eslint-disable-line no-use-before-define\n\nexport type LoggerType = {|\n debug : Log,\n info : Log,\n warn : Log,\n error : Log,\n\n track : Track,\n\n flush : () => ZalgoPromise,\n immediateFlush : () => ZalgoPromise,\n\n addPayloadBuilder : AddBuilder,\n addMetaBuilder : AddBuilder,\n addTrackingBuilder : AddBuilder,\n addHeaderBuilder : AddBuilder,\n\n setTransport : (Transport) => LoggerType\n|};\n\nfunction httpTransport({ url, method, headers, json } : { url : string, method : string, headers : { [string] : string }, json : Object }) : ZalgoPromise {\n return request({ url, method, headers, json }).then(noop);\n}\n\nfunction extendIfDefined(target : { [string] : string }, source : { [string] : ?string }) {\n for (const key in source) {\n if (source.hasOwnProperty(key) && source[key] && !target[key]) {\n target[key] = source[key];\n }\n }\n}\n\nexport function Logger({ url, prefix, logLevel = DEFAULT_LOG_LEVEL, transport = httpTransport, flushInterval = FLUSH_INTERVAL } : LoggerOptions) : LoggerType {\n\n let events : Array<{ level : $Values, event : string, payload : Payload }> = [];\n let tracking : Array = [];\n\n const payloadBuilders : Array = [];\n const metaBuilders : Array = [];\n const trackingBuilders : Array = [];\n const headerBuilders : Array = [];\n\n function print(level : $Values, event : string, payload : Payload) {\n\n if (!isBrowser() || !window.console || !window.console.log) {\n return;\n }\n\n if (LOG_LEVEL_PRIORITY.indexOf(level) > LOG_LEVEL_PRIORITY.indexOf(logLevel)) {\n return;\n }\n\n const args = [ event ];\n\n args.push(payload);\n\n if (payload.error || payload.warning) {\n args.push('\\n\\n', payload.error || payload.warning);\n }\n\n try {\n if (window.console[level] && window.console[level].apply) {\n window.console[level].apply(window.console, args);\n } else if (window.console.log && window.console.log.apply) {\n window.console.log.apply(window.console, args);\n }\n } catch (err) {\n // pass\n }\n }\n\n function immediateFlush() : ZalgoPromise {\n return ZalgoPromise.try(() => {\n if (!isBrowser() || window.location.protocol === PROTOCOL.FILE) {\n return;\n }\n\n if (!events.length && !tracking.length) {\n return;\n }\n\n const meta = {};\n for (const builder of metaBuilders) {\n extendIfDefined(meta, builder(meta));\n }\n\n const headers = {};\n for (const builder of headerBuilders) {\n extendIfDefined(headers, builder(headers));\n }\n\n const req = transport({\n method: 'POST',\n url,\n headers,\n json: {\n events,\n meta,\n tracking\n }\n });\n\n events = [];\n tracking = [];\n\n return req.then(noop);\n });\n }\n\n const flush = promiseDebounce(immediateFlush);\n\n function enqueue(level : $Values, event : string, payload : Payload) {\n\n events.push({\n level,\n event,\n payload\n });\n\n if (AUTO_FLUSH_LEVEL.indexOf(level) !== -1) {\n flush();\n }\n }\n\n function log(level : $Values, event : string, payload = {}) : LoggerType {\n\n if (!isBrowser()) {\n return logger; // eslint-disable-line no-use-before-define\n }\n\n if (prefix) {\n event = `${ prefix }_${ event }`;\n }\n\n const logPayload : Payload = {\n ...objFilter(payload),\n timestamp: Date.now().toString()\n };\n\n for (const builder of payloadBuilders) {\n extendIfDefined(logPayload, builder(logPayload));\n }\n\n enqueue(level, event, logPayload);\n print(level, event, logPayload);\n\n return logger; // eslint-disable-line no-use-before-define\n }\n\n function addBuilder(builders, builder) : LoggerType {\n builders.push(builder);\n return logger; // eslint-disable-line no-use-before-define\n }\n\n function addPayloadBuilder(builder) : LoggerType {\n return addBuilder(payloadBuilders, builder);\n }\n\n function addMetaBuilder(builder) : LoggerType {\n return addBuilder(metaBuilders, builder);\n }\n\n function addTrackingBuilder(builder) : LoggerType {\n return addBuilder(trackingBuilders, builder);\n }\n\n function addHeaderBuilder(builder) : LoggerType {\n return addBuilder(headerBuilders, builder);\n }\n\n function debug(event, payload) : LoggerType {\n return log(LOG_LEVEL.DEBUG, event, payload);\n }\n\n function info(event, payload) : LoggerType {\n return log(LOG_LEVEL.INFO, event, payload);\n }\n\n function warn(event, payload) : LoggerType {\n return log(LOG_LEVEL.WARN, event, payload);\n }\n\n function error(event, payload) : LoggerType {\n return log(LOG_LEVEL.ERROR, event, payload);\n }\n\n function track(payload = {}) : LoggerType {\n if (!isBrowser()) {\n return logger; // eslint-disable-line no-use-before-define\n }\n\n const trackingPayload : Payload = objFilter(payload);\n\n for (const builder of trackingBuilders) {\n extendIfDefined(trackingPayload, builder(trackingPayload));\n }\n\n print(LOG_LEVEL.DEBUG, 'track', trackingPayload);\n tracking.push(trackingPayload);\n\n return logger; // eslint-disable-line no-use-before-define\n }\n\n function setTransport(newTransport : Transport) : LoggerType {\n transport = newTransport;\n return logger; // eslint-disable-line no-use-before-define\n }\n\n if (isBrowser()) {\n safeInterval(flush, flushInterval);\n }\n\n const logger = {\n debug,\n info,\n warn,\n error,\n track,\n flush,\n immediateFlush,\n addPayloadBuilder,\n addMetaBuilder,\n addTrackingBuilder,\n addHeaderBuilder,\n setTransport\n };\n\n return logger;\n}\n","/* @flow */\n\nexport * from './logger';\nexport * from './constants';\n"],"sourceRoot":""} \ No newline at end of file diff --git a/dist/beaver-logger.lite.js b/dist/beaver-logger.lite.js deleted file mode 100644 index c1ec42f..0000000 --- a/dist/beaver-logger.lite.js +++ /dev/null @@ -1,4893 +0,0 @@ -(function webpackUniversalModuleDefinition(root, factory) { - if(typeof exports === 'object' && typeof module === 'object') - module.exports = factory(); - else if(typeof define === 'function' && define.amd) - define("beaver", [], factory); - else if(typeof exports === 'object') - exports["beaver"] = factory(); - else - root["beaver"] = factory(); -})((typeof self !== 'undefined' ? self : this), function() { -return /******/ (function(modules) { // webpackBootstrap -/******/ // The module cache -/******/ var installedModules = {}; -/******/ -/******/ // The require function -/******/ function __webpack_require__(moduleId) { -/******/ -/******/ // Check if module is in cache -/******/ if(installedModules[moduleId]) { -/******/ return installedModules[moduleId].exports; -/******/ } -/******/ // Create a new module (and put it into the cache) -/******/ var module = installedModules[moduleId] = { -/******/ i: moduleId, -/******/ l: false, -/******/ exports: {} -/******/ }; -/******/ -/******/ // Execute the module function -/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); -/******/ -/******/ // Flag the module as loaded -/******/ module.l = true; -/******/ -/******/ // Return the exports of the module -/******/ return module.exports; -/******/ } -/******/ -/******/ -/******/ // expose the modules object (__webpack_modules__) -/******/ __webpack_require__.m = modules; -/******/ -/******/ // expose the module cache -/******/ __webpack_require__.c = installedModules; -/******/ -/******/ // define getter function for harmony exports -/******/ __webpack_require__.d = function(exports, name, getter) { -/******/ if(!__webpack_require__.o(exports, name)) { -/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); -/******/ } -/******/ }; -/******/ -/******/ // define __esModule on exports -/******/ __webpack_require__.r = function(exports) { -/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { -/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); -/******/ } -/******/ Object.defineProperty(exports, '__esModule', { value: true }); -/******/ }; -/******/ -/******/ // create a fake namespace object -/******/ // mode & 1: value is a module id, require it -/******/ // mode & 2: merge all properties of value into the ns -/******/ // mode & 4: return value when already ns object -/******/ // mode & 8|1: behave like require -/******/ __webpack_require__.t = function(value, mode) { -/******/ if(mode & 1) value = __webpack_require__(value); -/******/ if(mode & 8) return value; -/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; -/******/ var ns = Object.create(null); -/******/ __webpack_require__.r(ns); -/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); -/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); -/******/ return ns; -/******/ }; -/******/ -/******/ // getDefaultExport function for compatibility with non-harmony modules -/******/ __webpack_require__.n = function(module) { -/******/ var getter = module && module.__esModule ? -/******/ function getDefault() { return module['default']; } : -/******/ function getModuleExports() { return module; }; -/******/ __webpack_require__.d(getter, 'a', getter); -/******/ return getter; -/******/ }; -/******/ -/******/ // Object.prototype.hasOwnProperty.call -/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; -/******/ -/******/ // __webpack_public_path__ -/******/ __webpack_require__.p = ""; -/******/ -/******/ -/******/ // Load entry module and return exports -/******/ return __webpack_require__(__webpack_require__.s = 0); -/******/ }) -/************************************************************************/ -/******/ ([ -/* 0 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); - -// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/extends.js -function _extends() { - _extends = Object.assign || function (target) { - for (var i = 1; i < arguments.length; i++) { - var source = arguments[i]; - - for (var key in source) { - if (Object.prototype.hasOwnProperty.call(source, key)) { - target[key] = source[key]; - } - } - } - - return target; - }; - - return _extends.apply(this, arguments); -} -// CONCATENATED MODULE: ./node_modules/zalgo-promise/src/utils.js -function utils_isPromise(item) { - try { - if (!item) { - return false; - } - - if (typeof Promise !== 'undefined' && item instanceof Promise) { - return true; - } - - if (typeof window !== 'undefined' && typeof window.Window === 'function' && item instanceof window.Window) { - return false; - } - - if (typeof window !== 'undefined' && typeof window.constructor === 'function' && item instanceof window.constructor) { - return false; - } - - var _toString = {}.toString; - - if (_toString) { - var name = _toString.call(item); - - if (name === '[object Window]' || name === '[object global]' || name === '[object DOMWindow]') { - return false; - } - } - - if (typeof item.then === 'function') { - return true; - } - } catch (err) { - return false; - } - - return false; -} -// CONCATENATED MODULE: ./node_modules/zalgo-promise/src/exceptions.js -var dispatchedErrors = []; -var possiblyUnhandledPromiseHandlers = []; -function dispatchPossiblyUnhandledError(err, promise) { - if (dispatchedErrors.indexOf(err) !== -1) { - return; - } - - dispatchedErrors.push(err); - setTimeout(function () { - if (false) {} - - throw err; - }, 1); - - for (var j = 0; j < possiblyUnhandledPromiseHandlers.length; j++) { - // $FlowFixMe - possiblyUnhandledPromiseHandlers[j](err, promise); - } -} -function exceptions_onPossiblyUnhandledException(handler) { - possiblyUnhandledPromiseHandlers.push(handler); - return { - cancel: function cancel() { - possiblyUnhandledPromiseHandlers.splice(possiblyUnhandledPromiseHandlers.indexOf(handler), 1); - } - }; -} -// CONCATENATED MODULE: ./node_modules/zalgo-promise/src/flush.js -var activeCount = 0; -var flushPromise; - -function flushActive() { - if (!activeCount && flushPromise) { - var promise = flushPromise; - flushPromise = null; - promise.resolve(); - } -} - -function startActive() { - activeCount += 1; -} -function endActive() { - activeCount -= 1; - flushActive(); -} -function awaitActive(Zalgo) { - // eslint-disable-line no-undef - var promise = flushPromise = flushPromise || new Zalgo(); - flushActive(); - return promise; -} -// CONCATENATED MODULE: ./node_modules/zalgo-promise/src/promise.js - - - -var promise_ZalgoPromise = -/*#__PURE__*/ -function () { - function ZalgoPromise(handler) { - var _this = this; - - this.resolved = void 0; - this.rejected = void 0; - this.errorHandled = void 0; - this.value = void 0; - this.error = void 0; - this.handlers = void 0; - this.dispatching = void 0; - this.stack = void 0; - this.resolved = false; - this.rejected = false; - this.errorHandled = false; - this.handlers = []; - - if (handler) { - var _result; - - var _error; - - var resolved = false; - var rejected = false; - var isAsync = false; - startActive(); - - try { - handler(function (res) { - if (isAsync) { - _this.resolve(res); - } else { - resolved = true; - _result = res; - } - }, function (err) { - if (isAsync) { - _this.reject(err); - } else { - rejected = true; - _error = err; - } - }); - } catch (err) { - endActive(); - this.reject(err); - return; - } - - endActive(); - isAsync = true; - - if (resolved) { - // $FlowFixMe - this.resolve(_result); - } else if (rejected) { - this.reject(_error); - } - } - - if (false) {} - } - - var _proto = ZalgoPromise.prototype; - - _proto.resolve = function resolve(result) { - if (this.resolved || this.rejected) { - return this; - } - - if (utils_isPromise(result)) { - throw new Error('Can not resolve promise with another promise'); - } - - this.resolved = true; - this.value = result; - this.dispatch(); - return this; - }; - - _proto.reject = function reject(error) { - var _this2 = this; - - if (this.resolved || this.rejected) { - return this; - } - - if (utils_isPromise(error)) { - throw new Error('Can not reject promise with another promise'); - } - - if (!error) { - // $FlowFixMe - var _err = error && typeof error.toString === 'function' ? error.toString() : Object.prototype.toString.call(error); - - error = new Error("Expected reject to be called with Error, got " + _err); - } - - this.rejected = true; - this.error = error; - - if (!this.errorHandled) { - setTimeout(function () { - if (!_this2.errorHandled) { - dispatchPossiblyUnhandledError(error, _this2); - } - }, 1); - } - - this.dispatch(); - return this; - }; - - _proto.asyncReject = function asyncReject(error) { - this.errorHandled = true; - this.reject(error); - return this; - }; - - _proto.dispatch = function dispatch() { - var dispatching = this.dispatching, - resolved = this.resolved, - rejected = this.rejected, - handlers = this.handlers; - - if (dispatching) { - return; - } - - if (!resolved && !rejected) { - return; - } - - this.dispatching = true; - startActive(); - - var chain = function chain(firstPromise, secondPromise) { - return firstPromise.then(function (res) { - secondPromise.resolve(res); - }, function (err) { - secondPromise.reject(err); - }); - }; - - for (var i = 0; i < handlers.length; i++) { - var _handlers$i = handlers[i], - onSuccess = _handlers$i.onSuccess, - onError = _handlers$i.onError, - promise = _handlers$i.promise; - - var _result2 = void 0; - - if (resolved) { - try { - _result2 = onSuccess ? onSuccess(this.value) : this.value; - } catch (err) { - promise.reject(err); - continue; - } - } else if (rejected) { - if (!onError) { - promise.reject(this.error); - continue; - } - - try { - _result2 = onError(this.error); - } catch (err) { - promise.reject(err); - continue; - } - } - - if (_result2 instanceof ZalgoPromise && (_result2.resolved || _result2.rejected)) { - if (_result2.resolved) { - promise.resolve(_result2.value); - } else { - promise.reject(_result2.error); - } - - _result2.errorHandled = true; - } else if (utils_isPromise(_result2)) { - if (_result2 instanceof ZalgoPromise && (_result2.resolved || _result2.rejected)) { - if (_result2.resolved) { - promise.resolve(_result2.value); - } else { - promise.reject(_result2.error); - } - } else { - // $FlowFixMe - chain(_result2, promise); - } - } else { - promise.resolve(_result2); - } - } - - handlers.length = 0; - this.dispatching = false; - endActive(); - }; - - _proto.then = function then(onSuccess, onError) { - if (onSuccess && typeof onSuccess !== 'function' && !onSuccess.call) { - throw new Error('Promise.then expected a function for success handler'); - } - - if (onError && typeof onError !== 'function' && !onError.call) { - throw new Error('Promise.then expected a function for error handler'); - } - - var promise = new ZalgoPromise(); - this.handlers.push({ - promise: promise, - onSuccess: onSuccess, - onError: onError - }); - this.errorHandled = true; - this.dispatch(); - return promise; - }; - - _proto.catch = function _catch(onError) { - return this.then(undefined, onError); - }; - - _proto.finally = function _finally(onFinally) { - if (onFinally && typeof onFinally !== 'function' && !onFinally.call) { - throw new Error('Promise.finally expected a function'); - } - - return this.then(function (result) { - return ZalgoPromise.try(onFinally).then(function () { - return result; - }); - }, function (err) { - return ZalgoPromise.try(onFinally).then(function () { - throw err; - }); - }); - }; - - _proto.timeout = function timeout(time, err) { - var _this3 = this; - - if (this.resolved || this.rejected) { - return this; - } - - var timeout = setTimeout(function () { - if (_this3.resolved || _this3.rejected) { - return; - } - - _this3.reject(err || new Error("Promise timed out after " + time + "ms")); - }, time); - return this.then(function (result) { - clearTimeout(timeout); - return result; - }); - } // $FlowFixMe - ; - - _proto.toPromise = function toPromise() { - // $FlowFixMe - if (typeof Promise === 'undefined') { - throw new TypeError("Could not find Promise"); - } // $FlowFixMe - - - return Promise.resolve(this); // eslint-disable-line compat/compat - }; - - ZalgoPromise.resolve = function resolve(value) { - if (value instanceof ZalgoPromise) { - return value; - } - - if (utils_isPromise(value)) { - // $FlowFixMe - return new ZalgoPromise(function (resolve, reject) { - return value.then(resolve, reject); - }); - } - - return new ZalgoPromise().resolve(value); - }; - - ZalgoPromise.reject = function reject(error) { - return new ZalgoPromise().reject(error); - }; - - ZalgoPromise.asyncReject = function asyncReject(error) { - return new ZalgoPromise().asyncReject(error); - }; - - ZalgoPromise.all = function all(promises) { - // eslint-disable-line no-undef - var promise = new ZalgoPromise(); - var count = promises.length; - var results = []; - - if (!count) { - promise.resolve(results); - return promise; - } - - var chain = function chain(i, firstPromise, secondPromise) { - return firstPromise.then(function (res) { - results[i] = res; - count -= 1; - - if (count === 0) { - promise.resolve(results); - } - }, function (err) { - secondPromise.reject(err); - }); - }; - - for (var i = 0; i < promises.length; i++) { - var prom = promises[i]; - - if (prom instanceof ZalgoPromise) { - if (prom.resolved) { - results[i] = prom.value; - count -= 1; - continue; - } - } else if (!utils_isPromise(prom)) { - results[i] = prom; - count -= 1; - continue; - } - - chain(i, ZalgoPromise.resolve(prom), promise); - } - - if (count === 0) { - promise.resolve(results); - } - - return promise; - }; - - ZalgoPromise.hash = function hash(promises) { - // eslint-disable-line no-undef - var result = {}; - return ZalgoPromise.all(Object.keys(promises).map(function (key) { - return ZalgoPromise.resolve(promises[key]).then(function (value) { - result[key] = value; - }); - })).then(function () { - return result; - }); - }; - - ZalgoPromise.map = function map(items, method) { - // $FlowFixMe - return ZalgoPromise.all(items.map(method)); - }; - - ZalgoPromise.onPossiblyUnhandledException = function onPossiblyUnhandledException(handler) { - return exceptions_onPossiblyUnhandledException(handler); - }; - - ZalgoPromise.try = function _try(method, context, args) { - if (method && typeof method !== 'function' && !method.call) { - throw new Error('Promise.try expected a function'); - } - - var result; - startActive(); - - try { - // $FlowFixMe - result = method.apply(context, args || []); - } catch (err) { - endActive(); - return ZalgoPromise.reject(err); - } - - endActive(); - return ZalgoPromise.resolve(result); - }; - - ZalgoPromise.delay = function delay(_delay) { - return new ZalgoPromise(function (resolve) { - setTimeout(resolve, _delay); - }); - }; - - ZalgoPromise.isPromise = function isPromise(value) { - if (value && value instanceof ZalgoPromise) { - return true; - } - - return utils_isPromise(value); - }; - - ZalgoPromise.flush = function flush() { - return awaitActive(ZalgoPromise); - }; - - return ZalgoPromise; -}(); -// CONCATENATED MODULE: ./node_modules/zalgo-promise/src/index.js - -// CONCATENATED MODULE: ./node_modules/belter/src/device.js -function getUserAgent() { - return window.navigator.mockUserAgent || window.navigator.userAgent; -} -function isDevice(userAgent) { - if (userAgent === void 0) { - userAgent = getUserAgent(); - } - - if (userAgent.match(/Android|webOS|iPhone|iPad|iPod|bada|Symbian|Palm|CriOS|BlackBerry|IEMobile|WindowsMobile|Opera Mini/i)) { - return true; - } - - return false; -} -function isWebView() { - var userAgent = getUserAgent(); - return /(iPhone|iPod|iPad|Macintosh).*AppleWebKit(?!.*Safari)/i.test(userAgent) || /\bwv\b/.test(userAgent) || /Android.*Version\/(\d)\.(\d)/i.test(userAgent); -} -function isStandAlone() { - return window.navigator.standalone === true || window.matchMedia('(display-mode: standalone)').matches; -} -function isFacebookWebView(ua) { - if (ua === void 0) { - ua = getUserAgent(); - } - - return ua.indexOf('FBAN') !== -1 || ua.indexOf('FBAV') !== -1; -} -function isFirefoxIOS(ua) { - if (ua === void 0) { - ua = getUserAgent(); - } - - return /FxiOS/i.test(ua); -} -function isEdgeIOS(ua) { - if (ua === void 0) { - ua = getUserAgent(); - } - - return /EdgiOS/i.test(ua); -} -function isOperaMini(ua) { - if (ua === void 0) { - ua = getUserAgent(); - } - - return ua.indexOf('Opera Mini') > -1; -} -function isAndroid(ua) { - if (ua === void 0) { - ua = getUserAgent(); - } - - return /Android/.test(ua); -} -function isIos(ua) { - if (ua === void 0) { - ua = getUserAgent(); - } - - return /iPhone|iPod|iPad/.test(ua); -} -function isGoogleSearchApp(ua) { - if (ua === void 0) { - ua = getUserAgent(); - } - - return /\bGSA\b/.test(ua); -} -function isQQBrowser(ua) { - if (ua === void 0) { - ua = getUserAgent(); - } - - return /QQBrowser/.test(ua); -} -function isIosWebview(ua) { - if (ua === void 0) { - ua = getUserAgent(); - } - - if (isIos(ua)) { - if (isGoogleSearchApp(ua)) { - return true; - } - - return /.+AppleWebKit(?!.*Safari)/.test(ua); - } - - return false; -} -function isAndroidWebview(ua) { - if (ua === void 0) { - ua = getUserAgent(); - } - - if (isAndroid(ua)) { - return /Version\/[\d.]+/.test(ua) && !isOperaMini(ua); - } - - return false; -} -function device_isIE() { - if (window.document.documentMode) { - return true; - } - - return Boolean(window.navigator && window.navigator.userAgent && /Edge|MSIE|rv:11/i.test(window.navigator.userAgent)); -} -function isIECompHeader() { - var mHttp = window.document.querySelector('meta[http-equiv="X-UA-Compatible"]'); - var mContent = window.document.querySelector('meta[content="IE=edge"]'); - - if (mHttp && mContent) { - return true; - } - - return false; -} -function isElectron() { - if (typeof process !== 'undefined' && process.versions && process.versions.electron) { - return true; - } - - return false; -} -function isIEIntranet() { - // This status check only works for older versions of IE with document.documentMode set - if (window.document.documentMode) { - try { - var status = window.status; - window.status = 'testIntranetMode'; - - if (window.status === 'testIntranetMode') { - window.status = status; - return true; - } - - return false; - } catch (err) { - return false; - } - } - - return false; -} -function isMacOsCna() { - var userAgent = getUserAgent(); - return /Macintosh.*AppleWebKit(?!.*Safari)/i.test(userAgent); -} -function supportsPopups(ua) { - if (ua === void 0) { - ua = getUserAgent(); - } - - return !(isIosWebview(ua) || isAndroidWebview(ua) || isOperaMini(ua) || isFirefoxIOS(ua) || isEdgeIOS(ua) || isFacebookWebView(ua) || isQQBrowser(ua) || isElectron() || isMacOsCna() || isStandAlone()); -} -function isChrome(ua) { - if (ua === void 0) { - ua = getUserAgent(); - } - - return /Chrome|Chromium|CriOS/.test(ua); -} -function isSafari(ua) { - if (ua === void 0) { - ua = getUserAgent(); - } - - return /Safari/.test(ua) && !isChrome(ua); -} -// CONCATENATED MODULE: ./node_modules/cross-domain-utils/src/util.js -function isRegex(item) { - return Object.prototype.toString.call(item) === '[object RegExp]'; -} // eslint-disable-next-line no-unused-vars - -function noop() {// pass -} -// CONCATENATED MODULE: ./node_modules/cross-domain-utils/src/constants.js -var PROTOCOL = { - MOCK: 'mock:', - FILE: 'file:', - ABOUT: 'about:' -}; -var WILDCARD = '*'; -var WINDOW_TYPE = { - IFRAME: 'iframe', - POPUP: 'popup' -}; -// CONCATENATED MODULE: ./node_modules/cross-domain-utils/src/utils.js -/* eslint max-lines: 0 */ - - -var IE_WIN_ACCESS_ERROR = 'Call was rejected by callee.\r\n'; -function isFileProtocol(win) { - if (win === void 0) { - win = window; - } - - return win.location.protocol === PROTOCOL.FILE; -} -function isAboutProtocol(win) { - if (win === void 0) { - win = window; - } - - return win.location.protocol === PROTOCOL.ABOUT; -} -function getParent(win) { - if (win === void 0) { - win = window; - } - - if (!win) { - return; - } - - try { - if (win.parent && win.parent !== win) { - return win.parent; - } - } catch (err) {// pass - } -} -function getOpener(win) { - if (win === void 0) { - win = window; - } - - if (!win) { - return; - } // Make sure we're not actually an iframe which has had window.open() called on us - - - if (getParent(win)) { - return; - } - - try { - return win.opener; - } catch (err) {// pass - } -} -function canReadFromWindow(win) { - try { - // $FlowFixMe - noop(win && win.location && win.location.href); - return true; - } catch (err) {// pass - } - - return false; -} -function getActualDomain(win) { - if (win === void 0) { - win = window; - } - - var location = win.location; - - if (!location) { - throw new Error("Can not read window location"); - } - - var protocol = location.protocol; - - if (!protocol) { - throw new Error("Can not read window protocol"); - } - - if (protocol === PROTOCOL.FILE) { - return PROTOCOL.FILE + "//"; - } - - if (protocol === PROTOCOL.ABOUT) { - var parent = getParent(win); - - if (parent && canReadFromWindow(parent)) { - // $FlowFixMe - return getActualDomain(parent); - } - - return PROTOCOL.ABOUT + "//"; - } - - var host = location.host; - - if (!host) { - throw new Error("Can not read window host"); - } - - return protocol + "//" + host; -} -function getDomain(win) { - if (win === void 0) { - win = window; - } - - var domain = getActualDomain(win); - - if (domain && win.mockDomain && win.mockDomain.indexOf(PROTOCOL.MOCK) === 0) { - return win.mockDomain; - } - - return domain; -} -function isBlankDomain(win) { - try { - // $FlowFixMe - if (!win.location.href) { - return true; - } - - if (win.location.href === 'about:blank') { - return true; - } - } catch (err) {// pass - } - - return false; -} -function isActuallySameDomain(win) { - try { - if (win === window) { - return true; - } - } catch (err) {// pass - } - - try { - var desc = Object.getOwnPropertyDescriptor(win, 'location'); - - if (desc && desc.enumerable === false) { - return false; - } - } catch (err) {// pass - } - - try { - // $FlowFixMe - if (isAboutProtocol(win) && canReadFromWindow(win)) { - return true; - } - } catch (err) {// pass - } - - try { - // $FlowFixMe - if (getActualDomain(win) === getActualDomain(window)) { - return true; - } - } catch (err) {// pass - } - - return false; -} -function isSameDomain(win) { - if (!isActuallySameDomain(win)) { - return false; - } - - try { - if (win === window) { - return true; - } // $FlowFixMe - - - if (isAboutProtocol(win) && canReadFromWindow(win)) { - return true; - } // $FlowFixMe - - - if (getDomain(window) === getDomain(win)) { - return true; - } - } catch (err) {// pass - } - - return false; -} -function assertSameDomain(win) { - if (!isSameDomain(win)) { - throw new Error("Expected window to be same domain"); - } // $FlowFixMe - - - return win; -} -function getParents(win) { - var result = []; - - try { - while (win.parent !== win) { - result.push(win.parent); - win = win.parent; - } - } catch (err) {// pass - } - - return result; -} -function isAncestorParent(parent, child) { - if (!parent || !child) { - return false; - } - - var childParent = getParent(child); - - if (childParent) { - return childParent === parent; - } - - if (getParents(child).indexOf(parent) !== -1) { - return true; - } - - return false; -} -function getFrames(win) { - var result = []; - var frames; - - try { - frames = win.frames; - } catch (err) { - frames = win; - } - - var len; - - try { - len = frames.length; - } catch (err) {// pass - } - - if (len === 0) { - return result; - } - - if (len) { - for (var i = 0; i < len; i++) { - var frame = void 0; - - try { - frame = frames[i]; - } catch (err) { - continue; - } - - result.push(frame); - } - - return result; - } - - for (var _i = 0; _i < 100; _i++) { - var _frame = void 0; - - try { - _frame = frames[_i]; - } catch (err) { - return result; - } - - if (!_frame) { - return result; - } - - result.push(_frame); - } - - return result; -} -function getAllChildFrames(win) { - var result = []; - - for (var _i3 = 0, _getFrames2 = getFrames(win); _i3 < _getFrames2.length; _i3++) { - var frame = _getFrames2[_i3]; - result.push(frame); - - for (var _i5 = 0, _getAllChildFrames2 = getAllChildFrames(frame); _i5 < _getAllChildFrames2.length; _i5++) { - var childFrame = _getAllChildFrames2[_i5]; - result.push(childFrame); - } - } - - return result; -} -function getTop(win) { - if (win === void 0) { - win = window; - } - - try { - if (win.top) { - return win.top; - } - } catch (err) {// pass - } - - if (getParent(win) === win) { - return win; - } - - try { - if (isAncestorParent(window, win) && window.top) { - return window.top; - } - } catch (err) {// pass - } - - try { - if (isAncestorParent(win, window) && window.top) { - return window.top; - } - } catch (err) {// pass - } - - for (var _i7 = 0, _getAllChildFrames4 = getAllChildFrames(win); _i7 < _getAllChildFrames4.length; _i7++) { - var frame = _getAllChildFrames4[_i7]; - - try { - if (frame.top) { - return frame.top; - } - } catch (err) {// pass - } - - if (getParent(frame) === frame) { - return frame; - } - } -} -function getNextOpener(win) { - if (win === void 0) { - win = window; - } - - return getOpener(getTop(win) || win); -} -function getUltimateTop(win) { - if (win === void 0) { - win = window; - } - - var opener = getNextOpener(win); - - if (opener) { - return getUltimateTop(opener); - } - - return top; -} -function getAllFramesInWindow(win) { - var top = getTop(win); - - if (!top) { - throw new Error("Can not determine top window"); - } - - return [].concat(getAllChildFrames(top), [top]); -} -function getAllWindows(win) { - if (win === void 0) { - win = window; - } - - var frames = getAllFramesInWindow(win); - var opener = getNextOpener(win); - - if (opener) { - return [].concat(getAllWindows(opener), frames); - } else { - return frames; - } -} -function isTop(win) { - return win === getTop(win); -} -function isFrameWindowClosed(frame) { - if (!frame.contentWindow) { - return true; - } - - if (!frame.parentNode) { - return true; - } - - var doc = frame.ownerDocument; - - if (doc && doc.documentElement && !doc.documentElement.contains(frame)) { - return true; - } - - return false; -} - -function safeIndexOf(collection, item) { - for (var i = 0; i < collection.length; i++) { - try { - if (collection[i] === item) { - return i; - } - } catch (err) {// pass - } - } - - return -1; -} - -var iframeWindows = []; -var iframeFrames = []; -function isWindowClosed(win, allowMock) { - if (allowMock === void 0) { - allowMock = true; - } - - try { - if (win === window) { - return false; - } - } catch (err) { - return true; - } - - try { - if (!win) { - return true; - } - } catch (err) { - return true; - } - - try { - if (win.closed) { - return true; - } - } catch (err) { - // I love you so much IE - if (err && err.message === IE_WIN_ACCESS_ERROR) { - return false; - } - - return true; - } - - if (allowMock && isSameDomain(win)) { - try { - // $FlowFixMe - if (win.mockclosed) { - return true; - } - } catch (err) {// pass - } - } // Mobile safari - - - try { - if (!win.parent || !win.top) { - return true; - } - } catch (err) {} // pass - // Yes, this actually happens in IE. win === win errors out when the window - // is from an iframe, and the iframe was removed from the page. - - - try { - noop(win === win); // eslint-disable-line no-self-compare - } catch (err) { - return true; - } // IE orphaned frame - - - var iframeIndex = safeIndexOf(iframeWindows, win); - - if (iframeIndex !== -1) { - var frame = iframeFrames[iframeIndex]; - - if (frame && isFrameWindowClosed(frame)) { - return true; - } - } - - return false; -} - -function cleanIframes() { - for (var i = 0; i < iframeWindows.length; i++) { - var closed = false; - - try { - closed = iframeWindows[i].closed; - } catch (err) {// pass - } - - if (closed) { - iframeFrames.splice(i, 1); - iframeWindows.splice(i, 1); - } - } -} - -function linkFrameWindow(frame) { - cleanIframes(); - - if (frame && frame.contentWindow) { - try { - iframeWindows.push(frame.contentWindow); - iframeFrames.push(frame); - } catch (err) {// pass - } - } -} -function utils_getUserAgent(win) { - win = win || window; - return win.navigator.mockUserAgent || win.navigator.userAgent; -} -function getFrameByName(win, name) { - var winFrames = getFrames(win); - - for (var _i9 = 0; _i9 < winFrames.length; _i9++) { - var childFrame = winFrames[_i9]; - - try { - // $FlowFixMe - if (isSameDomain(childFrame) && childFrame.name === name && winFrames.indexOf(childFrame) !== -1) { - return childFrame; - } - } catch (err) {// pass - } - } - - try { - // $FlowFixMe - if (winFrames.indexOf(win.frames[name]) !== -1) { - // $FlowFixMe - return win.frames[name]; - } - } catch (err) {// pass - } - - try { - if (winFrames.indexOf(win[name]) !== -1) { - return win[name]; - } - } catch (err) {// pass - } -} -function findChildFrameByName(win, name) { - var frame = getFrameByName(win, name); - - if (frame) { - return frame; - } - - for (var _i11 = 0, _getFrames4 = getFrames(win); _i11 < _getFrames4.length; _i11++) { - var childFrame = _getFrames4[_i11]; - var namedFrame = findChildFrameByName(childFrame, name); - - if (namedFrame) { - return namedFrame; - } - } -} -function findFrameByName(win, name) { - var frame; - frame = getFrameByName(win, name); - - if (frame) { - return frame; - } - - var top = getTop(win) || win; - return findChildFrameByName(top, name); -} -function isParent(win, frame) { - var frameParent = getParent(frame); - - if (frameParent) { - return frameParent === win; - } - - for (var _i13 = 0, _getFrames6 = getFrames(win); _i13 < _getFrames6.length; _i13++) { - var childFrame = _getFrames6[_i13]; - - if (childFrame === frame) { - return true; - } - } - - return false; -} -function isOpener(parent, child) { - return parent === getOpener(child); -} -function getAncestor(win) { - if (win === void 0) { - win = window; - } - - win = win || window; - var opener = getOpener(win); - - if (opener) { - return opener; - } - - var parent = getParent(win); - - if (parent) { - return parent; - } -} -function getAncestors(win) { - var results = []; - var ancestor = win; - - while (ancestor) { - ancestor = getAncestor(ancestor); - - if (ancestor) { - results.push(ancestor); - } - } - - return results; -} -function isAncestor(parent, child) { - var actualParent = getAncestor(child); - - if (actualParent) { - if (actualParent === parent) { - return true; - } - - return false; - } - - if (child === parent) { - return false; - } - - if (getTop(child) === child) { - return false; - } - - for (var _i15 = 0, _getFrames8 = getFrames(parent); _i15 < _getFrames8.length; _i15++) { - var frame = _getFrames8[_i15]; - - if (frame === child) { - return true; - } - } - - return false; -} -function isPopup(win) { - if (win === void 0) { - win = window; - } - - return Boolean(getOpener(win)); -} -function isIframe(win) { - if (win === void 0) { - win = window; - } - - return Boolean(getParent(win)); -} -function isFullpage(win) { - if (win === void 0) { - win = window; - } - - return Boolean(!isIframe(win) && !isPopup(win)); -} - -function anyMatch(collection1, collection2) { - for (var _i17 = 0; _i17 < collection1.length; _i17++) { - var item1 = collection1[_i17]; - - for (var _i19 = 0; _i19 < collection2.length; _i19++) { - var item2 = collection2[_i19]; - - if (item1 === item2) { - return true; - } - } - } - - return false; -} - -function getDistanceFromTop(win) { - if (win === void 0) { - win = window; - } - - var distance = 0; - var parent = win; - - while (parent) { - parent = getParent(parent); - - if (parent) { - distance += 1; - } - } - - return distance; -} -function getNthParent(win, n) { - if (n === void 0) { - n = 1; - } - - var parent = win; - - for (var i = 0; i < n; i++) { - if (!parent) { - return; - } - - parent = getParent(parent); - } - - return parent; -} -function getNthParentFromTop(win, n) { - if (n === void 0) { - n = 1; - } - - return getNthParent(win, getDistanceFromTop(win) - n); -} -function isSameTopWindow(win1, win2) { - var top1 = getTop(win1) || win1; - var top2 = getTop(win2) || win2; - - try { - if (top1 && top2) { - if (top1 === top2) { - return true; - } - - return false; - } - } catch (err) {// pass - } - - var allFrames1 = getAllFramesInWindow(win1); - var allFrames2 = getAllFramesInWindow(win2); - - if (anyMatch(allFrames1, allFrames2)) { - return true; - } - - var opener1 = getOpener(top1); - var opener2 = getOpener(top2); - - if (opener1 && anyMatch(getAllFramesInWindow(opener1), allFrames2)) { - return false; - } - - if (opener2 && anyMatch(getAllFramesInWindow(opener2), allFrames1)) { - return false; - } - - return false; -} -function matchDomain(pattern, origin) { - if (typeof pattern === 'string') { - if (typeof origin === 'string') { - return pattern === WILDCARD || origin === pattern; - } - - if (isRegex(origin)) { - return false; - } - - if (Array.isArray(origin)) { - return false; - } - } - - if (isRegex(pattern)) { - if (isRegex(origin)) { - return pattern.toString() === origin.toString(); - } - - if (Array.isArray(origin)) { - return false; - } // $FlowFixMe - - - return Boolean(origin.match(pattern)); - } - - if (Array.isArray(pattern)) { - if (Array.isArray(origin)) { - return JSON.stringify(pattern) === JSON.stringify(origin); - } - - if (isRegex(origin)) { - return false; - } - - return pattern.some(function (subpattern) { - return matchDomain(subpattern, origin); - }); - } - - return false; -} -function stringifyDomainPattern(pattern) { - if (Array.isArray(pattern)) { - return "(" + pattern.join(' | ') + ")"; - } else if (isRegex(pattern)) { - return "RegExp(" + pattern.toString(); - } else { - return pattern.toString(); - } -} -function getDomainFromUrl(url) { - var domain; - - if (url.match(/^(https?|mock|file):\/\//)) { - domain = url; - } else { - return getDomain(); - } - - domain = domain.split('/').slice(0, 3).join('/'); - return domain; -} -function onCloseWindow(win, callback, delay, maxtime) { - if (delay === void 0) { - delay = 1000; - } - - if (maxtime === void 0) { - maxtime = Infinity; - } - - var timeout; - - var check = function check() { - if (isWindowClosed(win)) { - if (timeout) { - clearTimeout(timeout); - } - - return callback(); - } - - if (maxtime <= 0) { - clearTimeout(timeout); - } else { - maxtime -= delay; - timeout = setTimeout(check, delay); - } - }; - - check(); - return { - cancel: function cancel() { - if (timeout) { - clearTimeout(timeout); - } - } - }; -} // eslint-disable-next-line complexity - -function isWindow(obj) { - try { - if (obj === window) { - return true; - } - } catch (err) { - if (err && err.message === IE_WIN_ACCESS_ERROR) { - return true; - } - } - - try { - if (Object.prototype.toString.call(obj) === '[object Window]') { - return true; - } - } catch (err) { - if (err && err.message === IE_WIN_ACCESS_ERROR) { - return true; - } - } - - try { - if (window.Window && obj instanceof window.Window) { - return true; - } - } catch (err) { - if (err && err.message === IE_WIN_ACCESS_ERROR) { - return true; - } - } - - try { - if (obj && obj.self === obj) { - return true; - } - } catch (err) { - if (err && err.message === IE_WIN_ACCESS_ERROR) { - return true; - } - } - - try { - if (obj && obj.parent === obj) { - return true; - } - } catch (err) { - if (err && err.message === IE_WIN_ACCESS_ERROR) { - return true; - } - } - - try { - if (obj && obj.top === obj) { - return true; - } - } catch (err) { - if (err && err.message === IE_WIN_ACCESS_ERROR) { - return true; - } - } - - try { - if (noop(obj === obj) === '__unlikely_value__') { - // eslint-disable-line no-self-compare - return false; - } - } catch (err) { - return true; - } - - try { - if (obj && obj.__cross_domain_utils_window_check__ === '__unlikely_value__') { - return false; - } - } catch (err) { - return true; - } - - return false; -} -function isBrowser() { - return typeof window !== 'undefined' && typeof window.location !== 'undefined'; -} -function isCurrentDomain(domain) { - if (!isBrowser()) { - return false; - } - - return getDomain() === domain; -} -function isMockDomain(domain) { - return domain.indexOf(PROTOCOL.MOCK) === 0; -} -function normalizeMockUrl(url) { - if (!isMockDomain(getDomainFromUrl(url))) { - return url; - } - - if (true) { - throw new Error("Mock urls not supported out of test mode"); - } - - return url.replace(/^mock:\/\/[^/]+/, getActualDomain(window)); -} -function closeWindow(win) { - try { - win.close(); - } catch (err) {// pass - } -} -function getFrameForWindow(win) { - if (isSameDomain(win)) { - return assertSameDomain(win).frameElement; - } - - for (var _i21 = 0, _document$querySelect2 = document.querySelectorAll('iframe'); _i21 < _document$querySelect2.length; _i21++) { - var frame = _document$querySelect2[_i21]; - - if (frame && frame.contentWindow && frame.contentWindow === win) { - return frame; - } - } -} -// CONCATENATED MODULE: ./node_modules/cross-domain-utils/src/types.js -// export something to force webpack to see this as an ES module -var TYPES = true; -// CONCATENATED MODULE: ./node_modules/cross-domain-utils/src/index.js - - - -// CONCATENATED MODULE: ./node_modules/cross-domain-safe-weakmap/src/native.js -function hasNativeWeakMap() { - if (typeof WeakMap === 'undefined') { - return false; - } - - if (typeof Object.freeze === 'undefined') { - return false; - } - - try { - var testWeakMap = new WeakMap(); - var testKey = {}; - var testValue = '__testvalue__'; - Object.freeze(testKey); - testWeakMap.set(testKey, testValue); - - if (testWeakMap.get(testKey) === testValue) { - return true; - } - - return false; - } catch (err) { - return false; - } -} -// CONCATENATED MODULE: ./node_modules/cross-domain-safe-weakmap/src/util.js -function util_safeIndexOf(collection, item) { - for (var i = 0; i < collection.length; i++) { - try { - if (collection[i] === item) { - return i; - } - } catch (err) {// pass - } - } - - return -1; -} // eslint-disable-next-line no-unused-vars - -function util_noop() {// pass -} -// CONCATENATED MODULE: ./node_modules/cross-domain-safe-weakmap/src/weakmap.js - - - -var weakmap_CrossDomainSafeWeakMap = -/*#__PURE__*/ -function () { - function CrossDomainSafeWeakMap() { - this.name = void 0; - this.weakmap = void 0; - this.keys = void 0; - this.values = void 0; - // eslint-disable-next-line no-bitwise - this.name = "__weakmap_" + (Math.random() * 1e9 >>> 0) + "__"; - - if (hasNativeWeakMap()) { - try { - this.weakmap = new WeakMap(); - } catch (err) {// pass - } - } - - this.keys = []; - this.values = []; - } - - var _proto = CrossDomainSafeWeakMap.prototype; - - _proto._cleanupClosedWindows = function _cleanupClosedWindows() { - var weakmap = this.weakmap; - var keys = this.keys; - - for (var i = 0; i < keys.length; i++) { - var value = keys[i]; - - if (isWindow(value) && isWindowClosed(value)) { - if (weakmap) { - try { - weakmap.delete(value); - } catch (err) {// pass - } - } - - keys.splice(i, 1); - this.values.splice(i, 1); - i -= 1; - } - } - }; - - _proto.isSafeToReadWrite = function isSafeToReadWrite(key) { - if (isWindow(key)) { - return false; - } - - try { - util_noop(key && key.self); - util_noop(key && key[this.name]); - } catch (err) { - return false; - } - - return true; - }; - - _proto.set = function set(key, value) { - if (!key) { - throw new Error("WeakMap expected key"); - } - - var weakmap = this.weakmap; - - if (weakmap) { - try { - weakmap.set(key, value); - } catch (err) { - delete this.weakmap; - } - } - - if (this.isSafeToReadWrite(key)) { - try { - var name = this.name; - var entry = key[name]; - - if (entry && entry[0] === key) { - entry[1] = value; - } else { - Object.defineProperty(key, name, { - value: [key, value], - writable: true - }); - } - - return; - } catch (err) {// pass - } - } - - this._cleanupClosedWindows(); - - var keys = this.keys; - var values = this.values; - var index = util_safeIndexOf(keys, key); - - if (index === -1) { - keys.push(key); - values.push(value); - } else { - values[index] = value; - } - }; - - _proto.get = function get(key) { - if (!key) { - throw new Error("WeakMap expected key"); - } - - var weakmap = this.weakmap; - - if (weakmap) { - try { - if (weakmap.has(key)) { - return weakmap.get(key); - } - } catch (err) { - delete this.weakmap; - } - } - - if (this.isSafeToReadWrite(key)) { - try { - var entry = key[this.name]; - - if (entry && entry[0] === key) { - return entry[1]; - } - - return; - } catch (err) {// pass - } - } - - this._cleanupClosedWindows(); - - var keys = this.keys; - var index = util_safeIndexOf(keys, key); - - if (index === -1) { - return; - } - - return this.values[index]; - }; - - _proto.delete = function _delete(key) { - if (!key) { - throw new Error("WeakMap expected key"); - } - - var weakmap = this.weakmap; - - if (weakmap) { - try { - weakmap.delete(key); - } catch (err) { - delete this.weakmap; - } - } - - if (this.isSafeToReadWrite(key)) { - try { - var entry = key[this.name]; - - if (entry && entry[0] === key) { - entry[0] = entry[1] = undefined; - } - } catch (err) {// pass - } - } - - this._cleanupClosedWindows(); - - var keys = this.keys; - var index = util_safeIndexOf(keys, key); - - if (index !== -1) { - keys.splice(index, 1); - this.values.splice(index, 1); - } - }; - - _proto.has = function has(key) { - if (!key) { - throw new Error("WeakMap expected key"); - } - - var weakmap = this.weakmap; - - if (weakmap) { - try { - if (weakmap.has(key)) { - return true; - } - } catch (err) { - delete this.weakmap; - } - } - - if (this.isSafeToReadWrite(key)) { - try { - var entry = key[this.name]; - - if (entry && entry[0] === key) { - return true; - } - - return false; - } catch (err) {// pass - } - } - - this._cleanupClosedWindows(); - - var index = util_safeIndexOf(this.keys, key); - return index !== -1; - }; - - _proto.getOrSet = function getOrSet(key, getter) { - if (this.has(key)) { - // $FlowFixMe - return this.get(key); - } - - var value = getter(); - this.set(key, value); - return value; - }; - - return CrossDomainSafeWeakMap; -}(); -// CONCATENATED MODULE: ./node_modules/cross-domain-safe-weakmap/src/index.js - -// CONCATENATED MODULE: ./node_modules/belter/src/util.js -/* eslint max-lines: 0 */ - - -function getFunctionName(fn) { - return fn.name || fn.__name__ || fn.displayName || 'anonymous'; -} -function setFunctionName(fn, name) { - try { - delete fn.name; - fn.name = name; - } catch (err) {// pass - } - - fn.__name__ = fn.displayName = name; - return fn; -} -function base64encode(str) { - if (typeof btoa === 'function') { - return btoa(encodeURIComponent(str).replace(/%([0-9A-F]{2})/g, function (m, p1) { - return String.fromCharCode(parseInt(p1, 16)); - })); - } - - if (typeof Buffer !== 'undefined') { - return Buffer.from(str, 'utf8').toString('base64'); - } - - throw new Error("Can not find window.btoa or Buffer"); -} -function base64decode(str) { - if (typeof atob === 'function') { - return decodeURIComponent(Array.prototype.map.call(atob(str), function (c) { - // eslint-disable-next-line prefer-template - return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2); - }).join('')); - } - - if (typeof Buffer !== 'undefined') { - return Buffer.from(str, 'base64').toString('utf8'); - } - - throw new Error("Can not find window.atob or Buffer"); -} -function uniqueID() { - var chars = '0123456789abcdef'; - var randomID = 'xxxxxxxxxx'.replace(/./g, function () { - return chars.charAt(Math.floor(Math.random() * chars.length)); - }); - var timeID = base64encode(new Date().toISOString().slice(11, 19).replace('T', '.')).replace(/[^a-zA-Z0-9]/g, '').toLowerCase(); - return randomID + "_" + timeID; -} -function getGlobal() { - if (typeof window !== 'undefined') { - return window; - } - - if (typeof window !== 'undefined') { - return window; - } - - if (typeof global !== 'undefined') { - return global; - } - - throw new Error("No global found"); -} -var objectIDs; -function getObjectID(obj) { - objectIDs = objectIDs || new weakmap_CrossDomainSafeWeakMap(); - - if (obj === null || obj === undefined || typeof obj !== 'object' && typeof obj !== 'function') { - throw new Error("Invalid object"); - } - - var uid = objectIDs.get(obj); - - if (!uid) { - uid = typeof obj + ":" + uniqueID(); - objectIDs.set(obj, uid); - } - - return uid; -} - -function serializeArgs(args) { - try { - return JSON.stringify(Array.prototype.slice.call(args), function (subkey, val) { - if (typeof val === 'function') { - return "memoize[" + getObjectID(val) + "]"; - } - - return val; - }); - } catch (err) { - throw new Error("Arguments not serializable -- can not be used to memoize"); - } -} - -function memoize(method, options) { - var _this = this; - - if (options === void 0) { - options = {}; - } - - var cacheMap = new weakmap_CrossDomainSafeWeakMap(); // $FlowFixMe - - var memoizedFunction = function memoizedFunction() { - for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { - args[_key] = arguments[_key]; - } - - var cache = cacheMap.getOrSet(options.thisNamespace ? this : method, function () { - return {}; - }); - var key = serializeArgs(args); - var cacheTime = options.time; - - if (cache[key] && cacheTime && Date.now() - cache[key].time < cacheTime) { - delete cache[key]; - } - - if (cache[key]) { - return cache[key].value; - } - - var time = Date.now(); - var value = method.apply(this, arguments); - cache[key] = { - time: time, - value: value - }; - return cache[key].value; - }; - - memoizedFunction.reset = function () { - cacheMap.delete(options.thisNamespace ? _this : method); - }; - - return setFunctionName(memoizedFunction, getFunctionName(method) + "::memoized"); -} -function promiseIdentity(item) { - // $FlowFixMe - return promise_ZalgoPromise.resolve(item); -} // eslint-disable-next-line flowtype/no-weak-types - -function memoizePromise(method) { - var cache = {}; // eslint-disable-next-line flowtype/no-weak-types - - function memoizedPromiseFunction() { - var _arguments = arguments, - _this2 = this; - - for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { - args[_key2] = arguments[_key2]; - } - - var key = serializeArgs(args); - - if (cache.hasOwnProperty(key)) { - return cache[key]; - } - - cache[key] = promise_ZalgoPromise.try(function () { - return method.apply(_this2, _arguments); - }).finally(function () { - delete cache[key]; - }); - return cache[key]; - } - - memoizedPromiseFunction.reset = function () { - cache = {}; - }; - - return setFunctionName(memoizedPromiseFunction, getFunctionName(method) + "::promiseMemoized"); -} // eslint-disable-next-line flowtype/no-weak-types - -function promisify(method, options) { - if (options === void 0) { - options = {}; - } - - function promisifiedFunction() { - return promise_ZalgoPromise.try(method, this, arguments); - } - - if (options.name) { - promisifiedFunction.displayName = options.name + ":promisified"; - } - - return setFunctionName(promisifiedFunction, getFunctionName(method) + "::promisified"); -} // eslint-disable-next-line flowtype/no-weak-types - -function inlineMemoize(method, logic, args) { - if (args === void 0) { - args = []; - } - - // $FlowFixMe - var cache = method.__inline_memoize_cache__ = method.__inline_memoize_cache__ || {}; - var key = serializeArgs(args); - - if (cache.hasOwnProperty(key)) { - return cache[key]; - } - - var result = cache[key] = logic.apply(void 0, args); - return result; -} // eslint-disable-next-line no-unused-vars - -function src_util_noop() {// pass -} -function once(method) { - var called = false; - - var onceFunction = function onceFunction() { - if (!called) { - called = true; - return method.apply(this, arguments); - } - }; - - return setFunctionName(onceFunction, getFunctionName(method) + "::once"); -} -function hashStr(str) { - var hash = 0; - - for (var i = 0; i < str.length; i++) { - hash += str[i].charCodeAt(0) * Math.pow(i % 10 + 1, 5); - } - - return Math.floor(Math.pow(Math.sqrt(hash), 5)); -} -function strHashStr(str) { - var hash = ''; - - for (var i = 0; i < str.length; i++) { - var total = str[i].charCodeAt(0) * i; - - if (str[i + 1]) { - total += str[i + 1].charCodeAt(0) * (i - 1); - } - - hash += String.fromCharCode(97 + Math.abs(total) % 26); - } - - return hash; -} -function match(str, pattern) { - var regmatch = str.match(pattern); - - if (regmatch) { - return regmatch[1]; - } -} -function awaitKey(obj, key) { - return new promise_ZalgoPromise(function (resolve) { - var value = obj[key]; - - if (value) { - return resolve(value); - } - - delete obj[key]; - Object.defineProperty(obj, key, { - configurable: true, - set: function set(item) { - value = item; - - if (value) { - resolve(value); - } - }, - get: function get() { - return value; - } - }); - }); -} -function stringifyError(err, level) { - if (level === void 0) { - level = 1; - } - - if (level >= 3) { - return 'stringifyError stack overflow'; - } - - try { - if (!err) { - return ""; - } - - if (typeof err === 'string') { - return err; - } - - if (err instanceof Error) { - var stack = err && err.stack; - var message = err && err.message; - - if (stack && message) { - if (stack.indexOf(message) !== -1) { - return stack; - } else { - return message + "\n" + stack; - } - } else if (stack) { - return stack; - } else if (message) { - return message; - } - } - - if (err && err.toString && typeof err.toString === 'function') { - // $FlowFixMe - return err.toString(); - } - - return Object.prototype.toString.call(err); - } catch (newErr) { - // eslint-disable-line unicorn/catch-error-name - return "Error while stringifying error: " + stringifyError(newErr, level + 1); - } -} -function stringifyErrorMessage(err) { - var defaultMessage = ""; - - if (!err) { - return defaultMessage; - } - - if (err instanceof Error) { - return err.message || defaultMessage; - } - - if (typeof err.message === 'string') { - return err.message || defaultMessage; - } - - return defaultMessage; -} -function stringify(item) { - if (typeof item === 'string') { - return item; - } - - if (item && item.toString && typeof item.toString === 'function') { - // $FlowFixMe - return item.toString(); - } - - return Object.prototype.toString.call(item); -} -function domainMatches(hostname, domain) { - hostname = hostname.split('://')[1]; - var index = hostname.indexOf(domain); - return index !== -1 && hostname.slice(index) === domain; -} -function patchMethod(obj, name, handler) { - var original = obj[name]; - - obj[name] = function patchedMethod() { - var _arguments2 = arguments, - _this3 = this; - - return handler({ - context: this, - args: Array.prototype.slice.call(arguments), - original: original, - callOriginal: function callOriginal() { - return original.apply(_this3, _arguments2); - } - }); - }; -} -function extend(obj, source) { - if (!source) { - return obj; - } - - if (Object.assign) { - return Object.assign(obj, source); - } - - for (var key in source) { - if (source.hasOwnProperty(key)) { - obj[key] = source[key]; - } - } - - return obj; -} -function util_values(obj) { - var result = []; - - for (var key in obj) { - if (obj.hasOwnProperty(key)) { - result.push(obj[key]); - } - } - - return result; -} -function perc(pixels, percentage) { - return Math.round(pixels * percentage / 100); -} -function min() { - return Math.min.apply(Math, arguments); -} -function max() { - return Math.max.apply(Math, arguments); -} -function regexMap(str, regexp, handler) { - var results = []; // $FlowFixMe - - str.replace(regexp, function regexMapMatcher(item) { - results.push(handler ? handler.apply(null, arguments) : item); - }); // $FlowFixMe - - return results; -} -function svgToBase64(svg) { - return "data:image/svg+xml;base64," + base64encode(svg); -} -function objFilter(obj, filter) { - if (filter === void 0) { - filter = Boolean; - } - - var result = {}; - - for (var key in obj) { - if (!obj.hasOwnProperty(key) || !filter(obj[key], key)) { - continue; - } - - result[key] = obj[key]; - } - - return result; -} -function identity(item) { - return item; -} -function regexTokenize(text, regexp) { - var result = []; - text.replace(regexp, function (token) { - result.push(token); - return ''; - }); - return result; -} -function promiseDebounce(method, delay) { - if (delay === void 0) { - delay = 50; - } - - var promise; - var timeout; - - var promiseDebounced = function promiseDebounced() { - if (timeout) { - clearTimeout(timeout); - } - - var localPromise = promise = promise || new promise_ZalgoPromise(); - timeout = setTimeout(function () { - promise = null; - timeout = null; - promise_ZalgoPromise.try(method).then(function (result) { - localPromise.resolve(result); - }, function (err) { - localPromise.reject(err); - }); - }, delay); - return localPromise; - }; - - return setFunctionName(promiseDebounced, getFunctionName(method) + "::promiseDebounced"); -} -function safeInterval(method, time) { - var timeout; - - function loop() { - timeout = setTimeout(function () { - method(); - loop(); - }, time); - } - - loop(); - return { - cancel: function cancel() { - clearTimeout(timeout); - } - }; -} -function isInteger(str) { - return Boolean(str.match(/^[0-9]+$/)); -} -function isFloat(str) { - return Boolean(str.match(/^[0-9]+\.[0-9]+$/)); -} -function serializePrimitive(value) { - return value.toString(); -} -function deserializePrimitive(value) { - if (value === 'true') { - return true; - } else if (value === 'false') { - return false; - } else if (isInteger(value)) { - return parseInt(value, 10); - } else if (isFloat(value)) { - return parseFloat(value); - } else { - return value; - } -} -function dotify(obj, prefix, newobj) { - if (prefix === void 0) { - prefix = ''; - } - - if (newobj === void 0) { - newobj = {}; - } - - prefix = prefix ? prefix + "." : prefix; - - for (var key in obj) { - if (!obj.hasOwnProperty(key) || obj[key] === undefined || obj[key] === null || typeof obj[key] === 'function') { - continue; - } else if (obj[key] && Array.isArray(obj[key]) && obj[key].length && obj[key].every(function (val) { - return typeof val !== 'object'; - })) { - newobj["" + prefix + key + "[]"] = obj[key].join(','); - } else if (obj[key] && typeof obj[key] === 'object') { - newobj = dotify(obj[key], "" + prefix + key, newobj); - } else { - newobj["" + prefix + key] = serializePrimitive(obj[key]); - } - } - - return newobj; -} -function undotify(obj) { - var result = {}; - - for (var key in obj) { - if (!obj.hasOwnProperty(key) || typeof obj[key] !== 'string') { - continue; - } - - var value = obj[key]; - - if (key.match(/^.+\[\]$/)) { - key = key.slice(0, key.length - 2); - value = value.split(',').map(deserializePrimitive); - } else { - value = deserializePrimitive(value); - } - - var keyResult = result; - var parts = key.split('.'); - - for (var i = 0; i < parts.length; i++) { - var part = parts[i]; - var isLast = i + 1 === parts.length; - var isIndex = !isLast && isInteger(parts[i + 1]); - - if (part === 'constructor' || part === 'prototype' || part === '__proto__') { - throw new Error("Disallowed key: " + part); - } - - if (isLast) { - // $FlowFixMe - keyResult[part] = value; - } else { - // $FlowFixMe - keyResult = keyResult[part] = keyResult[part] || (isIndex ? [] : {}); - } - } - } - - return result; -} -function eventEmitter() { - var triggered = {}; - var handlers = {}; - return { - on: function on(eventName, handler) { - var handlerList = handlers[eventName] = handlers[eventName] || []; - handlerList.push(handler); - var cancelled = false; - return { - cancel: function cancel() { - if (!cancelled) { - cancelled = true; - handlerList.splice(handlerList.indexOf(handler), 1); - } - } - }; - }, - once: function once(eventName, handler) { - var listener = this.on(eventName, function () { - listener.cancel(); - handler(); - }); - return listener; - }, - trigger: function trigger(eventName) { - for (var _len3 = arguments.length, args = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) { - args[_key3 - 1] = arguments[_key3]; - } - - var handlerList = handlers[eventName]; - var promises = []; - - if (handlerList) { - var _loop = function _loop(_i2) { - var handler = handlerList[_i2]; - promises.push(promise_ZalgoPromise.try(function () { - return handler.apply(void 0, args); - })); - }; - - for (var _i2 = 0; _i2 < handlerList.length; _i2++) { - _loop(_i2); - } - } - - return promise_ZalgoPromise.all(promises).then(src_util_noop); - }, - triggerOnce: function triggerOnce(eventName) { - if (triggered[eventName]) { - return promise_ZalgoPromise.resolve(); - } - - triggered[eventName] = true; - - for (var _len4 = arguments.length, args = new Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) { - args[_key4 - 1] = arguments[_key4]; - } - - return this.trigger.apply(this, [eventName].concat(args)); - }, - reset: function reset() { - handlers = {}; - } - }; -} -function camelToDasherize(string) { - return string.replace(/([A-Z])/g, function (g) { - return "-" + g.toLowerCase(); - }); -} -function dasherizeToCamel(string) { - return string.replace(/-([a-z])/g, function (g) { - return g[1].toUpperCase(); - }); -} -function capitalizeFirstLetter(string) { - return string.charAt(0).toUpperCase() + string.slice(1).toLowerCase(); -} -function util_get(item, path, def) { - if (!path) { - return def; - } - - var pathParts = path.split('.'); // Loop through each section of our key path - - for (var i = 0; i < pathParts.length; i++) { - // If we have an object, we can get the key - if (typeof item === 'object' && item !== null) { - item = item[pathParts[i]]; // Otherwise, we should return the default (undefined if not provided) - } else { - return def; - } - } // If our final result is undefined, we should return the default - - - return item === undefined ? def : item; -} -function safeTimeout(method, time) { - var interval = safeInterval(function () { - time -= 100; - - if (time <= 0) { - interval.cancel(); - method(); - } - }, 100); -} -function defineLazyProp(obj, key, getter) { - if (Array.isArray(obj)) { - if (typeof key !== 'number') { - throw new TypeError("Array key must be number"); - } - } else if (typeof obj === 'object' && obj !== null) { - if (typeof key !== 'string') { - throw new TypeError("Object key must be string"); - } - } - - Object.defineProperty(obj, key, { - configurable: true, - enumerable: true, - get: function get() { - // $FlowFixMe - delete obj[key]; - var value = getter(); // $FlowFixMe - - obj[key] = value; - return value; - }, - set: function set(value) { - // $FlowFixMe - delete obj[key]; // $FlowFixMe - - obj[key] = value; - } - }); -} -function arrayFrom(item) { - // eslint-disable-line no-undef - return Array.prototype.slice.call(item); -} -function isObject(item) { - return typeof item === 'object' && item !== null; -} -function isObjectObject(obj) { - return isObject(obj) && Object.prototype.toString.call(obj) === '[object Object]'; -} -function isPlainObject(obj) { - if (!isObjectObject(obj)) { - return false; - } // $FlowFixMe - - - var constructor = obj.constructor; - - if (typeof constructor !== 'function') { - return false; - } - - var prototype = constructor.prototype; - - if (!isObjectObject(prototype)) { - return false; - } - - if (!prototype.hasOwnProperty('isPrototypeOf')) { - return false; - } - - return true; -} -function replaceObject(item, replacer, fullKey) { - if (fullKey === void 0) { - fullKey = ''; - } - - if (Array.isArray(item)) { - var length = item.length; - var result = []; - - var _loop2 = function _loop2(i) { - defineLazyProp(result, i, function () { - var itemKey = fullKey ? fullKey + "." + i : "" + i; - var el = item[i]; - var child = replacer(el, i, itemKey); - - if (isPlainObject(child) || Array.isArray(child)) { - // $FlowFixMe - child = replaceObject(child, replacer, itemKey); - } - - return child; - }); - }; - - for (var i = 0; i < length; i++) { - _loop2(i); - } // $FlowFixMe - - - return result; - } else if (isPlainObject(item)) { - var _result = {}; - - var _loop3 = function _loop3(key) { - if (!item.hasOwnProperty(key)) { - return "continue"; - } - - defineLazyProp(_result, key, function () { - var itemKey = fullKey ? fullKey + "." + key : "" + key; // $FlowFixMe - - var el = item[key]; - var child = replacer(el, key, itemKey); - - if (isPlainObject(child) || Array.isArray(child)) { - // $FlowFixMe - child = replaceObject(child, replacer, itemKey); - } - - return child; - }); - }; - - for (var key in item) { - var _ret = _loop3(key); - - if (_ret === "continue") continue; - } // $FlowFixMe - - - return _result; - } else { - throw new Error("Pass an object or array"); - } -} -function copyProp(source, target, name, def) { - if (source.hasOwnProperty(name)) { - var descriptor = Object.getOwnPropertyDescriptor(source, name); // $FlowFixMe - - Object.defineProperty(target, name, descriptor); - } else { - target[name] = def; - } -} -function regex(pattern, string, start) { - if (start === void 0) { - start = 0; - } - - if (typeof pattern === 'string') { - // eslint-disable-next-line security/detect-non-literal-regexp - pattern = new RegExp(pattern); - } - - var result = string.slice(start).match(pattern); - - if (!result) { - return; - } // $FlowFixMe - - - var index = result.index; - var regmatch = result[0]; - return { - text: regmatch, - groups: result.slice(1), - start: start + index, - end: start + index + regmatch.length, - length: regmatch.length, - replace: function replace(text) { - if (!regmatch) { - return ''; - } - - return "" + regmatch.slice(0, start + index) + text + regmatch.slice(index + regmatch.length); - } - }; -} -function regexAll(pattern, string) { - var matches = []; - var start = 0; // eslint-disable-next-line no-constant-condition - - while (true) { - var regmatch = regex(pattern, string, start); - - if (!regmatch) { - break; - } - - matches.push(regmatch); - start = match.end; - } - - return matches; -} -function isDefined(value) { - return value !== null && value !== undefined; -} -function cycle(method) { - return promise_ZalgoPromise.try(method).then(function () { - return cycle(method); - }); -} -function debounce(method, time) { - if (time === void 0) { - time = 100; - } - - var timeout; - - var debounceWrapper = function debounceWrapper() { - var _arguments3 = arguments, - _this4 = this; - - clearTimeout(timeout); - timeout = setTimeout(function () { - return method.apply(_this4, _arguments3); - }, time); - }; - - return setFunctionName(debounceWrapper, getFunctionName(method) + "::debounced"); -} -function util_isRegex(item) { - return Object.prototype.toString.call(item) === '[object RegExp]'; -} -// eslint-disable-next-line flowtype/no-weak-types -var util_weakMapMemoize = function weakMapMemoize(method) { - var weakmap = new weakmap_CrossDomainSafeWeakMap(); // eslint-disable-next-line flowtype/no-weak-types - - return function weakmapMemoized(arg) { - var _this5 = this; - - return weakmap.getOrSet(arg, function () { - return method.call(_this5, arg); - }); - }; -}; -// eslint-disable-next-line flowtype/no-weak-types -var util_weakMapMemoizePromise = function weakMapMemoizePromise(method) { - var weakmap = new weakmap_CrossDomainSafeWeakMap(); // eslint-disable-next-line flowtype/no-weak-types - - return function weakmapMemoizedPromise(arg) { - var _this6 = this; - - return weakmap.getOrSet(arg, function () { - return method.call(_this6, arg).finally(function () { - weakmap.delete(arg); - }); - }); - }; -}; -function getOrSet(obj, key, getter) { - if (obj.hasOwnProperty(key)) { - return obj[key]; - } - - var val = getter(); - obj[key] = val; - return val; -} -function cleanup(obj) { - var tasks = []; - var cleaned = false; - return { - set: function set(name, item) { - if (!cleaned) { - obj[name] = item; - this.register(function () { - delete obj[name]; - }); - } - - return item; - }, - register: function register(method) { - if (cleaned) { - method(); - } else { - tasks.push(once(method)); - } - }, - all: function all() { - var results = []; - cleaned = true; - - while (tasks.length) { - var task = tasks.pop(); - results.push(task()); - } - - return promise_ZalgoPromise.all(results).then(src_util_noop); - } - }; -} -function tryCatch(fn) { - var result; - var error; - - try { - result = fn(); - } catch (err) { - error = err; - } // $FlowFixMe - - - return { - result: result, - error: error - }; -} -function removeFromArray(arr, item) { - var index = arr.indexOf(item); - - if (index !== -1) { - arr.splice(index, 1); - } -} -function assertExists(name, thing) { - if (thing === null || typeof thing === 'undefined') { - throw new Error("Expected " + name + " to be present"); - } - - return thing; -} -function unique(arr) { - var result = {}; - - for (var _i4 = 0; _i4 < arr.length; _i4++) { - var item = arr[_i4]; - // eslint-disable-next-line const-immutable/no-mutation - result[item] = true; - } - - return Object.keys(result); -} -// CONCATENATED MODULE: ./node_modules/belter/src/constants.js -var KEY_CODES = { - ENTER: 13 -}; -// CONCATENATED MODULE: ./node_modules/belter/src/dom.js - - -/* eslint max-lines: off */ - - - - - - -function isDocumentReady() { - return Boolean(document.body) && document.readyState === 'complete'; -} -function urlEncode(str) { - return str.replace(/\?/g, '%3F').replace(/&/g, '%26').replace(/#/g, '%23').replace(/\+/g, '%2B'); -} -function waitForWindowReady() { - return inlineMemoize(waitForWindowReady, function () { - return new promise_ZalgoPromise(function (resolve) { - if (isDocumentReady()) { - resolve(); - } - - window.addEventListener('load', function () { - return resolve(); - }); - }); - }); -} -function waitForDocumentReady() { - return inlineMemoize(waitForDocumentReady, function () { - return new promise_ZalgoPromise(function (resolve) { - if (isDocumentReady()) { - return resolve(); - } - - var interval = setInterval(function () { - if (isDocumentReady()) { - clearInterval(interval); - return resolve(); - } - }, 10); - }); - }); -} -function waitForDocumentBody() { - return waitForDocumentReady().then(function () { - if (document.body) { - return document.body; - } - - throw new Error('Document ready but document.body not present'); - }); -} -function parseQuery(queryString) { - return inlineMemoize(parseQuery, function () { - var params = {}; - - if (!queryString) { - return params; - } - - if (queryString.indexOf('=') === -1) { - return params; - } - - for (var _i2 = 0, _queryString$split2 = queryString.split('&'); _i2 < _queryString$split2.length; _i2++) { - var pair = _queryString$split2[_i2]; - pair = pair.split('='); - - if (pair[0] && pair[1]) { - params[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1]); - } - } - - return params; - }, [queryString]); -} -function getQueryParam(name) { - return parseQuery(window.location.search.slice(1))[name]; -} -function urlWillRedirectPage(url) { - if (url.indexOf('#') === -1) { - return true; - } - - if (url.indexOf('#') === 0) { - return false; - } - - if (url.split('#')[0] === window.location.href.split('#')[0]) { - return false; - } - - return true; -} -function formatQuery(obj) { - if (obj === void 0) { - obj = {}; - } - - return Object.keys(obj).filter(function (key) { - return typeof obj[key] === 'string'; - }).map(function (key) { - return urlEncode(key) + "=" + urlEncode(obj[key]); - }).join('&'); -} -function extendQuery(originalQuery, props) { - if (props === void 0) { - props = {}; - } - - if (!props || !Object.keys(props).length) { - return originalQuery; - } - - return formatQuery(_extends({}, parseQuery(originalQuery), {}, props)); -} -function extendUrl(url, options) { - if (options === void 0) { - options = {}; - } - - var query = options.query || {}; - var hash = options.hash || {}; - var originalUrl; - var originalQuery; - var originalHash; - - var _url$split = url.split('#'); - - originalUrl = _url$split[0]; - originalHash = _url$split[1]; - - var _originalUrl$split = originalUrl.split('?'); - - originalUrl = _originalUrl$split[0]; - originalQuery = _originalUrl$split[1]; - var queryString = extendQuery(originalQuery, query); - var hashString = extendQuery(originalHash, hash); - - if (queryString) { - originalUrl = originalUrl + "?" + queryString; - } - - if (hashString) { - originalUrl = originalUrl + "#" + hashString; - } - - return originalUrl; -} -function redirect(url, win) { - if (win === void 0) { - win = window; - } - - return new promise_ZalgoPromise(function (resolve) { - win.location = url; - - if (!urlWillRedirectPage(url)) { - resolve(); - } - }); -} -function hasMetaViewPort() { - var meta = document.querySelector('meta[name=viewport]'); - - if (isDevice() && window.screen.width < 660 && !meta) { - return false; - } - - return true; -} -function isElementVisible(el) { - return Boolean(el.offsetWidth || el.offsetHeight || el.getClientRects().length); -} -function enablePerformance() { - return inlineMemoize(enablePerformance, function () { - /* eslint-disable compat/compat */ - return Boolean(window.performance && performance.now && performance.timing && performance.timing.connectEnd && performance.timing.navigationStart && Math.abs(performance.now() - Date.now()) > 1000 && performance.now() - (performance.timing.connectEnd - performance.timing.navigationStart) > 0); - /* eslint-enable compat/compat */ - }); -} -function getPageRenderTime() { - return waitForDocumentReady().then(function () { - if (!enablePerformance()) { - return; - } - - var timing = window.performance.timing; - - if (timing.connectEnd && timing.domInteractive) { - return timing.domInteractive - timing.connectEnd; - } - }); -} -function htmlEncode(html) { - if (html === void 0) { - html = ''; - } - - return html.toString().replace(/&/g, '&').replace(//g, '>').replace(/"/g, '"').replace(/'/g, ''').replace(/\//g, '/'); -} -function dom_isBrowser() { - return typeof window !== 'undefined'; -} -function querySelectorAll(selector, doc) { - if (doc === void 0) { - doc = window.document; - } - - return Array.prototype.slice.call(doc.querySelectorAll(selector)); -} -function onClick(element, handler) { - element.addEventListener('touchstart', src_util_noop); - element.addEventListener('click', handler); - element.addEventListener('keypress', function (event) { - // $FlowFixMe - if (event.keyCode === KEY_CODES.ENTER) { - return handler(event); - } - }); -} -function getScript(_ref) { - var _ref$host = _ref.host, - host = _ref$host === void 0 ? window.location.host : _ref$host, - path = _ref.path; - return inlineMemoize(getScript, function () { - var url = "" + host + path; - var scripts = Array.prototype.slice.call(document.getElementsByTagName('script')); - - for (var _i4 = 0; _i4 < scripts.length; _i4++) { - var script = scripts[_i4]; - - if (!script.src) { - continue; - } - - var src = script.src.replace(/^https?:\/\//, '').split('?')[0]; - - if (src === url) { - return script; - } - } - }, [path]); -} -function isLocalStorageEnabled() { - return inlineMemoize(isLocalStorageEnabled, function () { - try { - if (typeof window === 'undefined') { - return false; - } - - if (window.localStorage) { - var value = Math.random().toString(); - window.localStorage.setItem('__test__localStorage__', value); - var result = window.localStorage.getItem('__test__localStorage__'); - window.localStorage.removeItem('__test__localStorage__'); - - if (value === result) { - return true; - } - } - } catch (err) {// pass - } - - return false; - }); -} -function getBrowserLocales() { - var nav = window.navigator; - var locales = nav.languages ? Array.prototype.slice.apply(nav.languages) : []; - - if (nav.language) { - locales.push(nav.language); - } - - if (nav.userLanguage) { - locales.push(nav.userLanguage); - } - - return locales.map(function (locale) { - if (locale && locale.match(/^[a-z]{2}[-_][A-Z]{2}$/)) { - var _locale$split = locale.split(/[-_]/), - lang = _locale$split[0], - country = _locale$split[1]; - - return { - country: country, - lang: lang - }; - } - - if (locale && locale.match(/^[a-z]{2}$/)) { - return { - lang: locale - }; - } - - return null; - }).filter(Boolean); -} -function appendChild(container, child) { - container.appendChild(child); -} -function isElement(element) { - if (element instanceof window.Element) { - return true; - } - - if (element !== null && typeof element === 'object' && element.nodeType === 1 && typeof element.style === 'object' && typeof element.ownerDocument === 'object') { - return true; - } - - return false; -} -function getElementSafe(id, doc) { - if (doc === void 0) { - doc = document; - } - - if (isElement(id)) { - // $FlowFixMe - return id; - } - - if (typeof id === 'string') { - return doc.querySelector(id); - } -} -function getElement(id, doc) { - if (doc === void 0) { - doc = document; - } - - var element = getElementSafe(id, doc); - - if (element) { - return element; - } - - throw new Error("Can not find element: " + stringify(id)); -} -function elementReady(id) { - return new promise_ZalgoPromise(function (resolve, reject) { - var name = stringify(id); - var el = getElementSafe(id); - - if (el) { - return resolve(el); - } - - if (isDocumentReady()) { - return reject(new Error("Document is ready and element " + name + " does not exist")); - } - - var interval = setInterval(function () { - el = getElementSafe(id); - - if (el) { - clearInterval(interval); - return resolve(el); - } - - if (isDocumentReady()) { - clearInterval(interval); - return reject(new Error("Document is ready and element " + name + " does not exist")); - } - }, 10); - }); -} -function PopupOpenError(message) { - this.message = message; -} -PopupOpenError.prototype = Object.create(Error.prototype); -function popup(url, options) { - // $FlowFixMe - options = options || {}; - var _options = options, - width = _options.width, - height = _options.height; - var top = 0; - var left = 0; - - if (width) { - if (window.outerWidth) { - left = Math.round((window.outerWidth - width) / 2) + window.screenX; - } else if (window.screen.width) { - left = Math.round((window.screen.width - width) / 2); - } - } - - if (height) { - if (window.outerHeight) { - top = Math.round((window.outerHeight - height) / 2) + window.screenY; - } else if (window.screen.height) { - top = Math.round((window.screen.height - height) / 2); - } - } - - if (width && height) { - options = _extends({ - top: top, - left: left, - width: width, - height: height, - status: 1, - toolbar: 0, - menubar: 0, - resizable: 1, - scrollbars: 1 - }, options); - } - - var name = options.name || ''; - delete options.name; // eslint-disable-next-line array-callback-return - - var params = Object.keys(options).map(function (key) { - // $FlowFixMe - if (options[key] !== null && options[key] !== undefined) { - return key + "=" + stringify(options[key]); - } - }).filter(Boolean).join(','); - var win; - - try { - win = window.open(url, name, params, true); - } catch (err) { - throw new PopupOpenError("Can not open popup window - " + (err.stack || err.message)); - } - - if (isWindowClosed(win)) { - var err = new PopupOpenError("Can not open popup window - blocked"); - throw err; - } - - window.addEventListener('unload', function () { - return win.close(); - }); - return win; -} -function writeToWindow(win, html) { - try { - win.document.open(); - win.document.write(html); - win.document.close(); - } catch (err) { - try { - win.location = "javascript: document.open(); document.write(" + JSON.stringify(html) + "); document.close();"; - } catch (err2) {// pass - } - } -} -function writeElementToWindow(win, el) { - var tag = el.tagName.toLowerCase(); - - if (tag !== 'html') { - throw new Error("Expected element to be html, got " + tag); - } - - var documentElement = win.document.documentElement; - - for (var _i6 = 0, _arrayFrom2 = arrayFrom(documentElement.children); _i6 < _arrayFrom2.length; _i6++) { - var child = _arrayFrom2[_i6]; - documentElement.removeChild(child); - } - - for (var _i8 = 0, _arrayFrom4 = arrayFrom(el.children); _i8 < _arrayFrom4.length; _i8++) { - var _child = _arrayFrom4[_i8]; - documentElement.appendChild(_child); - } -} -function setStyle(el, styleText, doc) { - if (doc === void 0) { - doc = window.document; - } - - // $FlowFixMe - if (el.styleSheet) { - // $FlowFixMe - el.styleSheet.cssText = styleText; - } else { - el.appendChild(doc.createTextNode(styleText)); - } -} -var awaitFrameLoadPromises; -function awaitFrameLoad(frame) { - awaitFrameLoadPromises = awaitFrameLoadPromises || new weakmap_CrossDomainSafeWeakMap(); - - if (awaitFrameLoadPromises.has(frame)) { - var _promise = awaitFrameLoadPromises.get(frame); - - if (_promise) { - return _promise; - } - } - - var promise = new promise_ZalgoPromise(function (resolve, reject) { - frame.addEventListener('load', function () { - linkFrameWindow(frame); - resolve(frame); - }); - frame.addEventListener('error', function (err) { - if (frame.contentWindow) { - resolve(frame); - } else { - reject(err); - } - }); - }); - awaitFrameLoadPromises.set(frame, promise); - return promise; -} -function awaitFrameWindow(frame) { - return awaitFrameLoad(frame).then(function (loadedFrame) { - if (!loadedFrame.contentWindow) { - throw new Error("Could not find window in iframe"); - } - - return loadedFrame.contentWindow; - }); -} -function createElement(tag, options, container) { - if (tag === void 0) { - tag = 'div'; - } - - if (options === void 0) { - options = {}; - } - - tag = tag.toLowerCase(); - var element = document.createElement(tag); - - if (options.style) { - extend(element.style, options.style); - } - - if (options.class) { - element.className = options.class.join(' '); - } - - if (options.id) { - element.setAttribute('id', options.id); - } - - if (options.attributes) { - for (var _i10 = 0, _Object$keys2 = Object.keys(options.attributes); _i10 < _Object$keys2.length; _i10++) { - var key = _Object$keys2[_i10]; - element.setAttribute(key, options.attributes[key]); - } - } - - if (options.styleSheet) { - setStyle(element, options.styleSheet); - } - - if (container) { - appendChild(container, element); - } - - if (options.html) { - if (tag === 'iframe') { - // $FlowFixMe - if (!container || !element.contentWindow) { - throw new Error("Iframe html can not be written unless container provided and iframe in DOM"); - } // $FlowFixMe - - - writeToWindow(element.contentWindow, options.html); - } else { - element.innerHTML = options.html; - } - } - - return element; -} -function iframe(options, container) { - if (options === void 0) { - options = {}; - } - - var attributes = options.attributes || {}; - var style = options.style || {}; - var frame = createElement('iframe', { - attributes: _extends({ - allowTransparency: 'true' - }, attributes), - style: _extends({ - backgroundColor: 'transparent', - border: 'none' - }, style), - html: options.html, - class: options.class - }); - var isIE = window.navigator.userAgent.match(/MSIE|Edge/i); - - if (!frame.hasAttribute('id')) { - frame.setAttribute('id', uniqueID()); - } // $FlowFixMe - - - awaitFrameLoad(frame); - - if (container) { - var el = getElement(container); - el.appendChild(frame); - } - - if (options.url || isIE) { - frame.setAttribute('src', options.url || 'about:blank'); - } // $FlowFixMe - - - return frame; -} -function addEventListener(obj, event, handler) { - obj.addEventListener(event, handler); - return { - cancel: function cancel() { - obj.removeEventListener(event, handler); - } - }; -} -function bindEvents(element, eventNames, handler) { - handler = once(handler); - - for (var _i12 = 0; _i12 < eventNames.length; _i12++) { - var eventName = eventNames[_i12]; - element.addEventListener(eventName, handler); - } - - return { - cancel: once(function () { - for (var _i14 = 0; _i14 < eventNames.length; _i14++) { - var _eventName = eventNames[_i14]; - element.removeEventListener(_eventName, handler); - } - }) - }; -} -var VENDOR_PREFIXES = ['webkit', 'moz', 'ms', 'o']; -function setVendorCSS(element, name, value) { - // $FlowFixMe - element.style[name] = value; - var capitalizedName = capitalizeFirstLetter(name); - - for (var _i16 = 0; _i16 < VENDOR_PREFIXES.length; _i16++) { - var prefix = VENDOR_PREFIXES[_i16]; - // $FlowFixMe - element.style["" + prefix + capitalizedName] = value; - } -} -var ANIMATION_START_EVENTS = ['animationstart', 'webkitAnimationStart', 'oAnimationStart', 'MSAnimationStart']; -var ANIMATION_END_EVENTS = ['animationend', 'webkitAnimationEnd', 'oAnimationEnd', 'MSAnimationEnd']; -function animate(element, name, clean, timeout) { - if (timeout === void 0) { - timeout = 1000; - } - - return new promise_ZalgoPromise(function (resolve, reject) { - var el = getElement(element); - - if (!el) { - return resolve(); - } - - var hasStarted = false; - var startTimeout; - var endTimeout; - var startEvent; - var endEvent; - - function cleanUp() { - clearTimeout(startTimeout); - clearTimeout(endTimeout); - startEvent.cancel(); - endEvent.cancel(); - } - - startEvent = bindEvents(el, ANIMATION_START_EVENTS, function (event) { - // $FlowFixMe - if (event.target !== el || event.animationName !== name) { - return; - } - - clearTimeout(startTimeout); - event.stopPropagation(); - startEvent.cancel(); - hasStarted = true; - endTimeout = setTimeout(function () { - cleanUp(); - resolve(); - }, timeout); - }); - endEvent = bindEvents(el, ANIMATION_END_EVENTS, function (event) { - // $FlowFixMe - if (event.target !== el || event.animationName !== name) { - return; - } - - cleanUp(); // $FlowFixMe - - if (typeof event.animationName === 'string' && event.animationName !== name) { - return reject("Expected animation name to be " + name + ", found " + event.animationName); - } - - return resolve(); - }); - setVendorCSS(el, 'animationName', name); - startTimeout = setTimeout(function () { - if (!hasStarted) { - cleanUp(); - return resolve(); - } - }, 200); - - if (clean) { - clean(cleanUp); - } - }); -} -var STYLE = { - DISPLAY: { - NONE: 'none', - BLOCK: 'block' - }, - VISIBILITY: { - VISIBLE: 'visible', - HIDDEN: 'hidden' - }, - IMPORTANT: 'important' -}; -function makeElementVisible(element) { - element.style.setProperty('visibility', ''); -} -function makeElementInvisible(element) { - element.style.setProperty('visibility', STYLE.VISIBILITY.HIDDEN, STYLE.IMPORTANT); -} -function showElement(element) { - element.style.setProperty('display', ''); -} -function hideElement(element) { - element.style.setProperty('display', STYLE.DISPLAY.NONE, STYLE.IMPORTANT); -} -function destroyElement(element) { - if (element && element.parentNode) { - element.parentNode.removeChild(element); - } -} -function showAndAnimate(element, name, clean) { - var animation = animate(element, name, clean); - showElement(element); - return animation; -} -function animateAndHide(element, name, clean) { - return animate(element, name, clean).then(function () { - hideElement(element); - }); -} -function addClass(element, name) { - element.classList.add(name); -} -function removeClass(element, name) { - element.classList.remove(name); -} -function isElementClosed(el) { - if (!el || !el.parentNode) { - return true; - } - - return false; -} -function watchElementForClose(element, handler) { - handler = once(handler); - var interval; - - if (isElementClosed(element)) { - handler(); - } else { - interval = safeInterval(function () { - if (isElementClosed(element)) { - interval.cancel(); - handler(); - } - }, 50); - } - - return { - cancel: function cancel() { - if (interval) { - interval.cancel(); - } - } - }; -} -function fixScripts(el, doc) { - if (doc === void 0) { - doc = window.document; - } - - for (var _i18 = 0, _querySelectorAll2 = querySelectorAll('script', el); _i18 < _querySelectorAll2.length; _i18++) { - var script = _querySelectorAll2[_i18]; - var parentNode = script.parentNode; - - if (!parentNode) { - continue; - } - - var newScript = doc.createElement('script'); - newScript.text = script.textContent; - parentNode.replaceChild(newScript, script); - } -} -function onResize(el, handler, _temp) { - var _ref2 = _temp === void 0 ? {} : _temp, - _ref2$width = _ref2.width, - width = _ref2$width === void 0 ? true : _ref2$width, - _ref2$height = _ref2.height, - height = _ref2$height === void 0 ? true : _ref2$height, - _ref2$interval = _ref2.interval, - interval = _ref2$interval === void 0 ? 100 : _ref2$interval, - _ref2$win = _ref2.win, - win = _ref2$win === void 0 ? window : _ref2$win; - - var currentWidth = el.offsetWidth; - var currentHeight = el.offsetHeight; - handler({ - width: currentWidth, - height: currentHeight - }); - - var check = function check() { - var newWidth = el.offsetWidth; - var newHeight = el.offsetHeight; - - if (width && newWidth !== currentWidth || height && newHeight !== currentHeight) { - handler({ - width: newWidth, - height: newHeight - }); - } - - currentWidth = newWidth; - currentHeight = newHeight; - }; - - var observer; - var timeout; - - if (typeof win.ResizeObserver !== 'undefined') { - observer = new win.ResizeObserver(check); - observer.observe(el); - } else if (typeof win.MutationObserver !== 'undefined') { - observer = new win.MutationObserver(check); - observer.observe(el, { - attributes: true, - childList: true, - subtree: true, - characterData: false - }); - win.addEventListener('resize', check); - } else { - var loop = function loop() { - check(); - timeout = setTimeout(loop, interval); - }; - - loop(); - } - - return { - cancel: function cancel() { - observer.disconnect(); - window.removeEventListener('resize', check); - clearTimeout(timeout); - } - }; -} -function getResourceLoadTime(url) { - if (!enablePerformance()) { - return; - } - - if (!window.performance || typeof window.performance.getEntries !== 'function') { - return; - } - - var entries = window.performance.getEntries(); - - for (var i = 0; i < entries.length; i++) { - var entry = entries[i]; - - if (entry && entry.name && entry.name.indexOf(url) === 0 && typeof entry.duration === 'number') { - return Math.floor(entry.duration); - } - } -} -// CONCATENATED MODULE: ./node_modules/belter/src/storage.js - - -var DEFAULT_SESSION_STORAGE = 20 * 60 * 1000; -function getStorage(_ref) { - var name = _ref.name, - _ref$lifetime = _ref.lifetime, - lifetime = _ref$lifetime === void 0 ? DEFAULT_SESSION_STORAGE : _ref$lifetime; - return inlineMemoize(getStorage, function () { - var STORAGE_KEY = "__" + name + "_storage__"; - var accessedStorage; - - function getState(handler) { - var localStorageEnabled = isLocalStorageEnabled(); - var storage; - - if (accessedStorage) { - storage = accessedStorage; - } - - if (!storage && localStorageEnabled) { - var rawStorage = window.localStorage.getItem(STORAGE_KEY); - - if (rawStorage) { - storage = JSON.parse(rawStorage); - } - } - - if (!storage) { - storage = getGlobal()[STORAGE_KEY]; - } - - if (!storage) { - storage = { - id: uniqueID() - }; - } - - if (!storage.id) { - storage.id = uniqueID(); - } - - accessedStorage = storage; - var result = handler(storage); - - if (localStorageEnabled) { - window.localStorage.setItem(STORAGE_KEY, JSON.stringify(storage)); - } else { - getGlobal()[STORAGE_KEY] = storage; - } - - accessedStorage = null; - return result; - } - - function getID() { - return getState(function (storage) { - return storage.id; - }); - } - - function getSession(handler) { - return getState(function (storage) { - var session = storage.__session__; - var now = Date.now(); - - if (session && now - session.created > lifetime) { - session = null; - } - - if (!session) { - session = { - guid: uniqueID(), - created: now - }; - } - - storage.__session__ = session; - return handler(session); - }); - } - - function getSessionState(handler) { - return getSession(function (session) { - session.state = session.state || {}; - return handler(session.state); - }); - } - - function getSessionID() { - return getSession(function (session) { - return session.guid; - }); - } - - return { - getState: getState, - getID: getID, - getSessionState: getSessionState, - getSessionID: getSessionID - }; - }, [{ - name: name, - lifetime: lifetime - }]); -} -// CONCATENATED MODULE: ./node_modules/belter/src/experiment.js - - - -function getBelterExperimentStorage() { - return getStorage({ - name: 'belter_experiment' - }); -} - -function isEventUnique(name) { - return getBelterExperimentStorage().getSessionState(function (state) { - state.loggedBeacons = state.loggedBeacons || []; - - if (state.loggedBeacons.indexOf(name) === -1) { - state.loggedBeacons.push(name); - return true; - } - - return false; - }); -} - -function getThrottlePercentile(name) { - return getBelterExperimentStorage().getState(function (state) { - state.throttlePercentiles = state.throttlePercentiles || {}; - state.throttlePercentiles[name] = state.throttlePercentiles[name] || Math.floor(Math.random() * 100); - return state.throttlePercentiles[name]; - }); -} - -var THROTTLE_GROUP = { - TEST: 'test', - CONTROL: 'control', - THROTTLE: 'throttle' -}; -function experiment(_ref) { - var name = _ref.name, - _ref$sample = _ref.sample, - sample = _ref$sample === void 0 ? 50 : _ref$sample, - _ref$logTreatment = _ref.logTreatment, - logTreatment = _ref$logTreatment === void 0 ? src_util_noop : _ref$logTreatment, - _ref$logCheckpoint = _ref.logCheckpoint, - logCheckpoint = _ref$logCheckpoint === void 0 ? src_util_noop : _ref$logCheckpoint; - var throttle = getThrottlePercentile(name); - var group; - - if (throttle < sample) { - group = THROTTLE_GROUP.TEST; - } else if (sample >= 50 || sample <= throttle && throttle < sample * 2) { - group = THROTTLE_GROUP.CONTROL; - } else { - group = THROTTLE_GROUP.THROTTLE; - } - - var treatment = name + "_" + group; - var started = false; - var forced = false; - - try { - if (window.localStorage && window.localStorage.getItem(name)) { - forced = true; - } - } catch (err) {// pass - } - - return { - isEnabled: function isEnabled() { - return group === THROTTLE_GROUP.TEST || forced; - }, - isDisabled: function isDisabled() { - return group !== THROTTLE_GROUP.TEST && !forced; - }, - getTreatment: function getTreatment() { - return treatment; - }, - log: function log(checkpoint, payload) { - if (payload === void 0) { - payload = {}; - } - - if (!started) { - return this; - } - - if (isEventUnique(name + "_" + treatment + "_" + JSON.stringify(payload))) { - logTreatment({ - name: name, - treatment: treatment, - payload: payload - }); - } - - if (isEventUnique(name + "_" + treatment + "_" + checkpoint + "_" + JSON.stringify(payload))) { - logCheckpoint({ - name: name, - treatment: treatment, - checkpoint: checkpoint, - payload: payload - }); - } - - return this; - }, - logStart: function logStart(payload) { - if (payload === void 0) { - payload = {}; - } - - started = true; - return this.log("start", payload); - }, - logComplete: function logComplete(payload) { - if (payload === void 0) { - payload = {}; - } - - return this.log("complete", payload); - } - }; -} -// CONCATENATED MODULE: ./node_modules/belter/src/global.js - -function getGlobalNameSpace(_ref) { - var name = _ref.name, - _ref$version = _ref.version, - version = _ref$version === void 0 ? 'latest' : _ref$version; - var global = getGlobal(); - var globalKey = "__" + name + "__" + version + "_global__"; - var namespace = global[globalKey] = global[globalKey] || {}; - return { - get: function get(key, defValue) { - // $FlowFixMe - defValue = defValue || {}; - var item = namespace[key] = namespace[key] || defValue; - return item; - } - }; -} -// CONCATENATED MODULE: ./node_modules/belter/src/http.js - -var HEADERS = { - CONTENT_TYPE: 'content-type', - ACCEPT: 'accept' -}; -var http_headerBuilders = []; - -function parseHeaders(rawHeaders) { - if (rawHeaders === void 0) { - rawHeaders = ''; - } - - var result = {}; - - for (var _i2 = 0, _rawHeaders$trim$spli2 = rawHeaders.trim().split('\n'); _i2 < _rawHeaders$trim$spli2.length; _i2++) { - var line = _rawHeaders$trim$spli2[_i2]; - - var _line$split = line.split(':'), - _key = _line$split[0], - values = _line$split.slice(1); - - result[_key.toLowerCase()] = values.join(':').trim(); - } - - return result; -} - -function request(_ref) { - var url = _ref.url, - _ref$method = _ref.method, - method = _ref$method === void 0 ? 'get' : _ref$method, - _ref$headers = _ref.headers, - headers = _ref$headers === void 0 ? {} : _ref$headers, - json = _ref.json, - data = _ref.data, - body = _ref.body, - _ref$win = _ref.win, - win = _ref$win === void 0 ? window : _ref$win, - _ref$timeout = _ref.timeout, - timeout = _ref$timeout === void 0 ? 0 : _ref$timeout; - return new promise_ZalgoPromise(function (resolve, reject) { - if (json && data || json && body || data && json) { - throw new Error("Only options.json or options.data or options.body should be passed"); - } - - var normalizedHeaders = {}; - - for (var _i4 = 0, _Object$keys2 = Object.keys(headers); _i4 < _Object$keys2.length; _i4++) { - var _key2 = _Object$keys2[_i4]; - normalizedHeaders[_key2.toLowerCase()] = headers[_key2]; - } - - if (json) { - normalizedHeaders[HEADERS.CONTENT_TYPE] = normalizedHeaders[HEADERS.CONTENT_TYPE] || 'application/json'; - } else if (data || body) { - normalizedHeaders[HEADERS.CONTENT_TYPE] = normalizedHeaders[HEADERS.CONTENT_TYPE] || 'application/x-www-form-urlencoded; charset=utf-8'; - } - - normalizedHeaders[HEADERS.ACCEPT] = normalizedHeaders[HEADERS.ACCEPT] || 'application/json'; - - for (var _i6 = 0; _i6 < http_headerBuilders.length; _i6++) { - var headerBuilder = http_headerBuilders[_i6]; - var builtHeaders = headerBuilder(); - - for (var _i8 = 0, _Object$keys4 = Object.keys(builtHeaders); _i8 < _Object$keys4.length; _i8++) { - var _key3 = _Object$keys4[_i8]; - normalizedHeaders[_key3.toLowerCase()] = builtHeaders[_key3]; - } - } - - var xhr = new win.XMLHttpRequest(); - xhr.addEventListener('load', function xhrLoad() { - var responseHeaders = parseHeaders(this.getAllResponseHeaders()); - - if (!this.status) { - return reject(new Error("Request to " + method.toLowerCase() + " " + url + " failed: no response status code.")); - } - - var contentType = responseHeaders['content-type']; - var isJSON = contentType && (contentType.indexOf('application/json') === 0 || contentType.indexOf('text/json') === 0); - var responseBody = this.responseText; - - try { - responseBody = JSON.parse(responseBody); - } catch (err) { - if (isJSON) { - return reject(new Error("Invalid json: " + this.responseText + ".")); - } - } - - var res = { - status: this.status, - headers: responseHeaders, - body: responseBody - }; - return resolve(res); - }, false); - xhr.addEventListener('error', function (evt) { - reject(new Error("Request to " + method.toLowerCase() + " " + url + " failed: " + evt.toString() + ".")); - }, false); - xhr.open(method, url, true); - - for (var _key4 in normalizedHeaders) { - if (normalizedHeaders.hasOwnProperty(_key4)) { - xhr.setRequestHeader(_key4, normalizedHeaders[_key4]); - } - } - - if (json) { - body = JSON.stringify(json); - } else if (data) { - body = Object.keys(data).map(function (key) { - return encodeURIComponent(key) + "=" + (data ? encodeURIComponent(data[key]) : ''); - }).join('&'); - } - - xhr.timeout = timeout; - - xhr.ontimeout = function xhrTimeout() { - reject(new Error("Request to " + method.toLowerCase() + " " + url + " has timed out")); - }; - - xhr.send(body); - }); -} -function http_addHeaderBuilder(method) { - http_headerBuilders.push(method); -} -// CONCATENATED MODULE: ./node_modules/belter/src/types.js -// export something to force webpack to see this as an ES module -var types_TYPES = true; -// CONCATENATED MODULE: ./node_modules/belter/src/decorators.js - -function memoized(target, name, descriptor) { - descriptor.value = memoize(descriptor.value, { - name: name, - thisNamespace: true - }); -} -function decorators_promise(target, name, descriptor) { - descriptor.value = promisify(descriptor.value, { - name: name - }); -} -// CONCATENATED MODULE: ./node_modules/belter/src/css.js -function isPerc(str) { - return typeof str === 'string' && /^[0-9]+%$/.test(str); -} -function isPx(str) { - return typeof str === 'string' && /^[0-9]+px$/.test(str); -} -function toNum(val) { - if (typeof val === 'number') { - return val; - } - - var match = val.match(/^([0-9]+)(px|%)$/); - - if (!match) { - throw new Error("Could not match css value from " + val); - } - - return parseInt(match[1], 10); -} -function toPx(val) { - return toNum(val) + "px"; -} -function toCSS(val) { - if (typeof val === 'number') { - return toPx(val); - } - - return isPerc(val) ? val : toPx(val); -} -function percOf(num, perc) { - return parseInt(num * toNum(perc) / 100, 10); -} -function normalizeDimension(dim, max) { - if (typeof dim === 'number') { - return dim; - } else if (isPerc(dim)) { - return percOf(max, dim); - } else if (isPx(dim)) { - return toNum(dim); - } else { - throw new Error("Can not normalize dimension: " + dim); - } -} -// CONCATENATED MODULE: ./node_modules/belter/src/test.js - - -function wrapPromise(method, _temp) { - var _ref = _temp === void 0 ? {} : _temp, - _ref$timeout = _ref.timeout, - timeout = _ref$timeout === void 0 ? 5000 : _ref$timeout; - - var expected = []; - var promises = []; - var timer = setTimeout(function () { - if (expected.length) { - promises.push(promise_ZalgoPromise.asyncReject(new Error("Expected " + expected[0] + " to be called"))); - } - }, timeout); - - var expect = function expect(name, fn) { - if (fn === void 0) { - fn = src_util_noop; - } - - expected.push(name); // $FlowFixMe - - return function expectWrapper() { - var _this = this; - - for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { - args[_key] = arguments[_key]; - } - - removeFromArray(expected, name); // $FlowFixMe - - var _tryCatch = tryCatch(function () { - var _fn; - - return (_fn = fn).call.apply(_fn, [_this].concat(args)); - }), - result = _tryCatch.result, - error = _tryCatch.error; - - if (error) { - promises.push(promise_ZalgoPromise.asyncReject(error)); - throw error; - } - - promises.push(promise_ZalgoPromise.resolve(result)); - return result; - }; - }; - - var avoid = function avoid(name, fn) { - if (fn === void 0) { - fn = src_util_noop; - } - - // $FlowFixMe - return function avoidWrapper() { - var _fn2; - - promises.push(promise_ZalgoPromise.asyncReject(new Error("Expected " + name + " to not be called"))); // $FlowFixMe - - for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { - args[_key2] = arguments[_key2]; - } - - return (_fn2 = fn).call.apply(_fn2, [this].concat(args)); - }; - }; - - var expectError = function expectError(name, fn) { - if (fn === void 0) { - fn = src_util_noop; - } - - expected.push(name); // $FlowFixMe - - return function expectErrorWrapper() { - var _this2 = this; - - for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) { - args[_key3] = arguments[_key3]; - } - - removeFromArray(expected, name); // $FlowFixMe - - var _tryCatch2 = tryCatch(function () { - var _fn3; - - return (_fn3 = fn).call.apply(_fn3, [_this2].concat(args)); - }), - result = _tryCatch2.result, - error = _tryCatch2.error; - - if (error) { - throw error; - } - - promises.push(promise_ZalgoPromise.resolve(result).then(function () { - throw new Error("Expected " + name + " to throw an error"); - }, src_util_noop)); - return result; - }; - }; - - promises.push(promise_ZalgoPromise.try(function () { - return method({ - expect: expect, - avoid: avoid, - expectError: expectError, - error: avoid - }); - })); - - var drain = function drain() { - return promise_ZalgoPromise.try(function () { - if (promises.length) { - return promises.pop(); - } - }).then(function () { - if (promises.length) { - return drain(); - } - - if (expected.length) { - return promise_ZalgoPromise.delay(10).then(drain); - } - }); - }; - - return drain().then(function () { - clearTimeout(timer); - }); -} -// CONCATENATED MODULE: ./node_modules/belter/src/index.js - - - - - - - - - - - -// CONCATENATED MODULE: ./src/constants.js -var LOG_LEVEL = { - DEBUG: 'debug', - INFO: 'info', - WARN: 'warn', - ERROR: 'error' -}; -var constants_PROTOCOL = { - FILE: 'file:' -}; -// CONCATENATED MODULE: ./src/config.js - -var AUTO_FLUSH_LEVEL = [LOG_LEVEL.WARN, LOG_LEVEL.ERROR]; -var LOG_LEVEL_PRIORITY = [LOG_LEVEL.ERROR, LOG_LEVEL.WARN, LOG_LEVEL.INFO, LOG_LEVEL.DEBUG]; -var FLUSH_INTERVAL = 60 * 1000; -var DEFAULT_LOG_LEVEL = false ? undefined : LOG_LEVEL.WARN; -// CONCATENATED MODULE: ./src/util.js -function simpleRequest(_ref) { - var _ref$method = _ref.method, - method = _ref$method === void 0 ? 'GET' : _ref$method, - url = _ref.url, - headers = _ref.headers, - json = _ref.json; - var req = new XMLHttpRequest(); - req.open(method, url); - - for (var _i2 = 0, _Object$keys2 = Object.keys(headers); _i2 < _Object$keys2.length; _i2++) { - var header = _Object$keys2[_i2]; - req.setRequestHeader(header, headers[header]); - } - - req.send(JSON.stringify(json)); -} -// CONCATENATED MODULE: ./src/logger.js - - - - - - - -function extendIfDefined(target, source) { - for (var key in source) { - if (source.hasOwnProperty(key) && source[key] && !target[key]) { - target[key] = source[key]; - } - } -} - -function Logger(_ref) { - var url = _ref.url, - prefix = _ref.prefix, - _ref$logLevel = _ref.logLevel, - logLevel = _ref$logLevel === void 0 ? DEFAULT_LOG_LEVEL : _ref$logLevel, - _ref$flushInterval = _ref.flushInterval, - flushInterval = _ref$flushInterval === void 0 ? FLUSH_INTERVAL : _ref$flushInterval; - var events = []; - var tracking = []; - var payloadBuilders = []; - var metaBuilders = []; - var trackingBuilders = []; - var headerBuilders = []; - - function print(level, event, payload) { - if (true) { - return; - } - - if (LOG_LEVEL_PRIORITY.indexOf(level) > LOG_LEVEL_PRIORITY.indexOf(logLevel)) { - return; - } - - var args = [event]; - args.push(payload); - - if (payload.error || payload.warning) { - args.push('\n\n', payload.error || payload.warning); - } - - try { - if (window.console[level] && window.console[level].apply) { - window.console[level].apply(window.console, args); - } else if (window.console.log && window.console.log.apply) { - window.console.log.apply(window.console, args); - } - } catch (err) {// pass - } - } - - function buildPayloads() { - var meta = {}; - - for (var _i2 = 0; _i2 < metaBuilders.length; _i2++) { - var builder = metaBuilders[_i2]; - extendIfDefined(meta, builder(meta)); - } - - var headers = {}; - - for (var _i4 = 0; _i4 < headerBuilders.length; _i4++) { - var _builder = headerBuilders[_i4]; - extendIfDefined(headers, _builder(headers)); - } - - return { - meta: meta, - headers: headers - }; - } - - function immediateFlush() { - if (!dom_isBrowser() || window.location.protocol === constants_PROTOCOL.FILE || !events.length && !tracking.length) { - if (true) { - return; - } else {} - } - - var _buildPayloads = buildPayloads(), - meta = _buildPayloads.meta, - headers = _buildPayloads.headers; - - var json = { - events: events, - meta: meta, - tracking: tracking - }; - var method = 'POST'; - events = []; - tracking = []; - - if (true) { - simpleRequest({ - method: method, - url: url, - headers: headers, - json: json - }); - } else {} - } - - var flush = true ? immediateFlush : undefined; - - function enqueue(level, event, payload) { - events.push({ - level: level, - event: event, - payload: payload - }); - - if (AUTO_FLUSH_LEVEL.indexOf(level) !== -1) { - flush(); - } - } - - function log(level, event, payload) { - if (payload === void 0) { - payload = {}; - } - - if (!dom_isBrowser()) { - return logger; // eslint-disable-line no-use-before-define - } - - if (prefix) { - event = prefix + "_" + event; - } - - var logPayload = _extends({}, objFilter(payload), { - timestamp: Date.now().toString() - }); - - for (var _i6 = 0; _i6 < payloadBuilders.length; _i6++) { - var builder = payloadBuilders[_i6]; - extendIfDefined(logPayload, builder(logPayload)); - } - - enqueue(level, event, logPayload); - print(level, event, logPayload); - return logger; // eslint-disable-line no-use-before-define - } - - function addBuilder(builders, builder) { - builders.push(builder); - return logger; // eslint-disable-line no-use-before-define - } - - function addPayloadBuilder(builder) { - return addBuilder(payloadBuilders, builder); - } - - function addMetaBuilder(builder) { - return addBuilder(metaBuilders, builder); - } - - function addTrackingBuilder(builder) { - return addBuilder(trackingBuilders, builder); - } - - function addHeaderBuilder(builder) { - return addBuilder(headerBuilders, builder); - } - - function debug(event, payload) { - return log(LOG_LEVEL.DEBUG, event, payload); - } - - function info(event, payload) { - return log(LOG_LEVEL.INFO, event, payload); - } - - function warn(event, payload) { - return log(LOG_LEVEL.WARN, event, payload); - } - - function error(event, payload) { - return log(LOG_LEVEL.ERROR, event, payload); - } - - function track(payload) { - if (payload === void 0) { - payload = {}; - } - - if (!dom_isBrowser()) { - return logger; // eslint-disable-line no-use-before-define - } - - var trackingPayload = objFilter(payload); - - for (var _i8 = 0; _i8 < trackingBuilders.length; _i8++) { - var builder = trackingBuilders[_i8]; - extendIfDefined(trackingPayload, builder(trackingPayload)); - } - - print(LOG_LEVEL.DEBUG, 'track', trackingPayload); - tracking.push(trackingPayload); - return logger; // eslint-disable-line no-use-before-define - } - - if (dom_isBrowser()) { - safeInterval(flush, flushInterval); - } - - var logger = { - debug: debug, - info: info, - warn: warn, - error: error, - track: track, - flush: flush, - immediateFlush: immediateFlush, - addPayloadBuilder: addPayloadBuilder, - addMetaBuilder: addMetaBuilder, - addTrackingBuilder: addTrackingBuilder, - addHeaderBuilder: addHeaderBuilder - }; - return logger; -} -// CONCATENATED MODULE: ./src/index.js -/* concated harmony reexport Logger */__webpack_require__.d(__webpack_exports__, "Logger", function() { return Logger; }); -/* concated harmony reexport LOG_LEVEL */__webpack_require__.d(__webpack_exports__, "LOG_LEVEL", function() { return LOG_LEVEL; }); -/* concated harmony reexport PROTOCOL */__webpack_require__.d(__webpack_exports__, "PROTOCOL", function() { return constants_PROTOCOL; }); - - - -/***/ }) -/******/ ]); -}); -//# sourceMappingURL=beaver-logger.lite.js.map \ No newline at end of file diff --git a/dist/beaver-logger.lite.js.map b/dist/beaver-logger.lite.js.map deleted file mode 100644 index 080b6cf..0000000 --- a/dist/beaver-logger.lite.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["webpack://beaver/webpack/universalModuleDefinition","webpack://beaver/webpack/bootstrap","webpack://beaver/./node_modules/@babel/runtime/helpers/esm/extends.js","webpack://beaver/./node_modules/zalgo-promise/src/utils.js","webpack://beaver/./node_modules/zalgo-promise/src/exceptions.js","webpack://beaver/./node_modules/zalgo-promise/src/flush.js","webpack://beaver/./node_modules/zalgo-promise/src/promise.js","webpack://beaver/./node_modules/belter/src/device.js","webpack://beaver/./node_modules/cross-domain-utils/src/util.js","webpack://beaver/./node_modules/cross-domain-utils/src/constants.js","webpack://beaver/./node_modules/cross-domain-utils/src/utils.js","webpack://beaver/./node_modules/cross-domain-utils/src/types.js","webpack://beaver/./node_modules/cross-domain-utils/src/index.js","webpack://beaver/./node_modules/cross-domain-safe-weakmap/src/native.js","webpack://beaver/./node_modules/cross-domain-safe-weakmap/src/util.js","webpack://beaver/./node_modules/cross-domain-safe-weakmap/src/weakmap.js","webpack://beaver/./node_modules/belter/src/util.js","webpack://beaver/./node_modules/belter/src/constants.js","webpack://beaver/./node_modules/belter/src/dom.js","webpack://beaver/./node_modules/belter/src/storage.js","webpack://beaver/./node_modules/belter/src/experiment.js","webpack://beaver/./node_modules/belter/src/global.js","webpack://beaver/./node_modules/belter/src/http.js","webpack://beaver/./node_modules/belter/src/types.js","webpack://beaver/./node_modules/belter/src/decorators.js","webpack://beaver/./node_modules/belter/src/css.js","webpack://beaver/./node_modules/belter/src/test.js","webpack://beaver/./node_modules/belter/src/index.js","webpack://beaver/./src/constants.js","webpack://beaver/./src/config.js","webpack://beaver/./src/util.js","webpack://beaver/./src/logger.js","webpack://beaver/./src/index.js"],"names":["_extends","Object","assign","target","i","arguments","length","source","key","prototype","hasOwnProperty","call","apply","isPromise","item","Promise","window","Window","constructor","toString","name","then","err","dispatchedErrors","possiblyUnhandledPromiseHandlers","dispatchPossiblyUnhandledError","promise","indexOf","push","setTimeout","__DEBUG__","j","onPossiblyUnhandledException","handler","cancel","splice","activeCount","flushPromise","flushActive","resolve","startActive","endActive","awaitActive","Zalgo","ZalgoPromise","resolved","rejected","errorHandled","value","error","handlers","dispatching","stack","result","isAsync","res","reject","Error","dispatch","asyncReject","chain","firstPromise","secondPromise","onSuccess","onError","catch","undefined","finally","onFinally","try","timeout","time","clearTimeout","toPromise","TypeError","all","promises","count","results","prom","hash","keys","map","items","method","context","args","delay","flush","getUserAgent","navigator","mockUserAgent","userAgent","isDevice","match","isWebView","test","isStandAlone","standalone","matchMedia","matches","isFacebookWebView","ua","isFirefoxIOS","isEdgeIOS","isOperaMini","isAndroid","isIos","isGoogleSearchApp","isQQBrowser","isIosWebview","isAndroidWebview","isIE","document","documentMode","Boolean","isIECompHeader","mHttp","querySelector","mContent","isElectron","process","versions","electron","isIEIntranet","status","isMacOsCna","supportsPopups","isChrome","isSafari","isRegex","noop","PROTOCOL","MOCK","FILE","ABOUT","WILDCARD","WINDOW_TYPE","IFRAME","POPUP","IE_WIN_ACCESS_ERROR","isFileProtocol","win","location","protocol","isAboutProtocol","getParent","parent","getOpener","opener","canReadFromWindow","href","getActualDomain","host","getDomain","domain","mockDomain","isBlankDomain","isActuallySameDomain","desc","getOwnPropertyDescriptor","enumerable","isSameDomain","assertSameDomain","getParents","isAncestorParent","child","childParent","getFrames","frames","len","frame","getAllChildFrames","childFrame","getTop","top","getNextOpener","getUltimateTop","getAllFramesInWindow","getAllWindows","isTop","isFrameWindowClosed","contentWindow","parentNode","doc","ownerDocument","documentElement","contains","safeIndexOf","collection","iframeWindows","iframeFrames","isWindowClosed","allowMock","closed","message","mockclosed","iframeIndex","cleanIframes","linkFrameWindow","getFrameByName","winFrames","findChildFrameByName","namedFrame","findFrameByName","isParent","frameParent","isOpener","getAncestor","getAncestors","ancestor","isAncestor","actualParent","isPopup","isIframe","isFullpage","anyMatch","collection1","collection2","item1","item2","getDistanceFromTop","distance","getNthParent","n","getNthParentFromTop","isSameTopWindow","win1","win2","top1","top2","allFrames1","allFrames2","opener1","opener2","matchDomain","pattern","origin","Array","isArray","JSON","stringify","some","subpattern","stringifyDomainPattern","join","getDomainFromUrl","url","split","slice","onCloseWindow","callback","maxtime","Infinity","check","isWindow","obj","self","__cross_domain_utils_window_check__","isBrowser","isCurrentDomain","isMockDomain","normalizeMockUrl","replace","closeWindow","close","getFrameForWindow","frameElement","querySelectorAll","TYPES","hasNativeWeakMap","WeakMap","freeze","testWeakMap","testKey","testValue","set","get","CrossDomainSafeWeakMap","weakmap","values","Math","random","_cleanupClosedWindows","delete","isSafeToReadWrite","entry","defineProperty","writable","index","has","getOrSet","getter","getFunctionName","fn","__name__","displayName","setFunctionName","base64encode","str","btoa","encodeURIComponent","m","p1","String","fromCharCode","parseInt","Buffer","from","base64decode","atob","decodeURIComponent","c","charCodeAt","uniqueID","chars","randomID","charAt","floor","timeID","Date","toISOString","toLowerCase","getGlobal","global","__GLOBAL__","objectIDs","getObjectID","uid","serializeArgs","subkey","val","memoize","options","cacheMap","memoizedFunction","cache","thisNamespace","cacheTime","now","reset","promiseIdentity","memoizePromise","memoizedPromiseFunction","promisify","promisifiedFunction","inlineMemoize","logic","__inline_memoize_cache__","once","called","onceFunction","hashStr","pow","sqrt","strHashStr","total","abs","regmatch","awaitKey","configurable","stringifyError","level","newErr","stringifyErrorMessage","defaultMessage","domainMatches","hostname","patchMethod","original","patchedMethod","callOriginal","extend","perc","pixels","percentage","round","min","max","regexMap","regexp","regexMapMatcher","svgToBase64","svg","objFilter","filter","identity","regexTokenize","text","token","promiseDebounce","promiseDebounced","localPromise","safeInterval","loop","isInteger","isFloat","serializePrimitive","deserializePrimitive","parseFloat","dotify","prefix","newobj","every","undotify","keyResult","parts","part","isLast","isIndex","eventEmitter","triggered","on","eventName","handlerList","cancelled","listener","trigger","triggerOnce","camelToDasherize","string","g","dasherizeToCamel","toUpperCase","capitalizeFirstLetter","path","def","pathParts","safeTimeout","interval","defineLazyProp","arrayFrom","isObject","isObjectObject","isPlainObject","replaceObject","replacer","fullKey","itemKey","el","copyProp","descriptor","regex","start","RegExp","groups","end","regexAll","isDefined","cycle","debounce","debounceWrapper","weakMapMemoize","weakmapMemoized","arg","weakMapMemoizePromise","weakmapMemoizedPromise","cleanup","tasks","cleaned","register","task","pop","tryCatch","removeFromArray","arr","assertExists","thing","unique","KEY_CODES","ENTER","isDocumentReady","body","readyState","urlEncode","waitForWindowReady","addEventListener","waitForDocumentReady","setInterval","clearInterval","waitForDocumentBody","parseQuery","queryString","params","pair","getQueryParam","search","urlWillRedirectPage","formatQuery","extendQuery","originalQuery","props","extendUrl","query","originalUrl","originalHash","hashString","redirect","hasMetaViewPort","meta","screen","width","isElementVisible","offsetWidth","offsetHeight","getClientRects","enablePerformance","performance","timing","connectEnd","navigationStart","getPageRenderTime","domInteractive","htmlEncode","html","selector","onClick","element","event","keyCode","getScript","scripts","getElementsByTagName","script","src","isLocalStorageEnabled","localStorage","setItem","getItem","removeItem","getBrowserLocales","nav","locales","languages","language","userLanguage","locale","lang","country","appendChild","container","isElement","Element","nodeType","style","getElementSafe","id","getElement","elementReady","PopupOpenError","create","popup","height","left","outerWidth","screenX","outerHeight","screenY","toolbar","menubar","resizable","scrollbars","open","writeToWindow","write","err2","writeElementToWindow","tag","tagName","children","removeChild","setStyle","styleText","styleSheet","cssText","createTextNode","awaitFrameLoadPromises","awaitFrameLoad","awaitFrameWindow","loadedFrame","createElement","class","className","setAttribute","attributes","innerHTML","iframe","allowTransparency","backgroundColor","border","hasAttribute","removeEventListener","bindEvents","eventNames","VENDOR_PREFIXES","setVendorCSS","capitalizedName","ANIMATION_START_EVENTS","ANIMATION_END_EVENTS","animate","clean","hasStarted","startTimeout","endTimeout","startEvent","endEvent","cleanUp","animationName","stopPropagation","STYLE","DISPLAY","NONE","BLOCK","VISIBILITY","VISIBLE","HIDDEN","IMPORTANT","makeElementVisible","setProperty","makeElementInvisible","showElement","hideElement","destroyElement","showAndAnimate","animation","animateAndHide","addClass","classList","add","removeClass","remove","isElementClosed","watchElementForClose","fixScripts","newScript","textContent","replaceChild","onResize","currentWidth","currentHeight","newWidth","newHeight","observer","ResizeObserver","observe","MutationObserver","childList","subtree","characterData","disconnect","getResourceLoadTime","getEntries","entries","duration","DEFAULT_SESSION_STORAGE","getStorage","lifetime","STORAGE_KEY","accessedStorage","getState","localStorageEnabled","storage","rawStorage","parse","getID","getSession","session","__session__","created","guid","getSessionState","state","getSessionID","getBelterExperimentStorage","isEventUnique","loggedBeacons","getThrottlePercentile","throttlePercentiles","THROTTLE_GROUP","TEST","CONTROL","THROTTLE","experiment","sample","logTreatment","logCheckpoint","throttle","group","treatment","started","forced","isEnabled","isDisabled","getTreatment","log","checkpoint","payload","logStart","logComplete","getGlobalNameSpace","version","globalKey","namespace","defValue","HEADERS","CONTENT_TYPE","ACCEPT","headerBuilders","parseHeaders","rawHeaders","trim","line","request","headers","json","data","normalizedHeaders","headerBuilder","builtHeaders","xhr","XMLHttpRequest","xhrLoad","responseHeaders","getAllResponseHeaders","contentType","isJSON","responseBody","responseText","evt","setRequestHeader","ontimeout","xhrTimeout","send","addHeaderBuilder","memoized","isPerc","isPx","toNum","toPx","toCSS","percOf","num","normalizeDimension","dim","wrapPromise","expected","timer","expect","expectWrapper","avoid","avoidWrapper","expectError","expectErrorWrapper","drain","LOG_LEVEL","DEBUG","INFO","WARN","ERROR","AUTO_FLUSH_LEVEL","LOG_LEVEL_PRIORITY","FLUSH_INTERVAL","DEFAULT_LOG_LEVEL","simpleRequest","req","header","extendIfDefined","Logger","logLevel","flushInterval","events","tracking","payloadBuilders","metaBuilders","trackingBuilders","print","__BEAVER_LOGGER__","warning","console","buildPayloads","builder","immediateFlush","enqueue","logger","logPayload","timestamp","addBuilder","builders","addPayloadBuilder","addMetaBuilder","addTrackingBuilder","debug","info","warn","track","trackingPayload"],"mappings":"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","file":"beaver-logger.lite.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"beaver\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"beaver\"] = factory();\n\telse\n\t\troot[\"beaver\"] = factory();\n})((typeof self !== 'undefined' ? self : this), function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 0);\n","export default function _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}","/* @flow */\n\nexport function isPromise(item : mixed) : boolean {\n try {\n if (!item) {\n return false;\n }\n\n if (typeof Promise !== 'undefined' && item instanceof Promise) {\n return true;\n }\n\n if (typeof window !== 'undefined' && typeof window.Window === 'function' && item instanceof window.Window) {\n return false;\n }\n\n if (typeof window !== 'undefined' && typeof window.constructor === 'function' && item instanceof window.constructor) {\n return false;\n }\n\n let toString = ({}).toString;\n\n if (toString) {\n let name = toString.call(item);\n\n if (name === '[object Window]' || name === '[object global]' || name === '[object DOMWindow]') {\n return false;\n }\n }\n\n if (typeof item.then === 'function') {\n return true;\n }\n } catch (err) {\n return false;\n }\n\n return false;\n}\n","/* @flow */\n\nimport type { ZalgoPromise } from './promise';\n\nconst dispatchedErrors = [];\nconst possiblyUnhandledPromiseHandlers : Array<(mixed, promise? : ZalgoPromise) => void> = [];\n\nexport function dispatchPossiblyUnhandledError(err : mixed, promise : ZalgoPromise) {\n\n if (dispatchedErrors.indexOf(err) !== -1) {\n return;\n }\n\n dispatchedErrors.push(err);\n\n setTimeout(() => {\n if (__DEBUG__) {\n // $FlowFixMe\n throw new Error(`${ err.stack || err.toString() }\\n\\nFrom promise:\\n\\n${ promise.stack }`);\n }\n\n throw err;\n }, 1);\n\n for (let j = 0; j < possiblyUnhandledPromiseHandlers.length; j++) {\n // $FlowFixMe\n possiblyUnhandledPromiseHandlers[j](err, promise);\n }\n}\n\nexport function onPossiblyUnhandledException(handler : (mixed, promise? : ZalgoPromise) => void) : { cancel : () => void } {\n possiblyUnhandledPromiseHandlers.push(handler);\n\n return {\n cancel() {\n possiblyUnhandledPromiseHandlers.splice(possiblyUnhandledPromiseHandlers.indexOf(handler), 1);\n }\n };\n}\n","/* @flow */\n\nimport type { ZalgoPromise } from './promise';\n\nlet activeCount = 0;\nlet flushPromise;\n\nfunction flushActive() {\n if (!activeCount && flushPromise) {\n const promise = flushPromise;\n flushPromise = null;\n promise.resolve();\n }\n}\n\nexport function startActive() {\n activeCount += 1;\n}\n\nexport function endActive() {\n activeCount -= 1;\n flushActive();\n}\n\nexport function awaitActive(Zalgo : Class>) : ZalgoPromise { // eslint-disable-line no-undef\n let promise = flushPromise = flushPromise || new Zalgo();\n flushActive();\n return promise;\n}\n","/* @flow */\n\nimport { isPromise } from './utils';\nimport { onPossiblyUnhandledException, dispatchPossiblyUnhandledError } from './exceptions';\nimport { startActive, endActive, awaitActive } from './flush';\n\nexport class ZalgoPromise {\n\n resolved : boolean\n rejected : boolean\n errorHandled : boolean\n value : R\n error : mixed\n handlers : Array<{\n promise : ZalgoPromise<*>,\n onSuccess : void | (result : R) => mixed,\n onError : void | (error : mixed) => mixed\n }>\n dispatching : boolean\n stack : string\n\n constructor(handler : ?(resolve : (result : R) => void, reject : (error : mixed) => void) => void) {\n\n this.resolved = false;\n this.rejected = false;\n this.errorHandled = false;\n\n this.handlers = [];\n\n if (handler) {\n\n let result;\n let error;\n let resolved = false;\n let rejected = false;\n let isAsync = false;\n\n startActive();\n\n try {\n handler(res => {\n if (isAsync) {\n this.resolve(res);\n } else {\n resolved = true;\n result = res;\n }\n\n }, err => {\n if (isAsync) {\n this.reject(err);\n } else {\n rejected = true;\n error = err;\n }\n });\n\n } catch (err) {\n endActive();\n this.reject(err);\n return;\n }\n\n endActive();\n\n isAsync = true;\n\n if (resolved) {\n // $FlowFixMe\n this.resolve(result);\n } else if (rejected) {\n this.reject(error);\n }\n }\n\n if (__DEBUG__) {\n try {\n throw new Error(`ZalgoPromise`);\n } catch (err) {\n this.stack = err.stack;\n }\n }\n }\n\n resolve(result : R) : ZalgoPromise {\n if (this.resolved || this.rejected) {\n return this;\n }\n\n if (isPromise(result)) {\n throw new Error('Can not resolve promise with another promise');\n }\n\n this.resolved = true;\n this.value = result;\n this.dispatch();\n\n return this;\n }\n\n reject(error : mixed) : ZalgoPromise {\n if (this.resolved || this.rejected) {\n return this;\n }\n\n if (isPromise(error)) {\n throw new Error('Can not reject promise with another promise');\n }\n\n if (!error) {\n // $FlowFixMe\n let err = (error && typeof error.toString === 'function' ? error.toString() : Object.prototype.toString.call(error));\n error = new Error(`Expected reject to be called with Error, got ${ err }`);\n }\n\n this.rejected = true;\n this.error = error;\n\n if (!this.errorHandled) {\n setTimeout(() => {\n if (!this.errorHandled) {\n dispatchPossiblyUnhandledError(error, this);\n }\n }, 1);\n }\n\n this.dispatch();\n\n return this;\n }\n\n asyncReject(error : mixed) : ZalgoPromise {\n this.errorHandled = true;\n this.reject(error);\n return this;\n }\n \n dispatch() {\n\n let { dispatching, resolved, rejected, handlers } = this;\n\n if (dispatching) {\n return;\n }\n\n if (!resolved && !rejected) {\n return;\n }\n\n this.dispatching = true;\n startActive();\n\n const chain = (firstPromise : ZalgoPromise, secondPromise : ZalgoPromise) => {\n return firstPromise.then(res => {\n secondPromise.resolve(res);\n }, err => {\n secondPromise.reject(err);\n });\n };\n\n for (let i = 0; i < handlers.length; i++) {\n\n let { onSuccess, onError, promise } = handlers[i];\n\n let result;\n\n if (resolved) {\n\n try {\n result = onSuccess ? onSuccess(this.value) : this.value;\n } catch (err) {\n promise.reject(err);\n continue;\n }\n\n } else if (rejected) {\n\n if (!onError) {\n promise.reject(this.error);\n continue;\n }\n\n try {\n result = onError(this.error);\n } catch (err) {\n promise.reject(err);\n continue;\n }\n }\n\n if (result instanceof ZalgoPromise && (result.resolved || result.rejected)) {\n\n if (result.resolved) {\n promise.resolve(result.value);\n } else {\n promise.reject(result.error);\n }\n\n result.errorHandled = true;\n\n } else if (isPromise(result)) {\n\n if (result instanceof ZalgoPromise && (result.resolved || result.rejected)) {\n if (result.resolved) {\n promise.resolve(result.value);\n } else {\n promise.reject(result.error);\n }\n\n } else {\n // $FlowFixMe\n chain(result, promise);\n }\n\n } else {\n\n promise.resolve(result);\n }\n }\n\n handlers.length = 0;\n this.dispatching = false;\n endActive();\n }\n\n then(onSuccess : void | (result : R) => (ZalgoPromise | Y), onError : void | (error : mixed) => (ZalgoPromise | Y)) : ZalgoPromise {\n\n if (onSuccess && typeof onSuccess !== 'function' && !onSuccess.call) {\n throw new Error('Promise.then expected a function for success handler');\n }\n\n if (onError && typeof onError !== 'function' && !onError.call) {\n throw new Error('Promise.then expected a function for error handler');\n }\n\n let promise : ZalgoPromise = new ZalgoPromise();\n\n this.handlers.push({\n promise,\n onSuccess,\n onError\n });\n\n this.errorHandled = true;\n\n this.dispatch();\n\n return promise;\n }\n\n catch(onError : (error : mixed) => ZalgoPromise | Y) : ZalgoPromise {\n return this.then(undefined, onError);\n }\n\n finally(onFinally : () => mixed) : ZalgoPromise {\n\n if (onFinally && typeof onFinally !== 'function' && !onFinally.call) {\n throw new Error('Promise.finally expected a function');\n }\n\n return this.then((result) => {\n return ZalgoPromise.try(onFinally)\n .then(() => {\n return result;\n });\n }, (err) => {\n return ZalgoPromise.try(onFinally)\n .then(() => {\n throw err;\n });\n });\n }\n\n timeout(time : number, err : ?Error) : ZalgoPromise {\n\n if (this.resolved || this.rejected) {\n return this;\n }\n\n let timeout = setTimeout(() => {\n\n if (this.resolved || this.rejected) {\n return;\n }\n\n this.reject(err || new Error(`Promise timed out after ${ time }ms`));\n\n }, time);\n\n return this.then(result => {\n clearTimeout(timeout);\n return result;\n });\n }\n\n // $FlowFixMe\n toPromise() : Promise {\n // $FlowFixMe\n if (typeof Promise === 'undefined') {\n throw new TypeError(`Could not find Promise`);\n }\n // $FlowFixMe\n return Promise.resolve(this); // eslint-disable-line compat/compat\n }\n\n static resolve(value : X | ZalgoPromise) : ZalgoPromise {\n\n if (value instanceof ZalgoPromise) {\n return value;\n }\n\n if (isPromise(value)) {\n // $FlowFixMe\n return new ZalgoPromise((resolve, reject) => value.then(resolve, reject));\n }\n\n return new ZalgoPromise().resolve(value);\n }\n\n static reject(error : mixed) : ZalgoPromise {\n return new ZalgoPromise().reject(error);\n }\n\n static asyncReject(error : mixed) : ZalgoPromise {\n return new ZalgoPromise().asyncReject(error);\n }\n\n static all>(promises : X) : ZalgoPromise<$TupleMap(ZalgoPromise | Y) => Y>> { // eslint-disable-line no-undef\n\n let promise = new ZalgoPromise();\n let count = promises.length;\n let results = [];\n\n if (!count) {\n promise.resolve(results);\n return promise;\n }\n\n const chain = (i : number, firstPromise : ZalgoPromise, secondPromise : ZalgoPromise) => {\n return firstPromise.then(res => {\n results[i] = res;\n count -= 1;\n if (count === 0) {\n promise.resolve(results);\n }\n }, err => {\n secondPromise.reject(err);\n });\n };\n\n for (let i = 0; i < promises.length; i++) {\n let prom = promises[i];\n\n if (prom instanceof ZalgoPromise) {\n if (prom.resolved) {\n results[i] = prom.value;\n count -= 1;\n continue;\n }\n } else if (!isPromise(prom)) {\n results[i] = prom;\n count -= 1;\n continue;\n }\n\n chain(i, ZalgoPromise.resolve(prom), promise);\n }\n\n if (count === 0) {\n promise.resolve(results);\n }\n\n return promise;\n }\n\n static hash(promises : O) : ZalgoPromise<$ObjMap(ZalgoPromise | Y) => Y>> { // eslint-disable-line no-undef\n let result = {};\n \n return ZalgoPromise.all(Object.keys(promises).map(key => {\n return ZalgoPromise.resolve(promises[key]).then(value => {\n result[key] = value;\n });\n })).then(() => {\n return result;\n });\n }\n\n static map(items : Array, method : (T) => (ZalgoPromise | X)) : ZalgoPromise> {\n // $FlowFixMe\n return ZalgoPromise.all(items.map(method));\n }\n\n static onPossiblyUnhandledException(handler : (err : mixed) => void) : { cancel : () => void } {\n return onPossiblyUnhandledException(handler);\n }\n\n static try>(method : (...args : A) => (ZalgoPromise | Y), context : ?C, args : ?A) : ZalgoPromise {\n\n if (method && typeof method !== 'function' && !method.call) {\n throw new Error('Promise.try expected a function');\n }\n\n let result;\n\n startActive();\n \n try {\n // $FlowFixMe\n result = method.apply(context, args || []);\n } catch (err) {\n endActive();\n return ZalgoPromise.reject(err);\n }\n\n endActive();\n\n return ZalgoPromise.resolve(result);\n }\n\n static delay(delay : number) : ZalgoPromise {\n return new ZalgoPromise(resolve => {\n setTimeout(resolve, delay);\n });\n }\n\n static isPromise(value : mixed) : boolean {\n\n if (value && value instanceof ZalgoPromise) {\n return true;\n }\n\n return isPromise(value);\n }\n\n static flush() : ZalgoPromise {\n return awaitActive(ZalgoPromise);\n }\n}\n","/* @flow */\n\nexport function getUserAgent() : string {\n return window.navigator.mockUserAgent || window.navigator.userAgent;\n}\n\nexport function isDevice(userAgent? : string = getUserAgent()) : boolean {\n if (userAgent.match(/Android|webOS|iPhone|iPad|iPod|bada|Symbian|Palm|CriOS|BlackBerry|IEMobile|WindowsMobile|Opera Mini/i)) {\n return true;\n }\n\n return false;\n}\n\nexport function isWebView() : boolean {\n let userAgent = getUserAgent();\n return (/(iPhone|iPod|iPad|Macintosh).*AppleWebKit(?!.*Safari)/i).test(userAgent) ||\n (/\\bwv\\b/).test(userAgent) ||\n (/Android.*Version\\/(\\d)\\.(\\d)/i).test(userAgent);\n}\n\nexport function isStandAlone() : boolean {\n return (window.navigator.standalone === true || window.matchMedia('(display-mode: standalone)').matches);\n}\n\nexport function isFacebookWebView(ua? : string = getUserAgent()) : boolean {\n return (ua.indexOf('FBAN') !== -1) || (ua.indexOf('FBAV') !== -1);\n}\n\nexport function isFirefoxIOS(ua? : string = getUserAgent()) : boolean {\n return (/FxiOS/i).test(ua);\n}\n\nexport function isEdgeIOS(ua? : string = getUserAgent()) : boolean {\n return (/EdgiOS/i).test(ua);\n}\n\nexport function isOperaMini(ua? : string = getUserAgent()) : boolean {\n return ua.indexOf('Opera Mini') > -1;\n}\n\nexport function isAndroid(ua? : string = getUserAgent()) : boolean {\n return (/Android/).test(ua);\n}\n\nexport function isIos(ua? : string = getUserAgent()) : boolean {\n return (/iPhone|iPod|iPad/).test(ua);\n}\n\nexport function isGoogleSearchApp(ua? : string = getUserAgent()) : boolean {\n return (/\\bGSA\\b/).test(ua);\n}\n\nexport function isQQBrowser(ua? : string = getUserAgent()) : boolean {\n return (/QQBrowser/).test(ua);\n}\n\nexport function isIosWebview(ua? : string = getUserAgent()) : boolean {\n if (isIos(ua)) {\n if (isGoogleSearchApp(ua)) {\n return true;\n }\n return (/.+AppleWebKit(?!.*Safari)/).test(ua);\n }\n return false;\n}\n\nexport function isAndroidWebview(ua? : string = getUserAgent()) : boolean {\n if (isAndroid(ua)) {\n return (/Version\\/[\\d.]+/).test(ua) && !isOperaMini(ua);\n }\n return false;\n}\n\nexport function isIE() : boolean {\n\n if (window.document.documentMode) {\n return true;\n }\n\n return Boolean(\n window.navigator &&\n window.navigator.userAgent &&\n (/Edge|MSIE|rv:11/i).test(window.navigator.userAgent)\n );\n}\n\nexport function isIECompHeader() : boolean {\n let mHttp = window.document.querySelector('meta[http-equiv=\"X-UA-Compatible\"]');\n let mContent = window.document.querySelector('meta[content=\"IE=edge\"]');\n if (mHttp && mContent) {\n return true;\n }\n return false;\n}\n\nexport function isElectron() : boolean {\n if (typeof process !== 'undefined' && process.versions && process.versions.electron) {\n return true;\n }\n return false;\n}\n\nexport function isIEIntranet() : boolean {\n\n // This status check only works for older versions of IE with document.documentMode set\n\n if (window.document.documentMode) {\n try {\n let status = window.status;\n\n window.status = 'testIntranetMode';\n\n if (window.status === 'testIntranetMode') {\n window.status = status;\n\n return true;\n }\n\n return false;\n\n } catch (err) {\n\n return false;\n }\n }\n\n return false;\n}\n\nexport function isMacOsCna() : boolean {\n let userAgent = getUserAgent();\n return (/Macintosh.*AppleWebKit(?!.*Safari)/i).test(userAgent);\n}\n\nexport function supportsPopups(ua? : string = getUserAgent()) : boolean {\n return !(isIosWebview(ua) || isAndroidWebview(ua) || isOperaMini(ua) ||\n isFirefoxIOS(ua) || isEdgeIOS(ua) || isFacebookWebView(ua) || isQQBrowser(ua) || isElectron() || isMacOsCna() || isStandAlone());\n}\n\nexport function isChrome(ua? : string = getUserAgent()) : boolean {\n return (/Chrome|Chromium|CriOS/).test(ua);\n}\n\nexport function isSafari(ua? : string = getUserAgent()) : boolean {\n return (/Safari/).test(ua) && !isChrome(ua);\n}\n","/* @flow */\n\nexport function isRegex(item : mixed) : boolean {\n return Object.prototype.toString.call(item) === '[object RegExp]';\n}\n\n// eslint-disable-next-line no-unused-vars\nexport function noop(...args : Array) {\n // pass\n}\n","/* @flow */\n\nexport const PROTOCOL = {\n MOCK: ('mock:' : 'mock:'),\n FILE: ('file:' : 'file:'),\n ABOUT: ('about:' : 'about:')\n};\n\nexport const WILDCARD = '*';\n\nexport const WINDOW_TYPE = {\n IFRAME: ('iframe' : 'iframe'),\n POPUP: ('popup' : 'popup')\n};\n","/* @flow */\n/* eslint max-lines: 0 */\n\nimport { isRegex, noop } from './util';\nimport type { CrossDomainWindowType, SameDomainWindowType, DomainMatcher } from './types';\nimport { PROTOCOL, WILDCARD } from './constants';\n\nlet IE_WIN_ACCESS_ERROR = 'Call was rejected by callee.\\r\\n';\n\nexport function isFileProtocol(win : SameDomainWindowType = window) : boolean {\n return win.location.protocol === PROTOCOL.FILE;\n}\n\nexport function isAboutProtocol(win : SameDomainWindowType = window) : boolean {\n return win.location.protocol === PROTOCOL.ABOUT;\n}\n\nexport function getParent(win? : CrossDomainWindowType = window) : ?CrossDomainWindowType {\n\n if (!win) {\n return;\n }\n\n try {\n if (win.parent && win.parent !== win) {\n return win.parent;\n }\n } catch (err) {\n // pass\n }\n}\n\nexport function getOpener(win? : CrossDomainWindowType = window) : ?CrossDomainWindowType {\n\n if (!win) {\n return;\n }\n\n // Make sure we're not actually an iframe which has had window.open() called on us\n if (getParent(win)) {\n return;\n }\n\n try {\n return win.opener;\n } catch (err) {\n // pass\n }\n}\n\nexport function canReadFromWindow(win : CrossDomainWindowType | SameDomainWindowType) : boolean {\n try {\n // $FlowFixMe\n noop(win && win.location && win.location.href);\n return true;\n } catch (err) {\n // pass\n }\n\n return false;\n}\n\nexport function getActualDomain(win? : SameDomainWindowType = window) : string {\n\n let location = win.location;\n\n if (!location) {\n throw new Error(`Can not read window location`);\n }\n\n let protocol = location.protocol;\n\n if (!protocol) {\n throw new Error(`Can not read window protocol`);\n }\n\n if (protocol === PROTOCOL.FILE) {\n return `${ PROTOCOL.FILE }//`;\n }\n\n if (protocol === PROTOCOL.ABOUT) {\n\n let parent = getParent(win);\n if (parent && canReadFromWindow(parent)) {\n // $FlowFixMe\n return getActualDomain(parent);\n }\n\n return `${ PROTOCOL.ABOUT }//`;\n }\n\n let host = location.host;\n\n if (!host) {\n throw new Error(`Can not read window host`);\n }\n\n return `${ protocol }//${ host }`;\n}\n\nexport function getDomain(win? : SameDomainWindowType = window) : string {\n\n let domain = getActualDomain(win);\n\n if (domain && win.mockDomain && win.mockDomain.indexOf(PROTOCOL.MOCK) === 0) {\n return win.mockDomain;\n }\n\n return domain;\n}\n\nexport function isBlankDomain(win : CrossDomainWindowType) : boolean {\n try {\n // $FlowFixMe\n if (!win.location.href) {\n return true;\n }\n\n if (win.location.href === 'about:blank') {\n return true;\n }\n } catch (err) {\n // pass\n }\n\n return false;\n}\n\nexport function isActuallySameDomain(win : CrossDomainWindowType) : boolean {\n\n try {\n if (win === window) {\n return true;\n }\n\n } catch (err) {\n // pass\n }\n\n try {\n let desc = Object.getOwnPropertyDescriptor(win, 'location');\n\n if (desc && desc.enumerable === false) {\n return false;\n }\n\n } catch (err) {\n // pass\n }\n\n try {\n // $FlowFixMe\n if (isAboutProtocol(win) && canReadFromWindow(win)) {\n return true;\n }\n } catch (err) {\n // pass\n }\n\n try {\n // $FlowFixMe\n if (getActualDomain(win) === getActualDomain(window)) {\n return true;\n }\n\n } catch (err) {\n // pass\n }\n\n return false;\n}\n\nexport function isSameDomain(win : CrossDomainWindowType | SameDomainWindowType) : boolean {\n\n if (!isActuallySameDomain(win)) {\n return false;\n }\n\n try {\n\n if (win === window) {\n return true;\n }\n\n // $FlowFixMe\n if (isAboutProtocol(win) && canReadFromWindow(win)) {\n return true;\n }\n\n // $FlowFixMe\n if (getDomain(window) === getDomain(win)) {\n return true;\n }\n\n } catch (err) {\n // pass\n }\n\n return false;\n}\n\n\nexport function assertSameDomain(win : CrossDomainWindowType | SameDomainWindowType) : SameDomainWindowType {\n if (!isSameDomain(win)) {\n throw new Error(`Expected window to be same domain`);\n }\n\n // $FlowFixMe\n return win;\n}\n\nexport function getParents(win : CrossDomainWindowType) : Array {\n\n let result = [];\n\n try {\n\n while (win.parent !== win) {\n result.push(win.parent);\n win = win.parent;\n }\n\n } catch (err) {\n // pass\n }\n\n return result;\n}\n\nexport function isAncestorParent(parent : CrossDomainWindowType, child : CrossDomainWindowType) : boolean {\n\n if (!parent || !child) {\n return false;\n }\n\n let childParent = getParent(child);\n\n if (childParent) {\n return childParent === parent;\n }\n\n if (getParents(child).indexOf(parent) !== -1) {\n return true;\n }\n\n return false;\n}\n\nexport function getFrames(win : CrossDomainWindowType) : Array {\n\n let result = [];\n\n let frames;\n\n try {\n frames = win.frames;\n } catch (err) {\n frames = win;\n }\n\n let len;\n\n try {\n len = frames.length;\n } catch (err) {\n // pass\n }\n\n if (len === 0) {\n return result;\n }\n\n if (len) {\n for (let i = 0; i < len; i++) {\n\n let frame;\n\n try {\n frame = frames[i];\n } catch (err) {\n continue;\n }\n\n result.push(frame);\n }\n\n return result;\n }\n\n for (let i = 0; i < 100; i++) {\n let frame;\n\n try {\n frame = frames[i];\n } catch (err) {\n return result;\n }\n\n if (!frame) {\n return result;\n }\n\n result.push(frame);\n }\n\n return result;\n}\n\n\nexport function getAllChildFrames(win : CrossDomainWindowType) : Array {\n\n let result = [];\n\n for (let frame of getFrames(win)) {\n result.push(frame);\n\n for (let childFrame of getAllChildFrames(frame)) {\n result.push(childFrame);\n }\n }\n\n return result;\n}\n\nexport function getTop(win? : CrossDomainWindowType = window) : ?CrossDomainWindowType {\n\n try {\n if (win.top) {\n return win.top;\n }\n } catch (err) {\n // pass\n }\n\n if (getParent(win) === win) {\n return win;\n }\n\n try {\n if (isAncestorParent(window, win) && window.top) {\n return window.top;\n }\n } catch (err) {\n // pass\n }\n\n try {\n if (isAncestorParent(win, window) && window.top) {\n return window.top;\n }\n } catch (err) {\n // pass\n }\n\n for (let frame of getAllChildFrames(win)) {\n try {\n if (frame.top) {\n return frame.top;\n }\n } catch (err) {\n // pass\n }\n\n if (getParent(frame) === frame) {\n return frame;\n }\n }\n}\n\nexport function getNextOpener(win? : CrossDomainWindowType = window) : ?CrossDomainWindowType {\n return getOpener(getTop(win) || win);\n}\n\nexport function getUltimateTop(win? : CrossDomainWindowType = window) : CrossDomainWindowType {\n let opener = getNextOpener(win);\n\n if (opener) {\n return getUltimateTop(opener);\n }\n\n return top;\n}\n\nexport function getAllFramesInWindow(win : CrossDomainWindowType) : Array {\n let top = getTop(win);\n\n if (!top) {\n throw new Error(`Can not determine top window`);\n }\n\n return [ ...getAllChildFrames(top), top ];\n}\n\nexport function getAllWindows(win? : CrossDomainWindowType = window) : $ReadOnlyArray {\n let frames = getAllFramesInWindow(win);\n let opener = getNextOpener(win);\n\n if (opener) {\n return [ ...getAllWindows(opener), ...frames ];\n } else {\n return frames;\n }\n}\n\nexport function isTop(win : CrossDomainWindowType) : boolean {\n return win === getTop(win);\n}\n\nexport function isFrameWindowClosed(frame : HTMLIFrameElement) : boolean {\n\n if (!frame.contentWindow) {\n return true;\n }\n\n if (!frame.parentNode) {\n return true;\n }\n\n let doc = frame.ownerDocument;\n\n if (doc && doc.documentElement && !doc.documentElement.contains(frame)) {\n return true;\n }\n\n return false;\n}\n\nfunction safeIndexOf(collection : Array, item : T) : number {\n for (let i = 0; i < collection.length; i++) {\n\n try {\n if (collection[i] === item) {\n return i;\n }\n } catch (err) {\n // pass\n }\n }\n\n return -1;\n}\n\nlet iframeWindows = [];\nlet iframeFrames = [];\n\nexport function isWindowClosed(win : CrossDomainWindowType, allowMock : boolean = true) : boolean {\n\n try {\n if (win === window) {\n return false;\n }\n } catch (err) {\n return true;\n }\n\n try {\n if (!win) {\n return true;\n }\n\n } catch (err) {\n return true;\n }\n\n try {\n if (win.closed) {\n return true;\n }\n\n } catch (err) {\n\n // I love you so much IE\n\n if (err && err.message === IE_WIN_ACCESS_ERROR) {\n return false;\n }\n\n return true;\n }\n\n\n if (allowMock && isSameDomain(win)) {\n try {\n // $FlowFixMe\n if (win.mockclosed) {\n return true;\n }\n } catch (err) {\n // pass\n }\n }\n\n // Mobile safari\n\n try {\n if (!win.parent || !win.top) {\n return true;\n }\n } catch (err) {\n // pass\n }\n\n // Yes, this actually happens in IE. win === win errors out when the window\n // is from an iframe, and the iframe was removed from the page.\n\n try {\n noop(win === win); // eslint-disable-line no-self-compare\n } catch (err) {\n return true;\n }\n\n // IE orphaned frame\n\n let iframeIndex = safeIndexOf(iframeWindows, win);\n\n if (iframeIndex !== -1) {\n let frame = iframeFrames[iframeIndex];\n\n if (frame && isFrameWindowClosed(frame)) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction cleanIframes() {\n for (let i = 0; i < iframeWindows.length; i++) {\n let closed = false;\n\n try {\n closed = iframeWindows[i].closed;\n } catch (err) {\n // pass\n }\n\n if (closed) {\n iframeFrames.splice(i, 1);\n iframeWindows.splice(i, 1);\n }\n }\n}\n\nexport function linkFrameWindow(frame : HTMLIFrameElement) {\n\n cleanIframes();\n\n if (frame && frame.contentWindow) {\n try {\n iframeWindows.push(frame.contentWindow);\n iframeFrames.push(frame);\n } catch (err) {\n // pass\n }\n }\n}\n\nexport function getUserAgent(win : ?SameDomainWindowType) : string {\n win = win || window;\n return win.navigator.mockUserAgent || win.navigator.userAgent;\n}\n\n\nexport function getFrameByName(win : CrossDomainWindowType, name : string) : ?CrossDomainWindowType {\n\n let winFrames = getFrames(win);\n\n for (let childFrame of winFrames) {\n try {\n // $FlowFixMe\n if (isSameDomain(childFrame) && childFrame.name === name && winFrames.indexOf(childFrame) !== -1) {\n return childFrame;\n }\n } catch (err) {\n // pass\n }\n }\n\n try {\n // $FlowFixMe\n if (winFrames.indexOf(win.frames[name]) !== -1) {\n // $FlowFixMe\n return win.frames[name];\n }\n } catch (err) {\n // pass\n }\n\n try {\n if (winFrames.indexOf(win[name]) !== -1) {\n return win[name];\n }\n } catch (err) {\n // pass\n }\n}\n\nexport function findChildFrameByName(win : CrossDomainWindowType, name : string) : ?CrossDomainWindowType {\n\n let frame = getFrameByName(win, name);\n\n if (frame) {\n return frame;\n }\n\n for (let childFrame of getFrames(win)) {\n let namedFrame = findChildFrameByName(childFrame, name);\n\n if (namedFrame) {\n return namedFrame;\n }\n }\n}\n\nexport function findFrameByName(win : CrossDomainWindowType, name : string) : ?CrossDomainWindowType {\n\n let frame;\n\n frame = getFrameByName(win, name);\n\n if (frame) {\n return frame;\n }\n\n let top = getTop(win) || win;\n\n return findChildFrameByName(top, name);\n}\n\nexport function isParent(win : CrossDomainWindowType, frame : CrossDomainWindowType) : boolean {\n\n let frameParent = getParent(frame);\n\n if (frameParent) {\n return frameParent === win;\n }\n\n for (let childFrame of getFrames(win)) {\n if (childFrame === frame) {\n return true;\n }\n }\n\n return false;\n}\n\nexport function isOpener(parent : CrossDomainWindowType, child : CrossDomainWindowType) : boolean {\n\n return parent === getOpener(child);\n}\n\nexport function getAncestor(win? : CrossDomainWindowType = window) : ?CrossDomainWindowType {\n win = win || window;\n\n let opener = getOpener(win);\n\n if (opener) {\n return opener;\n }\n\n let parent = getParent(win);\n\n if (parent) {\n return parent;\n }\n}\n\nexport function getAncestors(win : CrossDomainWindowType) : Array {\n\n let results = [];\n\n let ancestor = win;\n\n while (ancestor) {\n ancestor = getAncestor(ancestor);\n if (ancestor) {\n results.push(ancestor);\n }\n }\n\n return results;\n}\n\n\nexport function isAncestor(parent : CrossDomainWindowType, child : CrossDomainWindowType) : boolean {\n\n let actualParent = getAncestor(child);\n\n if (actualParent) {\n if (actualParent === parent) {\n return true;\n }\n\n return false;\n }\n\n if (child === parent) {\n return false;\n }\n\n if (getTop(child) === child) {\n return false;\n }\n\n for (let frame of getFrames(parent)) {\n if (frame === child) {\n return true;\n }\n }\n\n return false;\n}\n\nexport function isPopup(win? : CrossDomainWindowType = window) : boolean {\n return Boolean(getOpener(win));\n}\n\nexport function isIframe(win? : CrossDomainWindowType = window) : boolean {\n return Boolean(getParent(win));\n}\n\nexport function isFullpage(win? : CrossDomainWindowType = window) : boolean {\n return Boolean(!isIframe(win) && !isPopup(win));\n}\n\nfunction anyMatch(collection1, collection2) : boolean {\n\n for (let item1 of collection1) {\n for (let item2 of collection2) {\n if (item1 === item2) {\n return true;\n }\n }\n }\n\n return false;\n}\n\nexport function getDistanceFromTop(win : CrossDomainWindowType = window) : number {\n let distance = 0;\n let parent = win;\n\n while (parent) {\n parent = getParent(parent);\n if (parent) {\n distance += 1;\n }\n }\n\n return distance;\n}\n\nexport function getNthParent(win : CrossDomainWindowType, n : number = 1) : ?CrossDomainWindowType {\n let parent = win;\n\n for (let i = 0; i < n; i++) {\n if (!parent) {\n return;\n }\n\n parent = getParent(parent);\n }\n\n return parent;\n}\n\nexport function getNthParentFromTop(win : CrossDomainWindowType, n : number = 1) : ?CrossDomainWindowType {\n return getNthParent(win, getDistanceFromTop(win) - n);\n}\n\nexport function isSameTopWindow(win1 : CrossDomainWindowType, win2 : CrossDomainWindowType) : boolean {\n\n let top1 = getTop(win1) || win1;\n let top2 = getTop(win2) || win2;\n\n try {\n if (top1 && top2) {\n if (top1 === top2) {\n return true;\n }\n\n return false;\n }\n } catch (err) {\n // pass\n }\n\n let allFrames1 = getAllFramesInWindow(win1);\n let allFrames2 = getAllFramesInWindow(win2);\n\n if (anyMatch(allFrames1, allFrames2)) {\n return true;\n }\n\n let opener1 = getOpener(top1);\n let opener2 = getOpener(top2);\n\n if (opener1 && anyMatch(getAllFramesInWindow(opener1), allFrames2)) {\n return false;\n }\n\n if (opener2 && anyMatch(getAllFramesInWindow(opener2), allFrames1)) {\n return false;\n }\n\n return false;\n}\n\nexport function matchDomain(pattern : DomainMatcher, origin : DomainMatcher) : boolean {\n\n if (typeof pattern === 'string') {\n\n if (typeof origin === 'string') {\n return pattern === WILDCARD || origin === pattern;\n }\n\n if (isRegex(origin)) {\n return false;\n }\n\n if (Array.isArray(origin)) {\n return false;\n }\n }\n\n if (isRegex(pattern)) {\n\n if (isRegex(origin)) {\n return pattern.toString() === origin.toString();\n }\n\n if (Array.isArray(origin)) {\n return false;\n }\n\n // $FlowFixMe\n return Boolean(origin.match(pattern));\n }\n\n if (Array.isArray(pattern)) {\n\n if (Array.isArray(origin)) {\n return JSON.stringify(pattern) === JSON.stringify(origin);\n }\n\n if (isRegex(origin)) {\n return false;\n }\n\n return pattern.some(subpattern => matchDomain(subpattern, origin));\n }\n\n return false;\n}\n\nexport function stringifyDomainPattern(pattern : DomainMatcher) : string {\n if (Array.isArray(pattern)) {\n return `(${ pattern.join(' | ') })`;\n } else if (isRegex(pattern)) {\n return `RegExp(${ pattern.toString() }`;\n } else {\n return pattern.toString();\n }\n}\n\nexport function getDomainFromUrl(url : string) : string {\n\n let domain;\n\n if (url.match(/^(https?|mock|file):\\/\\//)) {\n domain = url;\n } else {\n return getDomain();\n }\n\n domain = domain.split('/').slice(0, 3).join('/');\n\n return domain;\n}\n\nexport function onCloseWindow(win : CrossDomainWindowType, callback : Function, delay : number = 1000, maxtime : number = Infinity) : { cancel : () => void } {\n\n let timeout;\n\n let check = () => {\n\n if (isWindowClosed(win)) {\n\n if (timeout) {\n clearTimeout(timeout);\n }\n\n return callback();\n }\n\n if (maxtime <= 0) {\n clearTimeout(timeout);\n } else {\n maxtime -= delay;\n timeout = setTimeout(check, delay);\n }\n };\n\n check();\n\n return {\n cancel() {\n if (timeout) {\n clearTimeout(timeout);\n }\n }\n };\n}\n\n// eslint-disable-next-line complexity\nexport function isWindow(obj : Object) : boolean {\n\n try {\n if (obj === window) {\n return true;\n }\n } catch (err) {\n if (err && err.message === IE_WIN_ACCESS_ERROR) {\n return true;\n }\n }\n\n try {\n if (Object.prototype.toString.call(obj) === '[object Window]') {\n return true;\n }\n } catch (err) {\n if (err && err.message === IE_WIN_ACCESS_ERROR) {\n return true;\n }\n }\n\n try {\n if (window.Window && obj instanceof window.Window) {\n return true;\n }\n } catch (err) {\n if (err && err.message === IE_WIN_ACCESS_ERROR) {\n return true;\n }\n }\n\n try {\n if (obj && obj.self === obj) {\n return true;\n }\n } catch (err) {\n if (err && err.message === IE_WIN_ACCESS_ERROR) {\n return true;\n }\n }\n\n try {\n if (obj && obj.parent === obj) {\n return true;\n }\n } catch (err) {\n if (err && err.message === IE_WIN_ACCESS_ERROR) {\n return true;\n }\n }\n\n try {\n if (obj && obj.top === obj) {\n return true;\n }\n } catch (err) {\n if (err && err.message === IE_WIN_ACCESS_ERROR) {\n return true;\n }\n }\n\n try {\n if (noop(obj === obj) === '__unlikely_value__') { // eslint-disable-line no-self-compare\n return false;\n }\n\n } catch (err) {\n return true;\n }\n\n try {\n if (obj && obj.__cross_domain_utils_window_check__ === '__unlikely_value__') {\n return false;\n }\n\n } catch (err) {\n return true;\n }\n\n return false;\n}\n\nexport function isBrowser() : boolean {\n return (typeof window !== 'undefined' && typeof window.location !== 'undefined');\n}\n\nexport function isCurrentDomain(domain : string) : boolean {\n if (!isBrowser()) {\n return false;\n }\n\n return (getDomain() === domain);\n}\n\nexport function isMockDomain(domain : string) : boolean {\n return domain.indexOf(PROTOCOL.MOCK) === 0;\n}\n\nexport function normalizeMockUrl(url : string) : string {\n if (!isMockDomain(getDomainFromUrl(url))) {\n return url;\n }\n\n if (!__TEST__) {\n throw new Error(`Mock urls not supported out of test mode`);\n }\n\n return url.replace(/^mock:\\/\\/[^/]+/, getActualDomain(window));\n}\n\nexport function closeWindow(win : CrossDomainWindowType) {\n try {\n win.close();\n } catch (err) {\n // pass\n }\n}\n\nexport function getFrameForWindow(win : CrossDomainWindowType) : ?HTMLElement {\n if (isSameDomain(win)) {\n return assertSameDomain(win).frameElement;\n }\n\n for (const frame of document.querySelectorAll('iframe')) {\n if (frame && frame.contentWindow && frame.contentWindow === win) {\n return frame;\n }\n }\n}\n","/* @flow */\n\n// export something to force webpack to see this as an ES module\nexport const TYPES = true;\n\nexport type CrossDomainLocationType = {|\n\n|};\n\nexport type CrossDomainWindowType = {|\n location : string | CrossDomainLocationType,\n self : CrossDomainWindowType,\n closed : boolean,\n open : (string, string, string) => CrossDomainWindowType,\n close : () => void,\n focus : () => void,\n top : CrossDomainWindowType,\n frames : Array,\n opener ? : CrossDomainWindowType,\n parent : CrossDomainWindowType,\n length : number,\n postMessage : (string, string) => void\n|};\n\nexport type SameDomainWindowType = Object & {\n location : string | Object,\n self : CrossDomainWindowType,\n closed : boolean,\n open : (string, string, string) => CrossDomainWindowType,\n close : () => void,\n focus : () => void,\n XMLHttpRequest : typeof XMLHttpRequest,\n document : Document,\n navigator : {\n userAgent : string,\n mockUserAgent? : string\n }\n};\n\nexport type DomainMatcher = string | Array | $ReadOnlyArray | RegExp;\n","/* @flow */\n\nexport * from './utils';\nexport * from './types';\nexport * from './constants';\n","/* @flow */\n\nexport function hasNativeWeakMap() : boolean {\n\n if (typeof WeakMap === 'undefined') {\n return false;\n }\n\n if (typeof Object.freeze === 'undefined') {\n return false;\n }\n\n try {\n\n let testWeakMap = new WeakMap();\n let testKey = {};\n let testValue = '__testvalue__';\n\n Object.freeze(testKey);\n\n testWeakMap.set(testKey, testValue);\n\n if (testWeakMap.get(testKey) === testValue) {\n return true;\n }\n\n return false;\n\n } catch (err) {\n\n return false;\n }\n}\n","/* @flow */\n\nexport function safeIndexOf(collection : Array, item : T) : number {\n for (let i = 0; i < collection.length; i++) {\n\n try {\n if (collection[i] === item) {\n return i;\n }\n } catch (err) {\n // pass\n }\n }\n\n return -1;\n}\n\n// eslint-disable-next-line no-unused-vars\nexport function noop(...args : Array) {\n // pass\n}\n","/* @flow */\n\nimport { isWindow, isWindowClosed } from 'cross-domain-utils/src';\n\nimport { hasNativeWeakMap } from './native';\nimport { noop, safeIndexOf } from './util';\n\nexport class CrossDomainSafeWeakMap {\n\n name : string\n weakmap : ?WeakMap\n keys : Array\n values : Array\n\n constructor() {\n // eslint-disable-next-line no-bitwise\n this.name = `__weakmap_${ Math.random() * 1e9 >>> 0 }__`;\n\n if (hasNativeWeakMap()) {\n try {\n this.weakmap = new WeakMap();\n } catch (err) {\n // pass\n }\n }\n\n this.keys = [];\n this.values = [];\n }\n\n _cleanupClosedWindows() {\n\n let weakmap = this.weakmap;\n let keys = this.keys;\n\n for (let i = 0; i < keys.length; i++) {\n let value = keys[i];\n\n if (isWindow(value) && isWindowClosed(value)) {\n\n if (weakmap) {\n try {\n weakmap.delete(value);\n } catch (err) {\n // pass\n }\n }\n\n keys.splice(i, 1);\n this.values.splice(i, 1);\n\n i -= 1;\n }\n }\n }\n\n isSafeToReadWrite(key : K) : boolean {\n\n if (isWindow(key)) {\n return false;\n }\n\n try {\n noop(key && key.self);\n noop(key && key[this.name]);\n } catch (err) {\n return false;\n }\n\n return true;\n }\n\n set(key : K, value : V) {\n\n if (!key) {\n throw new Error(`WeakMap expected key`);\n }\n\n let weakmap = this.weakmap;\n\n if (weakmap) {\n try {\n weakmap.set(key, value);\n } catch (err) {\n delete this.weakmap;\n }\n }\n\n if (this.isSafeToReadWrite(key)) {\n try {\n let name = this.name;\n let entry = key[name];\n\n if (entry && entry[0] === key) {\n entry[1] = value;\n } else {\n Object.defineProperty(key, name, {\n value: [ key, value ],\n writable: true\n });\n }\n\n return;\n\n } catch (err) {\n // pass\n }\n }\n\n this._cleanupClosedWindows();\n\n let keys = this.keys;\n let values = this.values;\n let index = safeIndexOf(keys, key);\n\n if (index === -1) {\n keys.push(key);\n values.push(value);\n } else {\n values[index] = value;\n }\n }\n\n get(key : K) : V | void {\n\n if (!key) {\n throw new Error(`WeakMap expected key`);\n }\n\n let weakmap = this.weakmap;\n\n if (weakmap) {\n try {\n if (weakmap.has(key)) {\n return weakmap.get(key);\n }\n \n } catch (err) {\n delete this.weakmap;\n }\n }\n\n if (this.isSafeToReadWrite(key)) {\n try {\n let entry = key[this.name];\n\n if (entry && entry[0] === key) {\n return entry[1];\n }\n\n return;\n } catch (err) {\n // pass\n }\n }\n\n this._cleanupClosedWindows();\n\n let keys = this.keys;\n let index = safeIndexOf(keys, key);\n\n if (index === -1) {\n return;\n }\n\n return this.values[index];\n }\n\n delete(key : K) {\n\n if (!key) {\n throw new Error(`WeakMap expected key`);\n }\n\n let weakmap = this.weakmap;\n\n if (weakmap) {\n try {\n weakmap.delete(key);\n } catch (err) {\n delete this.weakmap;\n }\n }\n\n if (this.isSafeToReadWrite(key)) {\n try {\n let entry = key[this.name];\n\n if (entry && entry[0] === key) {\n entry[0] = entry[1] = undefined;\n }\n } catch (err) {\n // pass\n }\n }\n\n this._cleanupClosedWindows();\n\n let keys = this.keys;\n let index = safeIndexOf(keys, key);\n\n if (index !== -1) {\n keys.splice(index, 1);\n this.values.splice(index, 1);\n }\n }\n\n has(key : K) : boolean {\n\n if (!key) {\n throw new Error(`WeakMap expected key`);\n }\n\n let weakmap = this.weakmap;\n\n if (weakmap) {\n try {\n if (weakmap.has(key)) {\n return true;\n }\n } catch (err) {\n delete this.weakmap;\n }\n }\n\n if (this.isSafeToReadWrite(key)) {\n try {\n let entry = key[this.name];\n\n if (entry && entry[0] === key) {\n return true;\n }\n\n return false;\n } catch (err) {\n // pass\n }\n }\n\n this._cleanupClosedWindows();\n\n let index = safeIndexOf(this.keys, key);\n return index !== -1;\n }\n\n getOrSet(key : K, getter : () => V) : V {\n if (this.has(key)) {\n // $FlowFixMe\n return this.get(key);\n }\n\n let value = getter();\n this.set(key, value);\n return value;\n }\n}\n","/* @flow */\n/* eslint max-lines: 0 */\n\nimport { ZalgoPromise } from 'zalgo-promise/src';\nimport { WeakMap } from 'cross-domain-safe-weakmap/src';\n\nimport type { CancelableType } from './types';\n\nexport function getFunctionName (fn : T) : string {\n return fn.name || fn.__name__ || fn.displayName || 'anonymous';\n}\n\nexport function setFunctionName (fn : T, name : string) : T {\n try {\n delete fn.name;\n fn.name = name;\n } catch (err) {\n // pass\n }\n\n fn.__name__ = fn.displayName = name;\n return fn;\n}\n\nexport function base64encode(str : string) : string {\n if (typeof btoa === 'function') {\n return btoa(encodeURIComponent(str).replace(/%([0-9A-F]{2})/g, (m, p1) => {\n return String.fromCharCode(parseInt(p1, 16));\n }));\n }\n\n if (typeof Buffer !== 'undefined') {\n return Buffer.from(str, 'utf8').toString('base64');\n }\n\n throw new Error(`Can not find window.btoa or Buffer`);\n}\n\nexport function base64decode(str : string) : string {\n if (typeof atob === 'function') {\n return decodeURIComponent(Array.prototype.map.call(atob(str), c => {\n // eslint-disable-next-line prefer-template\n return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);\n }).join(''));\n }\n\n if (typeof Buffer !== 'undefined') {\n return Buffer.from(str, 'base64').toString('utf8');\n }\n\n throw new Error(`Can not find window.atob or Buffer`);\n}\n\nexport function uniqueID() : string {\n\n let chars = '0123456789abcdef';\n\n let randomID = 'xxxxxxxxxx'.replace(/./g, () => {\n return chars.charAt(Math.floor(Math.random() * chars.length));\n });\n\n let timeID = base64encode(\n new Date().toISOString().slice(11, 19).replace('T', '.')\n ).replace(/[^a-zA-Z0-9]/g, '').toLowerCase();\n\n return `${ randomID }_${ timeID }`;\n}\n\nexport function getGlobal() : Object {\n if (typeof window !== 'undefined') {\n return window;\n }\n if (typeof global !== 'undefined') {\n return global;\n }\n if (typeof __GLOBAL__ !== 'undefined') {\n return __GLOBAL__;\n }\n throw new Error(`No global found`);\n}\n\nlet objectIDs;\n\nexport function getObjectID(obj : Object) : string {\n\n objectIDs = objectIDs || new WeakMap();\n\n if (obj === null || obj === undefined || (typeof obj !== 'object' && typeof obj !== 'function')) {\n throw new Error(`Invalid object`);\n }\n\n let uid = objectIDs.get(obj);\n\n if (!uid) {\n uid = `${ typeof obj }:${ uniqueID() }`;\n objectIDs.set(obj, uid);\n }\n\n return uid;\n}\n\nfunction serializeArgs(args : Array) : string {\n try {\n return JSON.stringify(Array.prototype.slice.call(args), (subkey, val) => {\n if (typeof val === 'function') {\n return `memoize[${ getObjectID(val) }]`;\n }\n return val;\n });\n } catch (err) {\n throw new Error(`Arguments not serializable -- can not be used to memoize`);\n }\n}\nexport function memoize) => R, X : { (...args : Array) : R, displayName : string, reset : () => void }>(method : F, options : { time? : number, thisNamespace? : boolean } = {}) : X {\n let cacheMap = new WeakMap();\n\n // $FlowFixMe\n let memoizedFunction : X = function memoizedFunction(...args : Array) : R {\n let cache = cacheMap.getOrSet(options.thisNamespace ? this : method, () => ({}));\n\n let key : string = serializeArgs(args);\n\n let cacheTime = options.time;\n if (cache[key] && cacheTime && (Date.now() - cache[key].time) < cacheTime) {\n delete cache[key];\n }\n\n if (cache[key]) {\n return cache[key].value;\n }\n\n let time = Date.now();\n let value = method.apply(this, arguments);\n\n cache[key] = { time, value };\n\n return cache[key].value;\n };\n\n memoizedFunction.reset = () => {\n cacheMap.delete(options.thisNamespace ? this : method);\n };\n\n return setFunctionName(memoizedFunction, `${ getFunctionName(method) }::memoized`);\n}\n\nexport function promiseIdentity(item : ZalgoPromise | T) : ZalgoPromise {\n // $FlowFixMe\n return ZalgoPromise.resolve(item);\n}\n\n// eslint-disable-next-line flowtype/no-weak-types\nexport function memoizePromise(method : (...args : Array) => ZalgoPromise) : ((...args : Array) => ZalgoPromise) {\n let cache = {};\n\n // eslint-disable-next-line flowtype/no-weak-types\n function memoizedPromiseFunction(...args : Array) : ZalgoPromise {\n let key : string = serializeArgs(args);\n\n if (cache.hasOwnProperty(key)) {\n return cache[key];\n }\n\n cache[key] = ZalgoPromise.try(() => method.apply(this, arguments))\n .finally(() => {\n delete cache[key];\n });\n\n return cache[key];\n }\n\n memoizedPromiseFunction.reset = () => {\n cache = {};\n };\n\n return setFunctionName(memoizedPromiseFunction, `${ getFunctionName(method) }::promiseMemoized`);\n}\n\n// eslint-disable-next-line flowtype/no-weak-types\nexport function promisify(method : (...args : Array) => R, options : { name? : string } = {}) : ((...args : Array) => ZalgoPromise) {\n function promisifiedFunction() : ZalgoPromise {\n return ZalgoPromise.try(method, this, arguments);\n }\n\n if (options.name) {\n promisifiedFunction.displayName = `${ options.name }:promisified`;\n }\n\n return setFunctionName(promisifiedFunction, `${ getFunctionName(method) }::promisified`);\n}\n\n// eslint-disable-next-line flowtype/no-weak-types\nexport function inlineMemoize(method : (...args : Array) => R, logic : (...args : Array) => R, args : Array = []) : R {\n // $FlowFixMe\n let cache = method.__inline_memoize_cache__ = method.__inline_memoize_cache__ || {};\n let key = serializeArgs(args);\n\n if (cache.hasOwnProperty(key)) {\n return cache[key];\n }\n \n let result = cache[key] = logic(...args);\n\n return result;\n}\n\n// eslint-disable-next-line no-unused-vars\nexport function noop(...args : Array) {\n // pass\n}\n\nexport function once(method : Function) : Function {\n let called = false;\n\n const onceFunction = function() : mixed {\n if (!called) {\n called = true;\n return method.apply(this, arguments);\n }\n };\n\n return setFunctionName(onceFunction, `${ getFunctionName(method) }::once`);\n}\n\nexport function hashStr(str : string) : number {\n let hash = 0;\n for (let i = 0; i < str.length; i++) {\n hash += str[i].charCodeAt(0) * Math.pow((i % 10) + 1, 5);\n }\n return Math.floor(Math.pow(Math.sqrt(hash), 5));\n}\n\nexport function strHashStr(str : string) : string {\n let hash = '';\n\n for (let i = 0; i < str.length; i++) {\n let total = (str[i].charCodeAt(0) * i);\n\n if (str[i + 1]) {\n total += (str[i + 1].charCodeAt(0) * (i - 1));\n }\n\n hash += String.fromCharCode(97 + (Math.abs(total) % 26));\n }\n\n return hash;\n}\n\nexport function match(str : string, pattern : RegExp) : ?string {\n let regmatch = str.match(pattern);\n if (regmatch) {\n return regmatch[1];\n }\n}\n\nexport function awaitKey(obj : Object, key : string) : ZalgoPromise {\n return new ZalgoPromise(resolve => {\n\n let value = obj[key];\n\n if (value) {\n return resolve(value);\n }\n\n delete obj[key];\n\n Object.defineProperty(obj, key, {\n\n configurable: true,\n\n set(item) {\n value = item;\n\n if (value) {\n resolve(value);\n }\n },\n\n get() : mixed {\n return value;\n }\n });\n });\n}\n\nexport function stringifyError(err : mixed, level : number = 1) : string {\n\n if (level >= 3) {\n return 'stringifyError stack overflow';\n }\n\n try {\n if (!err) {\n return ``;\n }\n\n if (typeof err === 'string') {\n return err;\n }\n\n if (err instanceof Error) {\n let stack = err && err.stack;\n let message = err && err.message;\n\n if (stack && message) {\n if (stack.indexOf(message) !== -1) {\n return stack;\n } else {\n return `${ message }\\n${ stack }`;\n }\n } else if (stack) {\n return stack;\n } else if (message) {\n return message;\n }\n }\n\n if (err && err.toString && typeof err.toString === 'function') {\n // $FlowFixMe\n return err.toString();\n }\n\n return Object.prototype.toString.call(err);\n\n } catch (newErr) { // eslint-disable-line unicorn/catch-error-name\n return `Error while stringifying error: ${ stringifyError(newErr, level + 1) }`;\n }\n}\n\nexport function stringifyErrorMessage(err : mixed) : string {\n\n let defaultMessage = ``;\n\n if (!err) {\n return defaultMessage;\n }\n\n if (err instanceof Error) {\n return err.message || defaultMessage;\n }\n\n if (typeof err.message === 'string') {\n return err.message || defaultMessage;\n }\n\n return defaultMessage;\n}\n\nexport function stringify(item : mixed) : string {\n if (typeof item === 'string') {\n return item;\n }\n\n if (item && item.toString && typeof item.toString === 'function') {\n // $FlowFixMe\n return item.toString();\n }\n\n return Object.prototype.toString.call(item);\n}\n\nexport function domainMatches(hostname : string, domain : string) : boolean {\n hostname = hostname.split('://')[1];\n let index = hostname.indexOf(domain);\n return (index !== -1 && hostname.slice(index) === domain);\n}\n\nexport function patchMethod(obj : Object, name : string, handler : Function) {\n let original = obj[name];\n\n obj[name] = function patchedMethod() : mixed {\n return handler({\n context: this,\n args: Array.prototype.slice.call(arguments),\n original,\n callOriginal: () => original.apply(this, arguments)\n });\n };\n}\n\nexport function extend(obj : T, source : Object) : T {\n if (!source) {\n return obj;\n }\n\n if (Object.assign) {\n return Object.assign(obj, source);\n }\n\n for (let key in source) {\n if (source.hasOwnProperty(key)) {\n obj[key] = source[key];\n }\n }\n\n return obj;\n}\n\nexport function values(obj : { [string] : T }) : Array {\n let result = [];\n for (let key in obj) {\n if (obj.hasOwnProperty(key)) {\n result.push(obj[key]);\n }\n }\n return result;\n}\n\nexport function perc(pixels : number, percentage : number) : number {\n return Math.round((pixels * percentage) / 100);\n}\n\nexport function min(...args : Array) : number {\n return Math.min(...args);\n}\n\nexport function max(...args : Array) : number {\n return Math.max(...args);\n}\n\nexport function regexMap(str : string, regexp : RegExp, handler : () => T) : Array {\n let results = [];\n\n // $FlowFixMe\n str.replace(regexp, function regexMapMatcher(item) {\n results.push(handler ? handler.apply(null, arguments) : item);\n });\n\n // $FlowFixMe\n return results;\n}\n\nexport function svgToBase64(svg : string) : string {\n return `data:image/svg+xml;base64,${ base64encode(svg) }`;\n}\n\nexport function objFilter(obj : { [string] : T }, filter? : (T, ?string) => mixed = Boolean) : { [string] : R } {\n let result = {};\n\n for (let key in obj) {\n if (!obj.hasOwnProperty(key) || !filter(obj[key], key)) {\n continue;\n }\n\n result[key] = obj[key];\n }\n\n return result;\n}\n\nexport function identity (item : T) : T {\n return item;\n}\n\nexport function regexTokenize(text : string, regexp : RegExp) : Array {\n let result = [];\n text.replace(regexp, token => {\n result.push(token);\n return '';\n });\n return result;\n}\n\nexport function promiseDebounce(method : () => ZalgoPromise | T, delay : number = 50) : () => ZalgoPromise {\n\n let promise;\n let timeout;\n\n const promiseDebounced = function() : ZalgoPromise {\n if (timeout) {\n clearTimeout(timeout);\n }\n\n let localPromise = promise = promise || new ZalgoPromise();\n\n timeout = setTimeout(() => {\n promise = null;\n timeout = null;\n\n ZalgoPromise.try(method).then(\n result => { localPromise.resolve(result); },\n err => { localPromise.reject(err); }\n );\n }, delay);\n\n return localPromise;\n };\n\n return setFunctionName(promiseDebounced, `${ getFunctionName(method) }::promiseDebounced`);\n}\n\nexport function safeInterval(method : Function, time : number) : { cancel : () => void } {\n\n let timeout;\n\n function loop() {\n timeout = setTimeout(() => {\n method();\n loop();\n }, time);\n }\n\n loop();\n\n return {\n cancel() {\n clearTimeout(timeout);\n }\n };\n}\n\nexport function isInteger(str : string) : boolean {\n return Boolean(str.match(/^[0-9]+$/));\n}\n\nexport function isFloat(str : string) : boolean {\n return Boolean(str.match(/^[0-9]+\\.[0-9]+$/));\n}\n\nexport function serializePrimitive(value : string | number | boolean) : string {\n return value.toString();\n}\n\nexport function deserializePrimitive(value : string) : string | number | boolean {\n if (value === 'true') {\n return true;\n } else if (value === 'false') {\n return false;\n } else if (isInteger(value)) {\n return parseInt(value, 10);\n } else if (isFloat(value)) {\n return parseFloat(value);\n } else {\n return value;\n }\n}\n\nexport function dotify(obj : Object, prefix : string = '', newobj : Object = {}) : { [string] : string } {\n prefix = prefix ? `${ prefix }.` : prefix;\n for (let key in obj) {\n if (!obj.hasOwnProperty(key) || obj[key] === undefined || obj[key] === null || typeof obj[key] === 'function') {\n continue;\n } else if (obj[key] && Array.isArray(obj[key]) && obj[key].length && obj[key].every(val => typeof val !== 'object')) {\n newobj[`${ prefix }${ key }[]`] = obj[key].join(',');\n } else if (obj[key] && typeof obj[key] === 'object') {\n newobj = dotify(obj[key], `${ prefix }${ key }`, newobj);\n } else {\n newobj[`${ prefix }${ key }`] = serializePrimitive(obj[key]);\n }\n }\n return newobj;\n}\n\nexport function undotify(obj : { [string] : string }) : Object {\n \n let result = {};\n\n for (let key in obj) {\n if (!obj.hasOwnProperty(key) || typeof obj[key] !== 'string') {\n continue;\n }\n\n let value = obj[key];\n\n if (key.match(/^.+\\[\\]$/)) {\n key = key.slice(0, key.length - 2);\n value = value.split(',').map(deserializePrimitive);\n } else {\n value = deserializePrimitive(value);\n }\n\n let keyResult = result;\n let parts = key.split('.');\n for (let i = 0; i < parts.length; i++) {\n let part = parts[i];\n let isLast = (i + 1 === parts.length);\n let isIndex = !isLast && isInteger(parts[i + 1]);\n\n if (part === 'constructor' || part === 'prototype' || part === '__proto__') {\n throw new Error(`Disallowed key: ${ part }`);\n }\n\n if (isLast) {\n // $FlowFixMe\n keyResult[part] = value;\n } else {\n // $FlowFixMe\n keyResult = keyResult[part] = keyResult[part] || (isIndex ? [] : {});\n }\n }\n }\n\n return result;\n}\n\nexport type EventEmitterType = {\n on : (eventName : string, handler : Function) => CancelableType,\n once : (eventName : string, handler : Function) => CancelableType,\n trigger : (eventName : string, ...args : $ReadOnlyArray) => ZalgoPromise,\n triggerOnce : (eventName : string, ...args : $ReadOnlyArray) => ZalgoPromise,\n reset : () => void\n};\n\nexport function eventEmitter() : EventEmitterType {\n let triggered = {};\n let handlers = {};\n\n return {\n\n on(eventName : string, handler : Function) : CancelableType {\n let handlerList = handlers[eventName] = handlers[eventName] || [];\n\n handlerList.push(handler);\n\n let cancelled = false;\n\n return {\n cancel() {\n if (!cancelled) {\n cancelled = true;\n handlerList.splice(handlerList.indexOf(handler), 1);\n }\n\n }\n };\n },\n\n once(eventName : string, handler : Function) : CancelableType {\n\n let listener = this.on(eventName, () => {\n listener.cancel();\n handler();\n });\n\n return listener;\n },\n\n trigger(eventName : string, ...args : $ReadOnlyArray) : ZalgoPromise {\n\n let handlerList = handlers[eventName];\n let promises = [];\n\n if (handlerList) {\n for (let handler of handlerList) {\n promises.push(ZalgoPromise.try(() => handler(...args)));\n }\n }\n\n return ZalgoPromise.all(promises).then(noop);\n },\n\n triggerOnce(eventName : string, ...args : $ReadOnlyArray) : ZalgoPromise {\n\n if (triggered[eventName]) {\n return ZalgoPromise.resolve();\n }\n\n triggered[eventName] = true;\n return this.trigger(eventName, ...args);\n },\n\n reset() {\n handlers = {};\n }\n };\n}\n\nexport function camelToDasherize(string : string) : string {\n return string.replace(/([A-Z])/g, (g) => {\n return `-${ g.toLowerCase() }`;\n });\n}\n\nexport function dasherizeToCamel(string : string) : string {\n return string.replace(/-([a-z])/g, (g) => {\n return g[1].toUpperCase();\n });\n}\n\nexport function capitalizeFirstLetter(string : string) : string {\n return string.charAt(0).toUpperCase() + string.slice(1).toLowerCase();\n}\n\nexport function get(item : Object, path : string, def : mixed) : mixed {\n\n if (!path) {\n return def;\n }\n\n let pathParts = path.split('.');\n\n // Loop through each section of our key path\n\n for (let i = 0; i < pathParts.length; i++) {\n\n // If we have an object, we can get the key\n if (typeof item === 'object' && item !== null) {\n item = item[pathParts[i]];\n\n // Otherwise, we should return the default (undefined if not provided)\n } else {\n return def;\n }\n }\n\n // If our final result is undefined, we should return the default\n\n return item === undefined ? def : item;\n}\n\nexport function safeTimeout(method : Function, time : number) {\n\n let interval = safeInterval(() => {\n time -= 100;\n if (time <= 0) {\n interval.cancel();\n method();\n }\n }, 100);\n}\n\nexport function defineLazyProp(obj : Object | Array, key : string | number, getter : () => T) {\n if (Array.isArray(obj)) {\n if (typeof key !== 'number') {\n throw new TypeError(`Array key must be number`);\n }\n } else if (typeof obj === 'object' && obj !== null) {\n if (typeof key !== 'string') {\n throw new TypeError(`Object key must be string`);\n }\n }\n \n Object.defineProperty(obj, key, {\n configurable: true,\n enumerable: true,\n get: () => {\n // $FlowFixMe\n delete obj[key];\n let value = getter();\n // $FlowFixMe\n obj[key] = value;\n return value;\n },\n set: (value : T) => {\n // $FlowFixMe\n delete obj[key];\n // $FlowFixMe\n obj[key] = value;\n }\n });\n}\n\nexport function arrayFrom(item : Iterable) : Array { // eslint-disable-line no-undef\n return Array.prototype.slice.call(item);\n}\n\nexport function isObject(item : mixed) : boolean {\n return (typeof item === 'object' && item !== null);\n}\n\nexport function isObjectObject(obj : mixed) : boolean {\n return isObject(obj) && Object.prototype.toString.call(obj) === '[object Object]';\n}\n\nexport function isPlainObject(obj : mixed) : boolean {\n if (!isObjectObject(obj)) {\n return false;\n }\n\n // $FlowFixMe\n let constructor = obj.constructor;\n\n if (typeof constructor !== 'function') {\n return false;\n }\n\n let prototype = constructor.prototype;\n\n if (!isObjectObject(prototype)) {\n return false;\n }\n\n if (!prototype.hasOwnProperty('isPrototypeOf')) {\n return false;\n }\n\n return true;\n}\n\nexport function replaceObject | Object> (item : T, replacer : (mixed, string | number, string) => mixed, fullKey : string = '') : T {\n\n if (Array.isArray(item)) {\n let length = item.length;\n let result : Array = [];\n\n for (let i = 0; i < length; i++) {\n\n \n defineLazyProp(result, i, () => {\n let itemKey = fullKey ? `${ fullKey }.${ i }` : `${ i }`;\n let el = item[i];\n\n let child = replacer(el, i, itemKey);\n\n if (isPlainObject(child) || Array.isArray(child)) {\n // $FlowFixMe\n child = replaceObject(child, replacer, itemKey);\n }\n\n return child;\n });\n }\n\n // $FlowFixMe\n return result;\n } else if (isPlainObject(item)) {\n let result = {};\n\n for (let key in item) {\n if (!item.hasOwnProperty(key)) {\n continue;\n }\n\n defineLazyProp(result, key, () => {\n let itemKey = fullKey ? `${ fullKey }.${ key }` : `${ key }`;\n // $FlowFixMe\n let el = item[key];\n\n let child = replacer(el, key, itemKey);\n\n if (isPlainObject(child) || Array.isArray(child)) {\n // $FlowFixMe\n child = replaceObject(child, replacer, itemKey);\n }\n\n return child;\n });\n }\n\n // $FlowFixMe\n return result;\n } else {\n throw new Error(`Pass an object or array`);\n }\n}\n\n\nexport function copyProp(source : Object, target : Object, name : string, def : mixed) {\n if (source.hasOwnProperty(name)) {\n let descriptor = Object.getOwnPropertyDescriptor(source, name);\n // $FlowFixMe\n Object.defineProperty(target, name, descriptor);\n\n } else {\n target[name] = def;\n }\n}\n\ntype RegexResultType = {\n text : string,\n groups : Array,\n start : number,\n end : number,\n length : number,\n replace : (text : string) => string\n};\n\nexport function regex(pattern : string | RegExp, string : string, start : number = 0) : ?RegexResultType {\n\n if (typeof pattern === 'string') {\n // eslint-disable-next-line security/detect-non-literal-regexp\n pattern = new RegExp(pattern);\n }\n\n let result = string.slice(start).match(pattern);\n\n if (!result) {\n return;\n }\n\n // $FlowFixMe\n let index : number = result.index;\n let regmatch = result[0];\n\n return {\n text: regmatch,\n groups: result.slice(1),\n start: start + index,\n end: start + index + regmatch.length,\n length: regmatch.length,\n\n replace(text : string) : string {\n\n if (!regmatch) {\n return '';\n }\n\n return `${ regmatch.slice(0, start + index) }${ text }${ regmatch.slice(index + regmatch.length) }`;\n }\n };\n}\n\nexport function regexAll(pattern : string | RegExp, string : string) : Array {\n\n let matches = [];\n let start = 0;\n\n // eslint-disable-next-line no-constant-condition\n while (true) {\n let regmatch = regex(pattern, string, start);\n\n if (!regmatch) {\n break;\n }\n\n matches.push(regmatch);\n start = match.end;\n }\n\n return matches;\n}\n\nexport function isDefined(value : ?mixed) : boolean {\n return value !== null && value !== undefined;\n}\n\nexport function cycle(method : Function) : ZalgoPromise {\n return ZalgoPromise.try(method).then(() => cycle(method));\n}\n\nexport function debounce(method : (...args : Array) => T, time : number = 100) : (...args : Array) => void {\n\n let timeout;\n\n const debounceWrapper = function() {\n clearTimeout(timeout);\n\n timeout = setTimeout(() => {\n return method.apply(this, arguments);\n }, time);\n };\n\n return setFunctionName(debounceWrapper, `${ getFunctionName(method) }::debounced`);\n}\n\nexport function isRegex(item : mixed) : boolean {\n return Object.prototype.toString.call(item) === '[object RegExp]';\n}\n\ntype FunctionProxy = (method : T) => T;\n\n// eslint-disable-next-line flowtype/no-weak-types\nexport let weakMapMemoize : FunctionProxy<*> = (method : (arg : any) => R) : ((...args : Array) => R) => {\n\n let weakmap = new WeakMap();\n\n // eslint-disable-next-line flowtype/no-weak-types\n return function weakmapMemoized(arg : any) : R {\n return weakmap.getOrSet(arg, () => method.call(this, arg));\n };\n};\n\ntype FunctionPromiseProxy) => ZalgoPromise> = (T) => T;\n\n// eslint-disable-next-line flowtype/no-weak-types\nexport let weakMapMemoizePromise : FunctionPromiseProxy<*, *> = (method : (arg : any) => ZalgoPromise) : ((...args : Array) => ZalgoPromise) => {\n\n let weakmap = new WeakMap();\n\n // eslint-disable-next-line flowtype/no-weak-types\n return function weakmapMemoizedPromise(arg : any) : ZalgoPromise {\n return weakmap.getOrSet(arg, () =>\n method.call(this, arg).finally(() => {\n weakmap.delete(arg);\n })\n );\n };\n};\n\nexport function getOrSet(obj : O, key : string, getter : () => T) : T {\n if (obj.hasOwnProperty(key)) {\n return obj[key];\n }\n\n const val = getter();\n obj[key] = val;\n return val;\n}\n\nexport type CleanupType = {|\n set : (string, T) => T, // eslint-disable-line no-undef\n register : (Function) => void,\n all : () => ZalgoPromise\n|};\n\nexport function cleanup(obj : Object) : CleanupType {\n\n const tasks = [];\n let cleaned = false;\n\n return {\n set(name : string, item : T) : T {\n if (!cleaned) {\n obj[name] = item;\n this.register(() => {\n delete obj[name];\n });\n }\n return item;\n },\n\n register(method : Function) {\n if (cleaned) {\n method();\n } else {\n tasks.push(once(method));\n }\n },\n\n all() : ZalgoPromise {\n const results = [];\n cleaned = true;\n\n while (tasks.length) {\n const task = tasks.pop();\n results.push(task());\n }\n\n return ZalgoPromise.all(results).then(noop);\n }\n };\n}\n\nexport function tryCatch(fn : () => T) : {| result : T, error : void |} | {| result : void, error : mixed |} {\n let result;\n let error;\n\n try {\n result = fn();\n } catch (err) {\n error = err;\n }\n \n // $FlowFixMe\n return { result, error };\n}\n\nexport function removeFromArray>(arr : T, item : X) {\n const index = arr.indexOf(item);\n if (index !== -1) {\n arr.splice(index, 1);\n }\n}\n\nexport function assertExists(name : string, thing : void | null | T) : T {\n if (thing === null || typeof thing === 'undefined') {\n throw new Error(`Expected ${ name } to be present`);\n }\n \n return thing;\n}\n \nexport function unique(arr : $ReadOnlyArray) : $ReadOnlyArray {\n const result = {};\n for (const item of arr) {\n // eslint-disable-next-line const-immutable/no-mutation\n result[item] = true;\n }\n return Object.keys(result);\n}\n","/* @flow */\n\nexport const KEY_CODES = {\n ENTER: 13\n};\n","/* @flow */\n/* eslint max-lines: off */\n\nimport { ZalgoPromise } from 'zalgo-promise/src';\nimport { linkFrameWindow, isWindowClosed,\n type SameDomainWindowType, type CrossDomainWindowType } from 'cross-domain-utils/src';\nimport { WeakMap } from 'cross-domain-safe-weakmap/src';\n\nimport { inlineMemoize, noop, stringify, capitalizeFirstLetter,\n once, extend, safeInterval, uniqueID, arrayFrom } from './util';\nimport { isDevice } from './device';\nimport { KEY_CODES } from './constants';\nimport type { CancelableType } from './types';\n\ntype ElementRefType = string | HTMLElement;\n\nexport function isDocumentReady() : boolean {\n return Boolean(document.body) && document.readyState === 'complete';\n}\n\nexport function urlEncode(str : string) : string {\n return str.replace(/\\?/g, '%3F').replace(/&/g, '%26').replace(/#/g, '%23').replace(/\\+/g, '%2B');\n}\n\nexport function waitForWindowReady() : ZalgoPromise {\n return inlineMemoize(waitForWindowReady, () : ZalgoPromise => {\n return new ZalgoPromise(resolve => {\n if (isDocumentReady()) {\n resolve();\n }\n\n window.addEventListener('load', () => resolve());\n });\n });\n}\n\nexport function waitForDocumentReady() : ZalgoPromise {\n return inlineMemoize(waitForDocumentReady, () : ZalgoPromise => {\n return new ZalgoPromise(resolve => {\n\n if (isDocumentReady()) {\n return resolve();\n }\n\n let interval = setInterval(() => {\n if (isDocumentReady()) {\n clearInterval(interval);\n return resolve();\n }\n }, 10);\n });\n });\n}\n\nexport function waitForDocumentBody() : ZalgoPromise {\n return waitForDocumentReady().then(() => {\n if (document.body) {\n return document.body;\n }\n\n throw new Error('Document ready but document.body not present');\n });\n}\n\nexport function parseQuery(queryString : string) : Object {\n return inlineMemoize(parseQuery, () : Object => {\n let params = {};\n\n if (!queryString) {\n return params;\n }\n\n if (queryString.indexOf('=') === -1) {\n return params;\n }\n\n for (let pair of queryString.split('&')) {\n pair = pair.split('=');\n\n if (pair[0] && pair[1]) {\n params[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1]);\n }\n }\n\n return params;\n }, [ queryString ]);\n}\n\n\nexport function getQueryParam(name : string) : string {\n return parseQuery(window.location.search.slice(1))[name];\n}\n\nexport function urlWillRedirectPage(url : string) : boolean {\n\n if (url.indexOf('#') === -1) {\n return true;\n }\n\n if (url.indexOf('#') === 0) {\n return false;\n }\n\n if (url.split('#')[0] === window.location.href.split('#')[0]) {\n return false;\n }\n\n return true;\n}\n\nexport function formatQuery(obj : { [ string ] : string } = {}) : string {\n\n return Object.keys(obj).filter(key => {\n return typeof obj[key] === 'string';\n }).map(key => {\n return `${ urlEncode(key) }=${ urlEncode(obj[key]) }`;\n }).join('&');\n}\n\nexport function extendQuery(originalQuery : string, props : { [ string ] : string } = {}) : string {\n\n if (!props || !Object.keys(props).length) {\n return originalQuery;\n }\n\n return formatQuery({\n ...parseQuery(originalQuery),\n ...props\n });\n}\n\nexport function extendUrl(url : string, options : { query? : { [string] : string }, hash? : { [string] : string } } = {}) : string {\n\n let query = options.query || {};\n let hash = options.hash || {};\n\n let originalUrl;\n let originalQuery;\n let originalHash;\n\n [ originalUrl, originalHash ] = url.split('#');\n [ originalUrl, originalQuery ] = originalUrl.split('?');\n\n let queryString = extendQuery(originalQuery, query);\n let hashString = extendQuery(originalHash, hash);\n\n if (queryString) {\n originalUrl = `${ originalUrl }?${ queryString }`;\n }\n\n if (hashString) {\n originalUrl = `${ originalUrl }#${ hashString }`;\n }\n\n return originalUrl;\n}\n\nexport function redirect(url : string, win : CrossDomainWindowType = window) : ZalgoPromise {\n return new ZalgoPromise(resolve => {\n win.location = url;\n if (!urlWillRedirectPage(url)) {\n resolve();\n }\n });\n}\n\nexport function hasMetaViewPort() : boolean {\n let meta = document.querySelector('meta[name=viewport]');\n\n if (isDevice() && window.screen.width < 660 && !meta) {\n return false;\n }\n\n return true;\n}\n\nexport function isElementVisible(el : HTMLElement) : boolean {\n return Boolean(el.offsetWidth || el.offsetHeight || el.getClientRects().length);\n}\n\nexport function enablePerformance() : boolean {\n return inlineMemoize(enablePerformance, () : boolean => {\n /* eslint-disable compat/compat */\n return Boolean(\n window.performance &&\n performance.now &&\n performance.timing &&\n performance.timing.connectEnd &&\n performance.timing.navigationStart &&\n (Math.abs(performance.now() - Date.now()) > 1000) &&\n (performance.now() - (performance.timing.connectEnd - performance.timing.navigationStart)) > 0\n );\n /* eslint-enable compat/compat */\n });\n}\n\nexport function getPageRenderTime() : ZalgoPromise {\n return waitForDocumentReady().then(() => {\n\n if (!enablePerformance()) {\n return;\n }\n\n let timing = window.performance.timing;\n\n if (timing.connectEnd && timing.domInteractive) {\n return timing.domInteractive - timing.connectEnd;\n }\n });\n}\n\nexport function htmlEncode(html : string = '') : string {\n return html.toString()\n .replace(/&/g, '&')\n .replace(//g, '>')\n .replace(/\"/g, '"')\n .replace(/'/g, ''')\n .replace(/\\//g, '/');\n}\n\nexport function isBrowser() : boolean {\n return (typeof window !== 'undefined');\n}\n\nexport function querySelectorAll(selector : string, doc : HTMLElement = window.document) : Array {\n return Array.prototype.slice.call(doc.querySelectorAll(selector));\n}\n\nexport function onClick(element : HTMLElement, handler : (Event) => void) {\n element.addEventListener('touchstart', noop);\n element.addEventListener('click', handler);\n element.addEventListener('keypress', (event : Event) => {\n // $FlowFixMe\n if (event.keyCode === KEY_CODES.ENTER) {\n return handler(event);\n }\n });\n}\n\nexport function getScript({ host = window.location.host, path } : { host? : string, path : string }) : ?HTMLScriptElement {\n return inlineMemoize(getScript, () : ?HTMLScriptElement => {\n\n let url = `${ host }${ path }`;\n let scripts = Array.prototype.slice.call(document.getElementsByTagName('script'));\n\n for (let script of scripts) {\n if (!script.src) {\n continue;\n }\n\n let src = script.src.replace(/^https?:\\/\\//, '').split('?')[0];\n\n if (src === url) {\n return script;\n }\n }\n }, [ path ]);\n}\n\nexport function isLocalStorageEnabled() : boolean {\n return inlineMemoize(isLocalStorageEnabled, () => {\n try {\n if (typeof window === 'undefined') {\n return false;\n }\n\n if (window.localStorage) {\n let value = Math.random().toString();\n window.localStorage.setItem('__test__localStorage__', value);\n let result = window.localStorage.getItem('__test__localStorage__');\n window.localStorage.removeItem('__test__localStorage__');\n if (value === result) {\n return true;\n }\n }\n } catch (err) {\n // pass\n }\n return false;\n });\n}\n\nexport function getBrowserLocales() : Array<{ country? : string, lang : string }> {\n let nav = window.navigator;\n\n let locales = nav.languages\n ? Array.prototype.slice.apply(nav.languages)\n : [];\n\n if (nav.language) {\n locales.push(nav.language);\n }\n\n if (nav.userLanguage) {\n locales.push(nav.userLanguage);\n }\n\n return locales.map(locale => {\n\n if (locale && locale.match(/^[a-z]{2}[-_][A-Z]{2}$/)) {\n let [ lang, country ] = locale.split(/[-_]/);\n return { country, lang };\n }\n\n if (locale && locale.match(/^[a-z]{2}$/)) {\n return { lang: locale };\n }\n\n return null;\n\n }).filter(Boolean);\n}\n\n\nexport function appendChild(container : HTMLElement, child : HTMLElement | Text) {\n container.appendChild(child);\n}\n\nexport function isElement(element : mixed) : boolean {\n\n if (element instanceof window.Element) {\n return true;\n }\n\n if (element !== null && typeof element === 'object' && element.nodeType === 1 && typeof element.style === 'object' && typeof element.ownerDocument === 'object') {\n return true;\n }\n\n return false;\n}\n\nexport function getElementSafe(id : ElementRefType, doc : Document | HTMLElement = document) : ?HTMLElement {\n\n if (isElement(id)) {\n // $FlowFixMe\n return id;\n }\n\n if (typeof id === 'string') {\n return doc.querySelector(id);\n }\n}\n\nexport function getElement(id : ElementRefType, doc : Document | HTMLElement = document) : HTMLElement {\n\n let element = getElementSafe(id, doc);\n\n if (element) {\n return element;\n }\n\n throw new Error(`Can not find element: ${ stringify(id) }`);\n}\n\nexport function elementReady(id : ElementRefType) : ZalgoPromise {\n return new ZalgoPromise((resolve, reject) => {\n\n let name = stringify(id);\n let el = getElementSafe(id);\n\n if (el) {\n return resolve(el);\n }\n\n if (isDocumentReady()) {\n return reject(new Error(`Document is ready and element ${ name } does not exist`));\n }\n\n let interval = setInterval(() => {\n\n el = getElementSafe(id);\n\n if (el) {\n clearInterval(interval);\n return resolve(el);\n }\n\n if (isDocumentReady()) {\n clearInterval(interval);\n return reject(new Error(`Document is ready and element ${ name } does not exist`));\n }\n }, 10);\n });\n}\n\nexport function PopupOpenError(message : string) {\n this.message = message;\n}\n\nPopupOpenError.prototype = Object.create(Error.prototype);\n\ntype PopupOptions = {|\n name? : string,\n width? : number,\n height? : number,\n top? : number,\n left? : number,\n status? : 0 | 1,\n resizable? : 0 | 1,\n toolbar? : 0 | 1,\n menubar? : 0 | 1,\n scrollbars? : 0 | 1\n|};\n\nexport function popup(url : string, options? : PopupOptions) : CrossDomainWindowType {\n\n // $FlowFixMe\n options = options || {};\n\n let { width, height } = options;\n\n let top = 0;\n let left = 0;\n\n if (width) {\n if (window.outerWidth) {\n left = Math.round((window.outerWidth - width) / 2) + window.screenX;\n } else if (window.screen.width) {\n left = Math.round((window.screen.width - width) / 2);\n }\n }\n\n if (height) {\n if (window.outerHeight) {\n top = Math.round((window.outerHeight - height) / 2) + window.screenY;\n } else if (window.screen.height) {\n top = Math.round((window.screen.height - height) / 2);\n }\n }\n\n if (width && height) {\n options = {\n top,\n left,\n width,\n height,\n status: 1,\n toolbar: 0,\n menubar: 0,\n resizable: 1,\n scrollbars: 1,\n ...options\n };\n }\n\n let name = options.name || '';\n delete options.name;\n\n // eslint-disable-next-line array-callback-return\n let params = Object.keys(options).map(key => {\n // $FlowFixMe\n if (options[key] !== null && options[key] !== undefined) {\n return `${ key }=${ stringify(options[key]) }`;\n }\n }).filter(Boolean).join(',');\n\n let win;\n\n try {\n win = window.open(url, name, params, true);\n } catch (err) {\n throw new PopupOpenError(`Can not open popup window - ${ err.stack || err.message }`);\n }\n\n if (isWindowClosed(win)) {\n let err = new PopupOpenError(`Can not open popup window - blocked`);\n throw err;\n }\n\n window.addEventListener('unload', () => win.close());\n\n return win;\n}\n\n\nexport function writeToWindow(win : SameDomainWindowType, html : string) {\n try {\n win.document.open();\n win.document.write(html);\n win.document.close();\n } catch (err) {\n try {\n win.location = `javascript: document.open(); document.write(${ JSON.stringify(html) }); document.close();`;\n } catch (err2) {\n // pass\n }\n }\n}\n\nexport function writeElementToWindow(win : SameDomainWindowType, el : HTMLElement) {\n\n let tag = el.tagName.toLowerCase();\n\n if (tag !== 'html') {\n throw new Error(`Expected element to be html, got ${ tag }`);\n }\n\n let documentElement = win.document.documentElement;\n\n for (const child of arrayFrom(documentElement.children)) {\n documentElement.removeChild(child);\n }\n\n for (const child of arrayFrom(el.children)) {\n documentElement.appendChild(child);\n }\n}\n\nexport function setStyle(el : HTMLElement, styleText : string, doc : Document = window.document) {\n // $FlowFixMe\n if (el.styleSheet) {\n // $FlowFixMe\n el.styleSheet.cssText = styleText;\n } else {\n el.appendChild(doc.createTextNode(styleText));\n }\n}\n\nexport type ElementOptionsType = {\n style? : { [ string ] : string },\n id? : string,\n class? : ?Array,\n attributes? : { [ string ] : string },\n styleSheet? : ?string,\n html? : ?string\n};\n\nlet awaitFrameLoadPromises : WeakMap>;\n\nexport function awaitFrameLoad(frame : HTMLIFrameElement) : ZalgoPromise {\n awaitFrameLoadPromises = awaitFrameLoadPromises || new WeakMap();\n\n if (awaitFrameLoadPromises.has(frame)) {\n let promise = awaitFrameLoadPromises.get(frame);\n if (promise) {\n return promise;\n }\n }\n\n let promise = new ZalgoPromise((resolve, reject) => {\n frame.addEventListener('load', () => {\n linkFrameWindow(frame);\n resolve(frame);\n });\n\n frame.addEventListener('error', (err : Event) => {\n if (frame.contentWindow) {\n resolve(frame);\n } else {\n reject(err);\n }\n });\n });\n\n awaitFrameLoadPromises.set(frame, promise);\n\n return promise;\n}\n\nexport function awaitFrameWindow(frame : HTMLIFrameElement) : ZalgoPromise {\n return awaitFrameLoad(frame).then(loadedFrame => {\n\n if (!loadedFrame.contentWindow) {\n throw new Error(`Could not find window in iframe`);\n }\n\n return loadedFrame.contentWindow;\n });\n}\n\nexport function createElement(tag : string = 'div', options : ElementOptionsType = {}, container : ?HTMLElement) : HTMLElement {\n\n tag = tag.toLowerCase();\n let element = document.createElement(tag);\n\n if (options.style) {\n extend(element.style, options.style);\n }\n\n if (options.class) {\n element.className = options.class.join(' ');\n }\n\n if (options.id) {\n element.setAttribute('id', options.id);\n }\n\n if (options.attributes) {\n for (let key of Object.keys(options.attributes)) {\n element.setAttribute(key, options.attributes[key]);\n }\n }\n\n if (options.styleSheet) {\n setStyle(element, options.styleSheet);\n }\n\n if (container) {\n appendChild(container, element);\n }\n\n if (options.html) {\n if (tag === 'iframe') {\n // $FlowFixMe\n if (!container || !element.contentWindow) {\n throw new Error(`Iframe html can not be written unless container provided and iframe in DOM`);\n }\n\n // $FlowFixMe\n writeToWindow(element.contentWindow, options.html);\n\n } else {\n element.innerHTML = options.html;\n }\n }\n\n return element;\n}\n\n\nexport type IframeElementOptionsType = {\n style? : { [ string ] : string },\n class? : ?Array,\n attributes? : { [ string ] : string },\n styleSheet? : ?string,\n html? : ?string,\n url? : ?string\n};\n\nexport function iframe(options : IframeElementOptionsType = {}, container : ?HTMLElement) : HTMLIFrameElement {\n\n let attributes = options.attributes || {};\n let style = options.style || {};\n\n let frame = createElement('iframe', {\n attributes: {\n allowTransparency: 'true',\n ...attributes\n },\n style: {\n backgroundColor: 'transparent',\n border: 'none',\n ...style\n },\n html: options.html,\n class: options.class\n });\n\n const isIE = window.navigator.userAgent.match(/MSIE|Edge/i);\n \n if (!frame.hasAttribute('id')) {\n frame.setAttribute('id', uniqueID());\n }\n\n // $FlowFixMe\n awaitFrameLoad(frame);\n\n if (container) {\n let el = getElement(container);\n el.appendChild(frame);\n }\n\n if (options.url || isIE) {\n frame.setAttribute('src', options.url || 'about:blank');\n }\n\n // $FlowFixMe\n return frame;\n}\n\nexport function addEventListener(obj : HTMLElement, event : string, handler : (event : Event) => void) : CancelableType {\n obj.addEventListener(event, handler);\n return {\n cancel() {\n obj.removeEventListener(event, handler);\n }\n };\n}\n\nexport function bindEvents(element : HTMLElement, eventNames : Array, handler : (event : Event) => void) : CancelableType {\n\n handler = once(handler);\n\n for (let eventName of eventNames) {\n element.addEventListener(eventName, handler);\n }\n\n return {\n cancel: once(() => {\n for (let eventName of eventNames) {\n element.removeEventListener(eventName, handler);\n }\n })\n };\n}\n\nconst VENDOR_PREFIXES = [ 'webkit', 'moz', 'ms', 'o' ];\n\nexport function setVendorCSS(element : HTMLElement, name : string, value : string) {\n\n // $FlowFixMe\n element.style[name] = value;\n\n let capitalizedName = capitalizeFirstLetter(name);\n\n for (let prefix of VENDOR_PREFIXES) {\n // $FlowFixMe\n element.style[`${ prefix }${ capitalizedName }`] = value;\n }\n}\n\nconst ANIMATION_START_EVENTS = [ 'animationstart', 'webkitAnimationStart', 'oAnimationStart', 'MSAnimationStart' ];\nconst ANIMATION_END_EVENTS = [ 'animationend', 'webkitAnimationEnd', 'oAnimationEnd', 'MSAnimationEnd' ];\n\nexport function animate(element : ElementRefType, name : string, clean : (Function) => void, timeout : number = 1000) : ZalgoPromise {\n return new ZalgoPromise((resolve, reject) => {\n\n let el = getElement(element);\n\n if (!el) {\n return resolve();\n }\n\n let hasStarted = false;\n\n let startTimeout;\n let endTimeout;\n let startEvent;\n let endEvent;\n\n function cleanUp() {\n clearTimeout(startTimeout);\n clearTimeout(endTimeout);\n startEvent.cancel();\n endEvent.cancel();\n }\n\n startEvent = bindEvents(el, ANIMATION_START_EVENTS, event => {\n\n // $FlowFixMe\n if (event.target !== el || event.animationName !== name) {\n return;\n }\n\n clearTimeout(startTimeout);\n\n event.stopPropagation();\n\n startEvent.cancel();\n hasStarted = true;\n\n endTimeout = setTimeout(() => {\n cleanUp();\n resolve();\n }, timeout);\n });\n\n endEvent = bindEvents(el, ANIMATION_END_EVENTS, event => {\n\n // $FlowFixMe\n if (event.target !== el || event.animationName !== name) {\n return;\n }\n\n cleanUp();\n\n // $FlowFixMe\n if (typeof event.animationName === 'string' && event.animationName !== name) {\n return reject(`Expected animation name to be ${ name }, found ${ event.animationName }`);\n }\n\n return resolve();\n });\n\n setVendorCSS(el, 'animationName', name);\n\n startTimeout = setTimeout(() => {\n if (!hasStarted) {\n cleanUp();\n return resolve();\n }\n }, 200);\n\n if (clean) {\n clean(cleanUp);\n }\n });\n}\n\nconst STYLE = {\n\n DISPLAY: {\n NONE: 'none',\n BLOCK: 'block'\n },\n\n VISIBILITY: {\n VISIBLE: 'visible',\n HIDDEN: 'hidden'\n },\n\n IMPORTANT: 'important'\n};\n\nexport function makeElementVisible(element : HTMLElement) {\n element.style.setProperty('visibility', '');\n}\n\nexport function makeElementInvisible(element : HTMLElement) {\n element.style.setProperty('visibility', STYLE.VISIBILITY.HIDDEN, STYLE.IMPORTANT);\n}\n\n\nexport function showElement(element : HTMLElement) {\n element.style.setProperty('display', '');\n}\n\nexport function hideElement(element : HTMLElement) {\n element.style.setProperty('display', STYLE.DISPLAY.NONE, STYLE.IMPORTANT);\n}\n\nexport function destroyElement(element : HTMLElement) {\n if (element && element.parentNode) {\n element.parentNode.removeChild(element);\n }\n}\n\nexport function showAndAnimate(element : HTMLElement, name : string, clean : (Function) => void) : ZalgoPromise {\n let animation = animate(element, name, clean);\n showElement(element);\n return animation;\n}\n\nexport function animateAndHide(element : HTMLElement, name : string, clean : (Function) => void) : ZalgoPromise {\n return animate(element, name, clean).then(() => {\n hideElement(element);\n });\n}\n\nexport function addClass(element : HTMLElement, name : string) {\n element.classList.add(name);\n}\n\nexport function removeClass(element : HTMLElement, name : string) {\n element.classList.remove(name);\n}\n\nexport function isElementClosed(el : HTMLElement) : boolean {\n if (!el || !el.parentNode) {\n return true;\n }\n return false;\n}\n\nexport function watchElementForClose(element : HTMLElement, handler : () => mixed) : CancelableType {\n handler = once(handler);\n\n let interval;\n\n if (isElementClosed(element)) {\n handler();\n } else {\n interval = safeInterval(() => {\n if (isElementClosed(element)) {\n interval.cancel();\n handler();\n }\n }, 50);\n }\n\n return {\n cancel() {\n if (interval) {\n interval.cancel();\n }\n }\n };\n}\n\nexport function fixScripts(el : HTMLElement, doc : Document = window.document) {\n for (let script of querySelectorAll('script', el)) {\n let parentNode = script.parentNode;\n\n if (!parentNode) {\n continue;\n }\n\n let newScript = doc.createElement('script');\n newScript.text = script.textContent;\n parentNode.replaceChild(newScript, script);\n }\n}\n\ntype OnResizeOptions = {|\n width? : boolean,\n height? : boolean,\n interval? : number,\n win? : SameDomainWindowType\n|};\n\nexport function onResize(el : HTMLElement, handler : ({ width : number, height : number }) => void, { width = true, height = true, interval = 100, win = window } : OnResizeOptions = {}) : {} {\n let currentWidth = el.offsetWidth;\n let currentHeight = el.offsetHeight;\n\n handler({ width: currentWidth, height: currentHeight });\n\n let check = () => {\n let newWidth = el.offsetWidth;\n let newHeight = el.offsetHeight;\n\n if ((width && newWidth !== currentWidth) || (height && newHeight !== currentHeight)) {\n handler({ width: newWidth, height: newHeight });\n }\n\n currentWidth = newWidth;\n currentHeight = newHeight;\n };\n\n let observer;\n let timeout;\n\n if (typeof win.ResizeObserver !== 'undefined') {\n observer = new win.ResizeObserver(check);\n observer.observe(el);\n\n } else if (typeof win.MutationObserver !== 'undefined') {\n observer = new win.MutationObserver(check);\n observer.observe(el, {\n attributes: true,\n childList: true,\n subtree: true,\n characterData: false\n });\n win.addEventListener('resize', check);\n } else {\n let loop = () => {\n check();\n timeout = setTimeout(loop, interval);\n };\n loop();\n }\n\n return {\n cancel: () => {\n observer.disconnect();\n window.removeEventListener('resize', check);\n clearTimeout(timeout);\n }\n };\n}\n\nexport function getResourceLoadTime(url : string) : ?number {\n\n if (!enablePerformance()) {\n return;\n }\n\n if (!window.performance || typeof window.performance.getEntries !== 'function') {\n return;\n }\n\n const entries = window.performance.getEntries();\n\n for (let i = 0; i < entries.length; i++) {\n const entry = entries[i];\n\n if (entry && entry.name && entry.name.indexOf(url) === 0 && typeof entry.duration === 'number') {\n return Math.floor(entry.duration);\n }\n }\n}\n","/* @flow */\n\nimport { uniqueID, getGlobal, inlineMemoize } from './util';\nimport { isLocalStorageEnabled } from './dom';\n\ntype Getter = (handler : (Object) => T) => T;\n\nexport type Storage = {\n getState : Getter<*>,\n getID : () => string,\n getSessionState : Getter<*>,\n getSessionID : () => string\n};\n\nconst DEFAULT_SESSION_STORAGE = 20 * 60 * 1000;\n\nexport function getStorage({ name, lifetime = DEFAULT_SESSION_STORAGE } : { name : string, lifetime? : number }) : Storage {\n return inlineMemoize(getStorage, () => {\n const STORAGE_KEY = `__${ name }_storage__`;\n\n let accessedStorage;\n\n function getState(handler : (storage : Object) => T) : T {\n\n let localStorageEnabled = isLocalStorageEnabled();\n let storage;\n\n if (accessedStorage) {\n storage = accessedStorage;\n }\n\n if (!storage && localStorageEnabled) {\n let rawStorage = window.localStorage.getItem(STORAGE_KEY);\n\n if (rawStorage) {\n storage = JSON.parse(rawStorage);\n }\n }\n\n if (!storage) {\n storage = getGlobal()[STORAGE_KEY];\n }\n\n if (!storage) {\n storage = {\n id: uniqueID()\n };\n }\n\n if (!storage.id) {\n storage.id = uniqueID();\n }\n\n accessedStorage = storage;\n\n let result = handler(storage);\n\n if (localStorageEnabled) {\n window.localStorage.setItem(STORAGE_KEY, JSON.stringify(storage));\n } else {\n getGlobal()[STORAGE_KEY] = storage;\n }\n\n accessedStorage = null;\n\n return result;\n }\n\n function getID() : string {\n return getState(storage => storage.id);\n }\n\n function getSession(handler : (state : Object) => T) : T {\n return getState(storage => {\n\n let session = storage.__session__;\n let now = Date.now();\n\n if (session && ((now - session.created) > lifetime)) {\n session = null;\n }\n\n if (!session) {\n session = {\n guid: uniqueID(),\n created: now\n };\n }\n\n storage.__session__ = session;\n\n return handler(session);\n });\n }\n\n function getSessionState(handler : (state : Object) => T) : T {\n return getSession(session => {\n session.state = session.state || {};\n return handler(session.state);\n });\n }\n\n function getSessionID() : string {\n return getSession(session => session.guid);\n }\n\n return {\n getState,\n getID,\n getSessionState,\n getSessionID\n };\n }, [ { name, lifetime } ]);\n}\n","/* @flow */\n\nimport { noop } from './util';\nimport { getStorage } from './storage';\n\nfunction getBelterExperimentStorage() : Object {\n return getStorage({ name: 'belter_experiment' });\n}\n\nfunction isEventUnique(name : string) : boolean {\n return getBelterExperimentStorage().getSessionState(state => {\n state.loggedBeacons = state.loggedBeacons || [];\n\n if (state.loggedBeacons.indexOf(name) === -1) {\n state.loggedBeacons.push(name);\n return true;\n }\n\n return false;\n });\n}\n\nexport type Experiment = {\n isEnabled : () => boolean,\n isDisabled : () => boolean,\n getTreatment : () => string,\n log : (string, payload? : { [string] : ?string }) => Experiment,\n logStart : (payload? : { [string] : ?string }) => Experiment,\n logComplete : (payload? : { [string] : ?string }) => Experiment\n};\n\nfunction getThrottlePercentile(name : string) : number {\n return getBelterExperimentStorage().getState(state => {\n state.throttlePercentiles = state.throttlePercentiles || {};\n state.throttlePercentiles[name] = state.throttlePercentiles[name] || Math.floor(Math.random() * 100);\n return state.throttlePercentiles[name];\n });\n}\n\nconst THROTTLE_GROUP = {\n TEST: 'test',\n CONTROL: 'control',\n THROTTLE: 'throttle'\n};\n\ntype ExperimentOptions = {\n name : string,\n sample? : number,\n logTreatment? : ({ name : string, treatment : string, payload : { [string] : ?string } }) => void,\n logCheckpoint? : ({ name : string, treatment : string, checkpoint : string, payload : { [string] : ?string } }) => void\n};\n\nexport function experiment({ name, sample = 50, logTreatment = noop, logCheckpoint = noop } : ExperimentOptions) : Experiment {\n\n let throttle = getThrottlePercentile(name);\n\n let group;\n\n if (throttle < sample) {\n group = THROTTLE_GROUP.TEST;\n } else if ((sample >= 50) || ((sample <= throttle) && (throttle < (sample * 2)))) {\n group = THROTTLE_GROUP.CONTROL;\n } else {\n group = THROTTLE_GROUP.THROTTLE;\n }\n\n let treatment = `${ name }_${ group }`;\n\n let started = false;\n let forced = false;\n\n try {\n if (window.localStorage && window.localStorage.getItem(name)) {\n forced = true;\n }\n } catch (err) {\n // pass\n }\n\n return {\n\n isEnabled() : boolean {\n return (group === THROTTLE_GROUP.TEST) || forced;\n },\n\n isDisabled() : boolean {\n return (group !== THROTTLE_GROUP.TEST) && !forced;\n },\n\n getTreatment() : string {\n return treatment;\n },\n\n log(checkpoint : string, payload? : { [string] : ?string } = {}) : Experiment {\n if (!started) {\n return this;\n }\n\n if (isEventUnique(`${ name }_${ treatment }_${ JSON.stringify(payload) }`)) {\n logTreatment({ name, treatment, payload });\n }\n\n if (isEventUnique(`${ name }_${ treatment }_${ checkpoint }_${ JSON.stringify(payload) }`)) {\n logCheckpoint({ name, treatment, checkpoint, payload });\n }\n\n return this;\n },\n\n logStart(payload? : { [string] : ?string } = {}) : Experiment {\n started = true;\n return this.log(`start`, payload);\n },\n\n logComplete(payload? : { [string] : ?string } = {}) : Experiment {\n return this.log(`complete`, payload);\n }\n };\n}\n","/* @flow */\n\nimport { getGlobal } from './util';\n\nexport function getGlobalNameSpace({ name, version = 'latest' } : { name : string, version? : string }) : { get : (string, defValue? : T) => T } {\n\n let global = getGlobal();\n let globalKey = `__${ name }__${ version }_global__`;\n\n let namespace = global[globalKey] = global[globalKey] || {};\n\n return {\n get: (key : string, defValue? : T) : T => {\n // $FlowFixMe\n defValue = defValue || {};\n let item = namespace[key] = namespace[key] || defValue;\n return item;\n }\n };\n}\n","/* @flow */\n\nimport { ZalgoPromise } from 'zalgo-promise/src';\nimport { type SameDomainWindowType } from 'cross-domain-utils/src';\n\ntype RequestOptionsType = {\n url : string,\n method? : string,\n headers? : { [key : string] : string },\n json? : $ReadOnlyArray | Object,\n data? : { [key : string] : string },\n body? : string,\n win? : SameDomainWindowType,\n timeout? : number\n};\n\ntype ResponseType = {\n status : number,\n headers : { [string] : string },\n body : Object\n};\n\nconst HEADERS = {\n CONTENT_TYPE: 'content-type',\n ACCEPT: 'accept'\n};\n\nlet headerBuilders = [];\n\nfunction parseHeaders(rawHeaders : string = '') : { [string] : string } {\n let result = {};\n for (let line of rawHeaders.trim().split('\\n')) {\n let [ key, ...values ] = line.split(':');\n result[key.toLowerCase()] = values.join(':').trim();\n }\n return result;\n}\n\nexport function request({ url, method = 'get', headers = {}, json, data, body, win = window, timeout = 0 } : RequestOptionsType) : ZalgoPromise {\n return new ZalgoPromise((resolve, reject) => {\n\n if ((json && data) || (json && body) || (data && json)) {\n throw new Error(`Only options.json or options.data or options.body should be passed`);\n }\n\n let normalizedHeaders = {};\n\n for (let key of Object.keys(headers)) {\n normalizedHeaders[key.toLowerCase()] = headers[key];\n }\n\n if (json) {\n normalizedHeaders[HEADERS.CONTENT_TYPE] = normalizedHeaders[HEADERS.CONTENT_TYPE] || 'application/json';\n } else if (data || body) {\n normalizedHeaders[HEADERS.CONTENT_TYPE] = normalizedHeaders[HEADERS.CONTENT_TYPE] || 'application/x-www-form-urlencoded; charset=utf-8';\n }\n\n normalizedHeaders[HEADERS.ACCEPT] = normalizedHeaders[HEADERS.ACCEPT] || 'application/json';\n\n for (let headerBuilder of headerBuilders) {\n let builtHeaders = headerBuilder();\n\n for (let key of Object.keys(builtHeaders)) {\n normalizedHeaders[key.toLowerCase()] = builtHeaders[key];\n }\n }\n\n let xhr = new win.XMLHttpRequest();\n\n xhr.addEventListener('load', function xhrLoad() : void {\n\n let responseHeaders = parseHeaders(this.getAllResponseHeaders());\n\n if (!this.status) {\n return reject(new Error(`Request to ${ method.toLowerCase() } ${ url } failed: no response status code.`));\n }\n \n let contentType = responseHeaders['content-type'];\n let isJSON = contentType && (contentType.indexOf('application/json') === 0 || contentType.indexOf('text/json') === 0);\n let responseBody = this.responseText;\n\n try {\n responseBody = JSON.parse(responseBody);\n } catch (err) {\n if (isJSON) {\n return reject(new Error(`Invalid json: ${ this.responseText }.`));\n }\n }\n\n let res = {\n status: this.status,\n headers: responseHeaders,\n body: responseBody\n };\n\n return resolve(res);\n\n }, false);\n\n xhr.addEventListener('error', (evt) => {\n reject(new Error(`Request to ${ method.toLowerCase() } ${ url } failed: ${ evt.toString() }.`));\n }, false);\n\n xhr.open(method, url, true);\n\n for (let key in normalizedHeaders) {\n if (normalizedHeaders.hasOwnProperty(key)) {\n xhr.setRequestHeader(key, normalizedHeaders[key]);\n }\n }\n\n if (json) {\n body = JSON.stringify(json);\n } else if (data) {\n body = Object.keys(data).map(key => {\n return `${ encodeURIComponent(key) }=${ data ? encodeURIComponent(data[key]) : '' }`;\n }).join('&');\n }\n\n xhr.timeout = timeout;\n xhr.ontimeout = function xhrTimeout() {\n reject(new Error(`Request to ${ method.toLowerCase() } ${ url } has timed out`));\n };\n\n xhr.send(body);\n });\n}\n\nexport function addHeaderBuilder(method : () => { [string] : string }) {\n headerBuilders.push(method);\n}\n","/* @flow */\n\n// export something to force webpack to see this as an ES module\nexport const TYPES = true;\n\ndeclare var __TEST__ : boolean;\n\nexport type JSONPrimitive = string | boolean | number;\nexport type JSONObject = { [string] : JSONPrimitive | JSONObject } | Array;\nexport type JSONType = JSONObject | JSONPrimitive;\n\nexport type CancelableType = {\n cancel : () => void\n};\n","/* @flow */\n\nimport { memoize, promisify } from './util';\n\nexport function memoized(target : Object, name : string, descriptor : Object) {\n descriptor.value = memoize(descriptor.value, { name, thisNamespace: true });\n}\n\nexport function promise(target : Object, name : string, descriptor : Object) {\n descriptor.value = promisify(descriptor.value, { name });\n}\n","/* @flow */\n\nexport function isPerc(str : string) : boolean {\n return typeof str === 'string' && (/^[0-9]+%$/).test(str);\n}\n\nexport function isPx(str : string) : boolean {\n return typeof str === 'string' && (/^[0-9]+px$/).test(str);\n}\n\nexport function toNum(val : string | number) : number {\n\n if (typeof val === 'number') {\n return val;\n }\n\n let match = val.match(/^([0-9]+)(px|%)$/);\n\n if (!match) {\n throw new Error(`Could not match css value from ${ val }`);\n }\n\n return parseInt(match[1], 10);\n}\n\nexport function toPx(val : number | string) : string {\n return `${ toNum(val) }px`;\n}\n\nexport function toCSS(val : number | string) : string {\n\n if (typeof val === 'number') {\n return toPx(val);\n }\n\n return isPerc(val) ? val : toPx(val);\n}\n\nexport function percOf(num : number, perc : string) : number {\n return parseInt(num * toNum(perc) / 100, 10);\n}\n\nexport function normalizeDimension(dim : string | number, max : number) : number {\n if (typeof dim === 'number') {\n return dim;\n } else if (isPerc(dim)) {\n return percOf(max, dim);\n } else if (isPx(dim)) {\n return toNum(dim);\n } else {\n throw new Error(`Can not normalize dimension: ${ dim }`);\n }\n}\n","/* @flow */\n\nimport { ZalgoPromise } from 'zalgo-promise/src';\n\nimport { noop, tryCatch, removeFromArray } from './util';\n\ntype Prom = Promise | ZalgoPromise; // eslint-disable-line no-restricted-globals, promise/no-native\n\ntype Handler = >(name : string, fn? : (...args : A) => T) => (...args : A) => T; // eslint-disable-line no-undef\ntype Wrapper = ({ expect : Handler, avoid : Handler, expectError : Handler, error : Handler }) => (Prom | void);\n\nexport function wrapPromise(method : Wrapper, { timeout = 5000 } : { timeout? : number } = {}) : ZalgoPromise {\n let expected : Array = [];\n let promises : Array> = [];\n\n let timer = setTimeout(() => {\n if (expected.length) {\n promises.push(ZalgoPromise.asyncReject(new Error(`Expected ${ expected[0] } to be called`)));\n }\n }, timeout);\n\n let expect : Handler = (name, fn = noop) => {\n expected.push(name);\n \n // $FlowFixMe\n return function expectWrapper(...args) : * {\n removeFromArray(expected, name);\n\n // $FlowFixMe\n let { result, error } = tryCatch(() => fn.call(this, ...args));\n\n if (error) {\n promises.push(ZalgoPromise.asyncReject(error));\n throw error;\n }\n\n promises.push(ZalgoPromise.resolve(result));\n return result;\n };\n };\n\n let avoid : Handler = (name : string, fn = noop) => {\n\n // $FlowFixMe\n return function avoidWrapper(...args) : * {\n promises.push(ZalgoPromise.asyncReject(new Error(`Expected ${ name } to not be called`)));\n // $FlowFixMe\n return fn.call(this, ...args);\n };\n };\n\n let expectError : Handler = (name, fn = noop) => {\n expected.push(name);\n\n // $FlowFixMe\n return function expectErrorWrapper(...args) : * {\n removeFromArray(expected, name);\n\n // $FlowFixMe\n let { result, error } = tryCatch(() => fn.call(this, ...args));\n\n if (error) {\n throw error;\n }\n\n promises.push(ZalgoPromise.resolve(result).then(() => {\n throw new Error(`Expected ${ name } to throw an error`);\n }, noop));\n return result;\n };\n };\n\n promises.push(ZalgoPromise.try(() => method({ expect, avoid, expectError, error: avoid })));\n\n let drain = () => {\n return ZalgoPromise.try(() => {\n if (promises.length) {\n return promises.pop();\n }\n }).then(() => {\n if (promises.length) {\n return drain();\n }\n if (expected.length) {\n return ZalgoPromise.delay(10).then(drain);\n }\n });\n };\n\n return drain().then(() => {\n clearTimeout(timer);\n });\n}\n","/* @flow */\n\nexport * from './device';\nexport * from './dom';\nexport * from './experiment';\nexport * from './global';\nexport * from './storage';\nexport * from './util';\nexport * from './http';\nexport * from './types';\nexport * from './decorators';\nexport * from './css';\nexport * from './test';\n","/* @flow */\n\nexport const LOG_LEVEL = {\n DEBUG: ('debug' : 'debug'),\n INFO: ('info' : 'info'),\n WARN: ('warn' : 'warn'),\n ERROR: ('error' : 'error')\n};\n\nexport const PROTOCOL = {\n FILE: 'file:'\n};\n","/* @flow */\n\nimport { LOG_LEVEL } from './constants';\n\nexport const AUTO_FLUSH_LEVEL = [ LOG_LEVEL.WARN, LOG_LEVEL.ERROR ];\n\nexport const LOG_LEVEL_PRIORITY = [ LOG_LEVEL.ERROR, LOG_LEVEL.WARN, LOG_LEVEL.INFO, LOG_LEVEL.DEBUG ];\n\nexport const FLUSH_INTERVAL = 60 * 1000;\n\nexport const DEFAULT_LOG_LEVEL = __DEBUG__ ? LOG_LEVEL.DEBUG : LOG_LEVEL.WARN;\n","/* @flow */\n\ntype SimpleRequest = {|\n method? : string,\n url : string,\n headers : { [string] : string },\n json : Object\n|};\n\nexport function simpleRequest({ method = 'GET', url, headers, json } : SimpleRequest) {\n const req = new XMLHttpRequest();\n req.open(method, url);\n for (const header of Object.keys(headers)) {\n req.setRequestHeader(header, headers[header]);\n }\n req.send(JSON.stringify(json));\n}\n","/* @flow */\n\nimport { ZalgoPromise } from 'zalgo-promise/src';\nimport { request, isBrowser, promiseDebounce, noop, safeInterval, objFilter } from 'belter/src';\n\nimport { DEFAULT_LOG_LEVEL, LOG_LEVEL_PRIORITY, AUTO_FLUSH_LEVEL, FLUSH_INTERVAL } from './config';\nimport { LOG_LEVEL, PROTOCOL } from './constants';\nimport { simpleRequest } from './util';\n\ntype Payload = { [string] : string };\n\ntype LoggerOptions = {|\n url : string,\n prefix? : string,\n logLevel? : $Values,\n flushInterval? : number\n|};\n\ntype ClientPayload = { [string] : ?string };\ntype Log = (name : string, payload? : ClientPayload) => LoggerType; // eslint-disable-line no-use-before-define\ntype Track = (payload : ClientPayload) => LoggerType; // eslint-disable-line no-use-before-define\n\ntype Builder = (Payload) => ClientPayload;\ntype AddBuilder = (Builder) => LoggerType; // eslint-disable-line no-use-before-define\n\nexport type LoggerType = {|\n debug : Log,\n info : Log,\n warn : Log,\n error : Log,\n\n track : Track,\n\n flush : () => (void | ZalgoPromise),\n immediateFlush : () => (void | ZalgoPromise),\n\n addPayloadBuilder : AddBuilder,\n addMetaBuilder : AddBuilder,\n addTrackingBuilder : AddBuilder,\n addHeaderBuilder : AddBuilder\n|};\n\nfunction extendIfDefined(target : { [string] : string }, source : { [string] : ?string }) {\n for (const key in source) {\n if (source.hasOwnProperty(key) && source[key] && !target[key]) {\n target[key] = source[key];\n }\n }\n}\n\nexport function Logger({ url, prefix, logLevel = DEFAULT_LOG_LEVEL, flushInterval = FLUSH_INTERVAL } : LoggerOptions) : LoggerType {\n\n let events : Array<{ level : $Values, event : string, payload : Payload }> = [];\n let tracking : Array = [];\n\n const payloadBuilders : Array = [];\n const metaBuilders : Array = [];\n const trackingBuilders : Array = [];\n const headerBuilders : Array = [];\n\n function print(level : $Values, event : string, payload : Payload) {\n if (__BEAVER_LOGGER__.__LITE_MODE__ || !isBrowser() || !window.console || !window.console.log) {\n return;\n }\n\n if (LOG_LEVEL_PRIORITY.indexOf(level) > LOG_LEVEL_PRIORITY.indexOf(logLevel)) {\n return;\n }\n\n const args = [ event ];\n\n args.push(payload);\n\n if (payload.error || payload.warning) {\n args.push('\\n\\n', payload.error || payload.warning);\n }\n\n try {\n if (window.console[level] && window.console[level].apply) {\n window.console[level].apply(window.console, args);\n } else if (window.console.log && window.console.log.apply) {\n window.console.log.apply(window.console, args);\n }\n } catch (err) {\n // pass\n }\n }\n\n function buildPayloads() : {| meta : Payload, headers : Payload |} {\n const meta = {};\n for (const builder of metaBuilders) {\n extendIfDefined(meta, builder(meta));\n }\n\n const headers = {};\n for (const builder of headerBuilders) {\n extendIfDefined(headers, builder(headers));\n }\n\n return { meta, headers };\n }\n\n function immediateFlush() : void | ZalgoPromise {\n if (!isBrowser() || window.location.protocol === PROTOCOL.FILE || (!events.length && !tracking.length)) {\n if (__BEAVER_LOGGER__.__LITE_MODE__) {\n return;\n } else {\n return ZalgoPromise.resolve();\n }\n }\n\n const { meta, headers } = buildPayloads();\n const json = { events, meta, tracking };\n const method = 'POST';\n\n events = [];\n tracking = [];\n\n if (__BEAVER_LOGGER__.__LITE_MODE__) {\n simpleRequest({ method, url, headers, json });\n } else {\n return request({ method, url, headers, json }).then(noop);\n }\n }\n\n const flush = __BEAVER_LOGGER__.__LITE_MODE__\n ? immediateFlush\n : promiseDebounce(immediateFlush);\n\n function enqueue(level : $Values, event : string, payload : Payload) {\n events.push({\n level,\n event,\n payload\n });\n\n if (AUTO_FLUSH_LEVEL.indexOf(level) !== -1) {\n flush();\n }\n }\n\n function log(level : $Values, event : string, payload = {}) : LoggerType {\n if (!isBrowser()) {\n return logger; // eslint-disable-line no-use-before-define\n }\n\n if (prefix) {\n event = `${ prefix }_${ event }`;\n }\n\n const logPayload : Payload = {\n ...objFilter(payload),\n timestamp: Date.now().toString()\n };\n\n for (const builder of payloadBuilders) {\n extendIfDefined(logPayload, builder(logPayload));\n }\n\n enqueue(level, event, logPayload);\n print(level, event, logPayload);\n\n return logger; // eslint-disable-line no-use-before-define\n }\n\n function addBuilder(builders, builder) : LoggerType {\n builders.push(builder);\n return logger; // eslint-disable-line no-use-before-define\n }\n\n function addPayloadBuilder(builder) : LoggerType {\n return addBuilder(payloadBuilders, builder);\n }\n\n function addMetaBuilder(builder) : LoggerType {\n return addBuilder(metaBuilders, builder);\n }\n\n function addTrackingBuilder(builder) : LoggerType {\n return addBuilder(trackingBuilders, builder);\n }\n\n function addHeaderBuilder(builder) : LoggerType {\n return addBuilder(headerBuilders, builder);\n }\n\n function debug(event, payload) : LoggerType {\n return log(LOG_LEVEL.DEBUG, event, payload);\n }\n\n function info(event, payload) : LoggerType {\n return log(LOG_LEVEL.INFO, event, payload);\n }\n\n function warn(event, payload) : LoggerType {\n return log(LOG_LEVEL.WARN, event, payload);\n }\n\n function error(event, payload) : LoggerType {\n return log(LOG_LEVEL.ERROR, event, payload);\n }\n\n function track(payload = {}) : LoggerType {\n if (!isBrowser()) {\n return logger; // eslint-disable-line no-use-before-define\n }\n\n const trackingPayload : Payload = objFilter(payload);\n\n for (const builder of trackingBuilders) {\n extendIfDefined(trackingPayload, builder(trackingPayload));\n }\n\n print(LOG_LEVEL.DEBUG, 'track', trackingPayload);\n tracking.push(trackingPayload);\n\n return logger; // eslint-disable-line no-use-before-define\n }\n\n if (isBrowser()) {\n safeInterval(flush, flushInterval);\n }\n\n const logger = {\n debug,\n info,\n warn,\n error,\n track,\n flush,\n immediateFlush,\n addPayloadBuilder,\n addMetaBuilder,\n addTrackingBuilder,\n addHeaderBuilder\n };\n\n return logger;\n}\n","/* @flow */\n\nexport * from './logger';\nexport * from './constants';\n"],"sourceRoot":""} \ No newline at end of file diff --git a/dist/beaver-logger.lite.min.js b/dist/beaver-logger.lite.min.js deleted file mode 100644 index f357a1e..0000000 --- a/dist/beaver-logger.lite.min.js +++ /dev/null @@ -1,2 +0,0 @@ -!function(e,n){"object"==typeof exports&&"object"==typeof module?module.exports=n():"function"==typeof define&&define.amd?define("beaver",[],n):"object"==typeof exports?exports.beaver=n():e.beaver=n()}("undefined"!=typeof self?self:this,(function(){return function(e){var n={};function r(t){if(n[t])return n[t].exports;var o=n[t]={i:t,l:!1,exports:{}};return e[t].call(o.exports,o,o.exports,r),o.l=!0,o.exports}return r.m=e,r.c=n,r.d=function(e,n,t){r.o(e,n)||Object.defineProperty(e,n,{enumerable:!0,get:t})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,n){if(1&n&&(e=r(e)),8&n)return e;if(4&n&&"object"==typeof e&&e&&e.__esModule)return e;var t=Object.create(null);if(r.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:e}),2&n&&"string"!=typeof e)for(var o in e)r.d(t,o,function(n){return e[n]}.bind(null,o));return t},r.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(n,"a",n),n},r.o=function(e,n){return{}.hasOwnProperty.call(e,n)},r.p="",r(r.s=0)}([function(e,n,r){"use strict";function t(){return(t=Object.assign||function(e){for(var n=1;n(fn : T) : string {\n return fn.name || fn.__name__ || fn.displayName || 'anonymous';\n}\n\nexport function setFunctionName (fn : T, name : string) : T {\n try {\n delete fn.name;\n fn.name = name;\n } catch (err) {\n // pass\n }\n\n fn.__name__ = fn.displayName = name;\n return fn;\n}\n\nexport function base64encode(str : string) : string {\n if (typeof btoa === 'function') {\n return btoa(encodeURIComponent(str).replace(/%([0-9A-F]{2})/g, (m, p1) => {\n return String.fromCharCode(parseInt(p1, 16));\n }));\n }\n\n if (typeof Buffer !== 'undefined') {\n return Buffer.from(str, 'utf8').toString('base64');\n }\n\n throw new Error(`Can not find window.btoa or Buffer`);\n}\n\nexport function base64decode(str : string) : string {\n if (typeof atob === 'function') {\n return decodeURIComponent(Array.prototype.map.call(atob(str), c => {\n // eslint-disable-next-line prefer-template\n return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);\n }).join(''));\n }\n\n if (typeof Buffer !== 'undefined') {\n return Buffer.from(str, 'base64').toString('utf8');\n }\n\n throw new Error(`Can not find window.atob or Buffer`);\n}\n\nexport function uniqueID() : string {\n\n let chars = '0123456789abcdef';\n\n let randomID = 'xxxxxxxxxx'.replace(/./g, () => {\n return chars.charAt(Math.floor(Math.random() * chars.length));\n });\n\n let timeID = base64encode(\n new Date().toISOString().slice(11, 19).replace('T', '.')\n ).replace(/[^a-zA-Z0-9]/g, '').toLowerCase();\n\n return `${ randomID }_${ timeID }`;\n}\n\nexport function getGlobal() : Object {\n if (typeof window !== 'undefined') {\n return window;\n }\n if (typeof global !== 'undefined') {\n return global;\n }\n if (typeof __GLOBAL__ !== 'undefined') {\n return __GLOBAL__;\n }\n throw new Error(`No global found`);\n}\n\nlet objectIDs;\n\nexport function getObjectID(obj : Object) : string {\n\n objectIDs = objectIDs || new WeakMap();\n\n if (obj === null || obj === undefined || (typeof obj !== 'object' && typeof obj !== 'function')) {\n throw new Error(`Invalid object`);\n }\n\n let uid = objectIDs.get(obj);\n\n if (!uid) {\n uid = `${ typeof obj }:${ uniqueID() }`;\n objectIDs.set(obj, uid);\n }\n\n return uid;\n}\n\nfunction serializeArgs(args : Array) : string {\n try {\n return JSON.stringify(Array.prototype.slice.call(args), (subkey, val) => {\n if (typeof val === 'function') {\n return `memoize[${ getObjectID(val) }]`;\n }\n return val;\n });\n } catch (err) {\n throw new Error(`Arguments not serializable -- can not be used to memoize`);\n }\n}\nexport function memoize) => R, X : { (...args : Array) : R, displayName : string, reset : () => void }>(method : F, options : { time? : number, thisNamespace? : boolean } = {}) : X {\n let cacheMap = new WeakMap();\n\n // $FlowFixMe\n let memoizedFunction : X = function memoizedFunction(...args : Array) : R {\n let cache = cacheMap.getOrSet(options.thisNamespace ? this : method, () => ({}));\n\n let key : string = serializeArgs(args);\n\n let cacheTime = options.time;\n if (cache[key] && cacheTime && (Date.now() - cache[key].time) < cacheTime) {\n delete cache[key];\n }\n\n if (cache[key]) {\n return cache[key].value;\n }\n\n let time = Date.now();\n let value = method.apply(this, arguments);\n\n cache[key] = { time, value };\n\n return cache[key].value;\n };\n\n memoizedFunction.reset = () => {\n cacheMap.delete(options.thisNamespace ? this : method);\n };\n\n return setFunctionName(memoizedFunction, `${ getFunctionName(method) }::memoized`);\n}\n\nexport function promiseIdentity(item : ZalgoPromise | T) : ZalgoPromise {\n // $FlowFixMe\n return ZalgoPromise.resolve(item);\n}\n\n// eslint-disable-next-line flowtype/no-weak-types\nexport function memoizePromise(method : (...args : Array) => ZalgoPromise) : ((...args : Array) => ZalgoPromise) {\n let cache = {};\n\n // eslint-disable-next-line flowtype/no-weak-types\n function memoizedPromiseFunction(...args : Array) : ZalgoPromise {\n let key : string = serializeArgs(args);\n\n if (cache.hasOwnProperty(key)) {\n return cache[key];\n }\n\n cache[key] = ZalgoPromise.try(() => method.apply(this, arguments))\n .finally(() => {\n delete cache[key];\n });\n\n return cache[key];\n }\n\n memoizedPromiseFunction.reset = () => {\n cache = {};\n };\n\n return setFunctionName(memoizedPromiseFunction, `${ getFunctionName(method) }::promiseMemoized`);\n}\n\n// eslint-disable-next-line flowtype/no-weak-types\nexport function promisify(method : (...args : Array) => R, options : { name? : string } = {}) : ((...args : Array) => ZalgoPromise) {\n function promisifiedFunction() : ZalgoPromise {\n return ZalgoPromise.try(method, this, arguments);\n }\n\n if (options.name) {\n promisifiedFunction.displayName = `${ options.name }:promisified`;\n }\n\n return setFunctionName(promisifiedFunction, `${ getFunctionName(method) }::promisified`);\n}\n\n// eslint-disable-next-line flowtype/no-weak-types\nexport function inlineMemoize(method : (...args : Array) => R, logic : (...args : Array) => R, args : Array = []) : R {\n // $FlowFixMe\n let cache = method.__inline_memoize_cache__ = method.__inline_memoize_cache__ || {};\n let key = serializeArgs(args);\n\n if (cache.hasOwnProperty(key)) {\n return cache[key];\n }\n \n let result = cache[key] = logic(...args);\n\n return result;\n}\n\n// eslint-disable-next-line no-unused-vars\nexport function noop(...args : Array) {\n // pass\n}\n\nexport function once(method : Function) : Function {\n let called = false;\n\n const onceFunction = function() : mixed {\n if (!called) {\n called = true;\n return method.apply(this, arguments);\n }\n };\n\n return setFunctionName(onceFunction, `${ getFunctionName(method) }::once`);\n}\n\nexport function hashStr(str : string) : number {\n let hash = 0;\n for (let i = 0; i < str.length; i++) {\n hash += str[i].charCodeAt(0) * Math.pow((i % 10) + 1, 5);\n }\n return Math.floor(Math.pow(Math.sqrt(hash), 5));\n}\n\nexport function strHashStr(str : string) : string {\n let hash = '';\n\n for (let i = 0; i < str.length; i++) {\n let total = (str[i].charCodeAt(0) * i);\n\n if (str[i + 1]) {\n total += (str[i + 1].charCodeAt(0) * (i - 1));\n }\n\n hash += String.fromCharCode(97 + (Math.abs(total) % 26));\n }\n\n return hash;\n}\n\nexport function match(str : string, pattern : RegExp) : ?string {\n let regmatch = str.match(pattern);\n if (regmatch) {\n return regmatch[1];\n }\n}\n\nexport function awaitKey(obj : Object, key : string) : ZalgoPromise {\n return new ZalgoPromise(resolve => {\n\n let value = obj[key];\n\n if (value) {\n return resolve(value);\n }\n\n delete obj[key];\n\n Object.defineProperty(obj, key, {\n\n configurable: true,\n\n set(item) {\n value = item;\n\n if (value) {\n resolve(value);\n }\n },\n\n get() : mixed {\n return value;\n }\n });\n });\n}\n\nexport function stringifyError(err : mixed, level : number = 1) : string {\n\n if (level >= 3) {\n return 'stringifyError stack overflow';\n }\n\n try {\n if (!err) {\n return ``;\n }\n\n if (typeof err === 'string') {\n return err;\n }\n\n if (err instanceof Error) {\n let stack = err && err.stack;\n let message = err && err.message;\n\n if (stack && message) {\n if (stack.indexOf(message) !== -1) {\n return stack;\n } else {\n return `${ message }\\n${ stack }`;\n }\n } else if (stack) {\n return stack;\n } else if (message) {\n return message;\n }\n }\n\n if (err && err.toString && typeof err.toString === 'function') {\n // $FlowFixMe\n return err.toString();\n }\n\n return Object.prototype.toString.call(err);\n\n } catch (newErr) { // eslint-disable-line unicorn/catch-error-name\n return `Error while stringifying error: ${ stringifyError(newErr, level + 1) }`;\n }\n}\n\nexport function stringifyErrorMessage(err : mixed) : string {\n\n let defaultMessage = ``;\n\n if (!err) {\n return defaultMessage;\n }\n\n if (err instanceof Error) {\n return err.message || defaultMessage;\n }\n\n if (typeof err.message === 'string') {\n return err.message || defaultMessage;\n }\n\n return defaultMessage;\n}\n\nexport function stringify(item : mixed) : string {\n if (typeof item === 'string') {\n return item;\n }\n\n if (item && item.toString && typeof item.toString === 'function') {\n // $FlowFixMe\n return item.toString();\n }\n\n return Object.prototype.toString.call(item);\n}\n\nexport function domainMatches(hostname : string, domain : string) : boolean {\n hostname = hostname.split('://')[1];\n let index = hostname.indexOf(domain);\n return (index !== -1 && hostname.slice(index) === domain);\n}\n\nexport function patchMethod(obj : Object, name : string, handler : Function) {\n let original = obj[name];\n\n obj[name] = function patchedMethod() : mixed {\n return handler({\n context: this,\n args: Array.prototype.slice.call(arguments),\n original,\n callOriginal: () => original.apply(this, arguments)\n });\n };\n}\n\nexport function extend(obj : T, source : Object) : T {\n if (!source) {\n return obj;\n }\n\n if (Object.assign) {\n return Object.assign(obj, source);\n }\n\n for (let key in source) {\n if (source.hasOwnProperty(key)) {\n obj[key] = source[key];\n }\n }\n\n return obj;\n}\n\nexport function values(obj : { [string] : T }) : Array {\n let result = [];\n for (let key in obj) {\n if (obj.hasOwnProperty(key)) {\n result.push(obj[key]);\n }\n }\n return result;\n}\n\nexport function perc(pixels : number, percentage : number) : number {\n return Math.round((pixels * percentage) / 100);\n}\n\nexport function min(...args : Array) : number {\n return Math.min(...args);\n}\n\nexport function max(...args : Array) : number {\n return Math.max(...args);\n}\n\nexport function regexMap(str : string, regexp : RegExp, handler : () => T) : Array {\n let results = [];\n\n // $FlowFixMe\n str.replace(regexp, function regexMapMatcher(item) {\n results.push(handler ? handler.apply(null, arguments) : item);\n });\n\n // $FlowFixMe\n return results;\n}\n\nexport function svgToBase64(svg : string) : string {\n return `data:image/svg+xml;base64,${ base64encode(svg) }`;\n}\n\nexport function objFilter(obj : { [string] : T }, filter? : (T, ?string) => mixed = Boolean) : { [string] : R } {\n let result = {};\n\n for (let key in obj) {\n if (!obj.hasOwnProperty(key) || !filter(obj[key], key)) {\n continue;\n }\n\n result[key] = obj[key];\n }\n\n return result;\n}\n\nexport function identity (item : T) : T {\n return item;\n}\n\nexport function regexTokenize(text : string, regexp : RegExp) : Array {\n let result = [];\n text.replace(regexp, token => {\n result.push(token);\n return '';\n });\n return result;\n}\n\nexport function promiseDebounce(method : () => ZalgoPromise | T, delay : number = 50) : () => ZalgoPromise {\n\n let promise;\n let timeout;\n\n const promiseDebounced = function() : ZalgoPromise {\n if (timeout) {\n clearTimeout(timeout);\n }\n\n let localPromise = promise = promise || new ZalgoPromise();\n\n timeout = setTimeout(() => {\n promise = null;\n timeout = null;\n\n ZalgoPromise.try(method).then(\n result => { localPromise.resolve(result); },\n err => { localPromise.reject(err); }\n );\n }, delay);\n\n return localPromise;\n };\n\n return setFunctionName(promiseDebounced, `${ getFunctionName(method) }::promiseDebounced`);\n}\n\nexport function safeInterval(method : Function, time : number) : { cancel : () => void } {\n\n let timeout;\n\n function loop() {\n timeout = setTimeout(() => {\n method();\n loop();\n }, time);\n }\n\n loop();\n\n return {\n cancel() {\n clearTimeout(timeout);\n }\n };\n}\n\nexport function isInteger(str : string) : boolean {\n return Boolean(str.match(/^[0-9]+$/));\n}\n\nexport function isFloat(str : string) : boolean {\n return Boolean(str.match(/^[0-9]+\\.[0-9]+$/));\n}\n\nexport function serializePrimitive(value : string | number | boolean) : string {\n return value.toString();\n}\n\nexport function deserializePrimitive(value : string) : string | number | boolean {\n if (value === 'true') {\n return true;\n } else if (value === 'false') {\n return false;\n } else if (isInteger(value)) {\n return parseInt(value, 10);\n } else if (isFloat(value)) {\n return parseFloat(value);\n } else {\n return value;\n }\n}\n\nexport function dotify(obj : Object, prefix : string = '', newobj : Object = {}) : { [string] : string } {\n prefix = prefix ? `${ prefix }.` : prefix;\n for (let key in obj) {\n if (!obj.hasOwnProperty(key) || obj[key] === undefined || obj[key] === null || typeof obj[key] === 'function') {\n continue;\n } else if (obj[key] && Array.isArray(obj[key]) && obj[key].length && obj[key].every(val => typeof val !== 'object')) {\n newobj[`${ prefix }${ key }[]`] = obj[key].join(',');\n } else if (obj[key] && typeof obj[key] === 'object') {\n newobj = dotify(obj[key], `${ prefix }${ key }`, newobj);\n } else {\n newobj[`${ prefix }${ key }`] = serializePrimitive(obj[key]);\n }\n }\n return newobj;\n}\n\nexport function undotify(obj : { [string] : string }) : Object {\n \n let result = {};\n\n for (let key in obj) {\n if (!obj.hasOwnProperty(key) || typeof obj[key] !== 'string') {\n continue;\n }\n\n let value = obj[key];\n\n if (key.match(/^.+\\[\\]$/)) {\n key = key.slice(0, key.length - 2);\n value = value.split(',').map(deserializePrimitive);\n } else {\n value = deserializePrimitive(value);\n }\n\n let keyResult = result;\n let parts = key.split('.');\n for (let i = 0; i < parts.length; i++) {\n let part = parts[i];\n let isLast = (i + 1 === parts.length);\n let isIndex = !isLast && isInteger(parts[i + 1]);\n\n if (part === 'constructor' || part === 'prototype' || part === '__proto__') {\n throw new Error(`Disallowed key: ${ part }`);\n }\n\n if (isLast) {\n // $FlowFixMe\n keyResult[part] = value;\n } else {\n // $FlowFixMe\n keyResult = keyResult[part] = keyResult[part] || (isIndex ? [] : {});\n }\n }\n }\n\n return result;\n}\n\nexport type EventEmitterType = {\n on : (eventName : string, handler : Function) => CancelableType,\n once : (eventName : string, handler : Function) => CancelableType,\n trigger : (eventName : string, ...args : $ReadOnlyArray) => ZalgoPromise,\n triggerOnce : (eventName : string, ...args : $ReadOnlyArray) => ZalgoPromise,\n reset : () => void\n};\n\nexport function eventEmitter() : EventEmitterType {\n let triggered = {};\n let handlers = {};\n\n return {\n\n on(eventName : string, handler : Function) : CancelableType {\n let handlerList = handlers[eventName] = handlers[eventName] || [];\n\n handlerList.push(handler);\n\n let cancelled = false;\n\n return {\n cancel() {\n if (!cancelled) {\n cancelled = true;\n handlerList.splice(handlerList.indexOf(handler), 1);\n }\n\n }\n };\n },\n\n once(eventName : string, handler : Function) : CancelableType {\n\n let listener = this.on(eventName, () => {\n listener.cancel();\n handler();\n });\n\n return listener;\n },\n\n trigger(eventName : string, ...args : $ReadOnlyArray) : ZalgoPromise {\n\n let handlerList = handlers[eventName];\n let promises = [];\n\n if (handlerList) {\n for (let handler of handlerList) {\n promises.push(ZalgoPromise.try(() => handler(...args)));\n }\n }\n\n return ZalgoPromise.all(promises).then(noop);\n },\n\n triggerOnce(eventName : string, ...args : $ReadOnlyArray) : ZalgoPromise {\n\n if (triggered[eventName]) {\n return ZalgoPromise.resolve();\n }\n\n triggered[eventName] = true;\n return this.trigger(eventName, ...args);\n },\n\n reset() {\n handlers = {};\n }\n };\n}\n\nexport function camelToDasherize(string : string) : string {\n return string.replace(/([A-Z])/g, (g) => {\n return `-${ g.toLowerCase() }`;\n });\n}\n\nexport function dasherizeToCamel(string : string) : string {\n return string.replace(/-([a-z])/g, (g) => {\n return g[1].toUpperCase();\n });\n}\n\nexport function capitalizeFirstLetter(string : string) : string {\n return string.charAt(0).toUpperCase() + string.slice(1).toLowerCase();\n}\n\nexport function get(item : Object, path : string, def : mixed) : mixed {\n\n if (!path) {\n return def;\n }\n\n let pathParts = path.split('.');\n\n // Loop through each section of our key path\n\n for (let i = 0; i < pathParts.length; i++) {\n\n // If we have an object, we can get the key\n if (typeof item === 'object' && item !== null) {\n item = item[pathParts[i]];\n\n // Otherwise, we should return the default (undefined if not provided)\n } else {\n return def;\n }\n }\n\n // If our final result is undefined, we should return the default\n\n return item === undefined ? def : item;\n}\n\nexport function safeTimeout(method : Function, time : number) {\n\n let interval = safeInterval(() => {\n time -= 100;\n if (time <= 0) {\n interval.cancel();\n method();\n }\n }, 100);\n}\n\nexport function defineLazyProp(obj : Object | Array, key : string | number, getter : () => T) {\n if (Array.isArray(obj)) {\n if (typeof key !== 'number') {\n throw new TypeError(`Array key must be number`);\n }\n } else if (typeof obj === 'object' && obj !== null) {\n if (typeof key !== 'string') {\n throw new TypeError(`Object key must be string`);\n }\n }\n \n Object.defineProperty(obj, key, {\n configurable: true,\n enumerable: true,\n get: () => {\n // $FlowFixMe\n delete obj[key];\n let value = getter();\n // $FlowFixMe\n obj[key] = value;\n return value;\n },\n set: (value : T) => {\n // $FlowFixMe\n delete obj[key];\n // $FlowFixMe\n obj[key] = value;\n }\n });\n}\n\nexport function arrayFrom(item : Iterable) : Array { // eslint-disable-line no-undef\n return Array.prototype.slice.call(item);\n}\n\nexport function isObject(item : mixed) : boolean {\n return (typeof item === 'object' && item !== null);\n}\n\nexport function isObjectObject(obj : mixed) : boolean {\n return isObject(obj) && Object.prototype.toString.call(obj) === '[object Object]';\n}\n\nexport function isPlainObject(obj : mixed) : boolean {\n if (!isObjectObject(obj)) {\n return false;\n }\n\n // $FlowFixMe\n let constructor = obj.constructor;\n\n if (typeof constructor !== 'function') {\n return false;\n }\n\n let prototype = constructor.prototype;\n\n if (!isObjectObject(prototype)) {\n return false;\n }\n\n if (!prototype.hasOwnProperty('isPrototypeOf')) {\n return false;\n }\n\n return true;\n}\n\nexport function replaceObject | Object> (item : T, replacer : (mixed, string | number, string) => mixed, fullKey : string = '') : T {\n\n if (Array.isArray(item)) {\n let length = item.length;\n let result : Array = [];\n\n for (let i = 0; i < length; i++) {\n\n \n defineLazyProp(result, i, () => {\n let itemKey = fullKey ? `${ fullKey }.${ i }` : `${ i }`;\n let el = item[i];\n\n let child = replacer(el, i, itemKey);\n\n if (isPlainObject(child) || Array.isArray(child)) {\n // $FlowFixMe\n child = replaceObject(child, replacer, itemKey);\n }\n\n return child;\n });\n }\n\n // $FlowFixMe\n return result;\n } else if (isPlainObject(item)) {\n let result = {};\n\n for (let key in item) {\n if (!item.hasOwnProperty(key)) {\n continue;\n }\n\n defineLazyProp(result, key, () => {\n let itemKey = fullKey ? `${ fullKey }.${ key }` : `${ key }`;\n // $FlowFixMe\n let el = item[key];\n\n let child = replacer(el, key, itemKey);\n\n if (isPlainObject(child) || Array.isArray(child)) {\n // $FlowFixMe\n child = replaceObject(child, replacer, itemKey);\n }\n\n return child;\n });\n }\n\n // $FlowFixMe\n return result;\n } else {\n throw new Error(`Pass an object or array`);\n }\n}\n\n\nexport function copyProp(source : Object, target : Object, name : string, def : mixed) {\n if (source.hasOwnProperty(name)) {\n let descriptor = Object.getOwnPropertyDescriptor(source, name);\n // $FlowFixMe\n Object.defineProperty(target, name, descriptor);\n\n } else {\n target[name] = def;\n }\n}\n\ntype RegexResultType = {\n text : string,\n groups : Array,\n start : number,\n end : number,\n length : number,\n replace : (text : string) => string\n};\n\nexport function regex(pattern : string | RegExp, string : string, start : number = 0) : ?RegexResultType {\n\n if (typeof pattern === 'string') {\n // eslint-disable-next-line security/detect-non-literal-regexp\n pattern = new RegExp(pattern);\n }\n\n let result = string.slice(start).match(pattern);\n\n if (!result) {\n return;\n }\n\n // $FlowFixMe\n let index : number = result.index;\n let regmatch = result[0];\n\n return {\n text: regmatch,\n groups: result.slice(1),\n start: start + index,\n end: start + index + regmatch.length,\n length: regmatch.length,\n\n replace(text : string) : string {\n\n if (!regmatch) {\n return '';\n }\n\n return `${ regmatch.slice(0, start + index) }${ text }${ regmatch.slice(index + regmatch.length) }`;\n }\n };\n}\n\nexport function regexAll(pattern : string | RegExp, string : string) : Array {\n\n let matches = [];\n let start = 0;\n\n // eslint-disable-next-line no-constant-condition\n while (true) {\n let regmatch = regex(pattern, string, start);\n\n if (!regmatch) {\n break;\n }\n\n matches.push(regmatch);\n start = match.end;\n }\n\n return matches;\n}\n\nexport function isDefined(value : ?mixed) : boolean {\n return value !== null && value !== undefined;\n}\n\nexport function cycle(method : Function) : ZalgoPromise {\n return ZalgoPromise.try(method).then(() => cycle(method));\n}\n\nexport function debounce(method : (...args : Array) => T, time : number = 100) : (...args : Array) => void {\n\n let timeout;\n\n const debounceWrapper = function() {\n clearTimeout(timeout);\n\n timeout = setTimeout(() => {\n return method.apply(this, arguments);\n }, time);\n };\n\n return setFunctionName(debounceWrapper, `${ getFunctionName(method) }::debounced`);\n}\n\nexport function isRegex(item : mixed) : boolean {\n return Object.prototype.toString.call(item) === '[object RegExp]';\n}\n\ntype FunctionProxy = (method : T) => T;\n\n// eslint-disable-next-line flowtype/no-weak-types\nexport let weakMapMemoize : FunctionProxy<*> = (method : (arg : any) => R) : ((...args : Array) => R) => {\n\n let weakmap = new WeakMap();\n\n // eslint-disable-next-line flowtype/no-weak-types\n return function weakmapMemoized(arg : any) : R {\n return weakmap.getOrSet(arg, () => method.call(this, arg));\n };\n};\n\ntype FunctionPromiseProxy) => ZalgoPromise> = (T) => T;\n\n// eslint-disable-next-line flowtype/no-weak-types\nexport let weakMapMemoizePromise : FunctionPromiseProxy<*, *> = (method : (arg : any) => ZalgoPromise) : ((...args : Array) => ZalgoPromise) => {\n\n let weakmap = new WeakMap();\n\n // eslint-disable-next-line flowtype/no-weak-types\n return function weakmapMemoizedPromise(arg : any) : ZalgoPromise {\n return weakmap.getOrSet(arg, () =>\n method.call(this, arg).finally(() => {\n weakmap.delete(arg);\n })\n );\n };\n};\n\nexport function getOrSet(obj : O, key : string, getter : () => T) : T {\n if (obj.hasOwnProperty(key)) {\n return obj[key];\n }\n\n const val = getter();\n obj[key] = val;\n return val;\n}\n\nexport type CleanupType = {|\n set : (string, T) => T, // eslint-disable-line no-undef\n register : (Function) => void,\n all : () => ZalgoPromise\n|};\n\nexport function cleanup(obj : Object) : CleanupType {\n\n const tasks = [];\n let cleaned = false;\n\n return {\n set(name : string, item : T) : T {\n if (!cleaned) {\n obj[name] = item;\n this.register(() => {\n delete obj[name];\n });\n }\n return item;\n },\n\n register(method : Function) {\n if (cleaned) {\n method();\n } else {\n tasks.push(once(method));\n }\n },\n\n all() : ZalgoPromise {\n const results = [];\n cleaned = true;\n\n while (tasks.length) {\n const task = tasks.pop();\n results.push(task());\n }\n\n return ZalgoPromise.all(results).then(noop);\n }\n };\n}\n\nexport function tryCatch(fn : () => T) : {| result : T, error : void |} | {| result : void, error : mixed |} {\n let result;\n let error;\n\n try {\n result = fn();\n } catch (err) {\n error = err;\n }\n \n // $FlowFixMe\n return { result, error };\n}\n\nexport function removeFromArray>(arr : T, item : X) {\n const index = arr.indexOf(item);\n if (index !== -1) {\n arr.splice(index, 1);\n }\n}\n\nexport function assertExists(name : string, thing : void | null | T) : T {\n if (thing === null || typeof thing === 'undefined') {\n throw new Error(`Expected ${ name } to be present`);\n }\n \n return thing;\n}\n \nexport function unique(arr : $ReadOnlyArray) : $ReadOnlyArray {\n const result = {};\n for (const item of arr) {\n // eslint-disable-next-line const-immutable/no-mutation\n result[item] = true;\n }\n return Object.keys(result);\n}\n","/* @flow */\n/* eslint max-lines: off */\n\nimport { ZalgoPromise } from 'zalgo-promise/src';\nimport { linkFrameWindow, isWindowClosed,\n type SameDomainWindowType, type CrossDomainWindowType } from 'cross-domain-utils/src';\nimport { WeakMap } from 'cross-domain-safe-weakmap/src';\n\nimport { inlineMemoize, noop, stringify, capitalizeFirstLetter,\n once, extend, safeInterval, uniqueID, arrayFrom } from './util';\nimport { isDevice } from './device';\nimport { KEY_CODES } from './constants';\nimport type { CancelableType } from './types';\n\ntype ElementRefType = string | HTMLElement;\n\nexport function isDocumentReady() : boolean {\n return Boolean(document.body) && document.readyState === 'complete';\n}\n\nexport function urlEncode(str : string) : string {\n return str.replace(/\\?/g, '%3F').replace(/&/g, '%26').replace(/#/g, '%23').replace(/\\+/g, '%2B');\n}\n\nexport function waitForWindowReady() : ZalgoPromise {\n return inlineMemoize(waitForWindowReady, () : ZalgoPromise => {\n return new ZalgoPromise(resolve => {\n if (isDocumentReady()) {\n resolve();\n }\n\n window.addEventListener('load', () => resolve());\n });\n });\n}\n\nexport function waitForDocumentReady() : ZalgoPromise {\n return inlineMemoize(waitForDocumentReady, () : ZalgoPromise => {\n return new ZalgoPromise(resolve => {\n\n if (isDocumentReady()) {\n return resolve();\n }\n\n let interval = setInterval(() => {\n if (isDocumentReady()) {\n clearInterval(interval);\n return resolve();\n }\n }, 10);\n });\n });\n}\n\nexport function waitForDocumentBody() : ZalgoPromise {\n return waitForDocumentReady().then(() => {\n if (document.body) {\n return document.body;\n }\n\n throw new Error('Document ready but document.body not present');\n });\n}\n\nexport function parseQuery(queryString : string) : Object {\n return inlineMemoize(parseQuery, () : Object => {\n let params = {};\n\n if (!queryString) {\n return params;\n }\n\n if (queryString.indexOf('=') === -1) {\n return params;\n }\n\n for (let pair of queryString.split('&')) {\n pair = pair.split('=');\n\n if (pair[0] && pair[1]) {\n params[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1]);\n }\n }\n\n return params;\n }, [ queryString ]);\n}\n\n\nexport function getQueryParam(name : string) : string {\n return parseQuery(window.location.search.slice(1))[name];\n}\n\nexport function urlWillRedirectPage(url : string) : boolean {\n\n if (url.indexOf('#') === -1) {\n return true;\n }\n\n if (url.indexOf('#') === 0) {\n return false;\n }\n\n if (url.split('#')[0] === window.location.href.split('#')[0]) {\n return false;\n }\n\n return true;\n}\n\nexport function formatQuery(obj : { [ string ] : string } = {}) : string {\n\n return Object.keys(obj).filter(key => {\n return typeof obj[key] === 'string';\n }).map(key => {\n return `${ urlEncode(key) }=${ urlEncode(obj[key]) }`;\n }).join('&');\n}\n\nexport function extendQuery(originalQuery : string, props : { [ string ] : string } = {}) : string {\n\n if (!props || !Object.keys(props).length) {\n return originalQuery;\n }\n\n return formatQuery({\n ...parseQuery(originalQuery),\n ...props\n });\n}\n\nexport function extendUrl(url : string, options : { query? : { [string] : string }, hash? : { [string] : string } } = {}) : string {\n\n let query = options.query || {};\n let hash = options.hash || {};\n\n let originalUrl;\n let originalQuery;\n let originalHash;\n\n [ originalUrl, originalHash ] = url.split('#');\n [ originalUrl, originalQuery ] = originalUrl.split('?');\n\n let queryString = extendQuery(originalQuery, query);\n let hashString = extendQuery(originalHash, hash);\n\n if (queryString) {\n originalUrl = `${ originalUrl }?${ queryString }`;\n }\n\n if (hashString) {\n originalUrl = `${ originalUrl }#${ hashString }`;\n }\n\n return originalUrl;\n}\n\nexport function redirect(url : string, win : CrossDomainWindowType = window) : ZalgoPromise {\n return new ZalgoPromise(resolve => {\n win.location = url;\n if (!urlWillRedirectPage(url)) {\n resolve();\n }\n });\n}\n\nexport function hasMetaViewPort() : boolean {\n let meta = document.querySelector('meta[name=viewport]');\n\n if (isDevice() && window.screen.width < 660 && !meta) {\n return false;\n }\n\n return true;\n}\n\nexport function isElementVisible(el : HTMLElement) : boolean {\n return Boolean(el.offsetWidth || el.offsetHeight || el.getClientRects().length);\n}\n\nexport function enablePerformance() : boolean {\n return inlineMemoize(enablePerformance, () : boolean => {\n /* eslint-disable compat/compat */\n return Boolean(\n window.performance &&\n performance.now &&\n performance.timing &&\n performance.timing.connectEnd &&\n performance.timing.navigationStart &&\n (Math.abs(performance.now() - Date.now()) > 1000) &&\n (performance.now() - (performance.timing.connectEnd - performance.timing.navigationStart)) > 0\n );\n /* eslint-enable compat/compat */\n });\n}\n\nexport function getPageRenderTime() : ZalgoPromise {\n return waitForDocumentReady().then(() => {\n\n if (!enablePerformance()) {\n return;\n }\n\n let timing = window.performance.timing;\n\n if (timing.connectEnd && timing.domInteractive) {\n return timing.domInteractive - timing.connectEnd;\n }\n });\n}\n\nexport function htmlEncode(html : string = '') : string {\n return html.toString()\n .replace(/&/g, '&')\n .replace(//g, '>')\n .replace(/\"/g, '"')\n .replace(/'/g, ''')\n .replace(/\\//g, '/');\n}\n\nexport function isBrowser() : boolean {\n return (typeof window !== 'undefined');\n}\n\nexport function querySelectorAll(selector : string, doc : HTMLElement = window.document) : Array {\n return Array.prototype.slice.call(doc.querySelectorAll(selector));\n}\n\nexport function onClick(element : HTMLElement, handler : (Event) => void) {\n element.addEventListener('touchstart', noop);\n element.addEventListener('click', handler);\n element.addEventListener('keypress', (event : Event) => {\n // $FlowFixMe\n if (event.keyCode === KEY_CODES.ENTER) {\n return handler(event);\n }\n });\n}\n\nexport function getScript({ host = window.location.host, path } : { host? : string, path : string }) : ?HTMLScriptElement {\n return inlineMemoize(getScript, () : ?HTMLScriptElement => {\n\n let url = `${ host }${ path }`;\n let scripts = Array.prototype.slice.call(document.getElementsByTagName('script'));\n\n for (let script of scripts) {\n if (!script.src) {\n continue;\n }\n\n let src = script.src.replace(/^https?:\\/\\//, '').split('?')[0];\n\n if (src === url) {\n return script;\n }\n }\n }, [ path ]);\n}\n\nexport function isLocalStorageEnabled() : boolean {\n return inlineMemoize(isLocalStorageEnabled, () => {\n try {\n if (typeof window === 'undefined') {\n return false;\n }\n\n if (window.localStorage) {\n let value = Math.random().toString();\n window.localStorage.setItem('__test__localStorage__', value);\n let result = window.localStorage.getItem('__test__localStorage__');\n window.localStorage.removeItem('__test__localStorage__');\n if (value === result) {\n return true;\n }\n }\n } catch (err) {\n // pass\n }\n return false;\n });\n}\n\nexport function getBrowserLocales() : Array<{ country? : string, lang : string }> {\n let nav = window.navigator;\n\n let locales = nav.languages\n ? Array.prototype.slice.apply(nav.languages)\n : [];\n\n if (nav.language) {\n locales.push(nav.language);\n }\n\n if (nav.userLanguage) {\n locales.push(nav.userLanguage);\n }\n\n return locales.map(locale => {\n\n if (locale && locale.match(/^[a-z]{2}[-_][A-Z]{2}$/)) {\n let [ lang, country ] = locale.split(/[-_]/);\n return { country, lang };\n }\n\n if (locale && locale.match(/^[a-z]{2}$/)) {\n return { lang: locale };\n }\n\n return null;\n\n }).filter(Boolean);\n}\n\n\nexport function appendChild(container : HTMLElement, child : HTMLElement | Text) {\n container.appendChild(child);\n}\n\nexport function isElement(element : mixed) : boolean {\n\n if (element instanceof window.Element) {\n return true;\n }\n\n if (element !== null && typeof element === 'object' && element.nodeType === 1 && typeof element.style === 'object' && typeof element.ownerDocument === 'object') {\n return true;\n }\n\n return false;\n}\n\nexport function getElementSafe(id : ElementRefType, doc : Document | HTMLElement = document) : ?HTMLElement {\n\n if (isElement(id)) {\n // $FlowFixMe\n return id;\n }\n\n if (typeof id === 'string') {\n return doc.querySelector(id);\n }\n}\n\nexport function getElement(id : ElementRefType, doc : Document | HTMLElement = document) : HTMLElement {\n\n let element = getElementSafe(id, doc);\n\n if (element) {\n return element;\n }\n\n throw new Error(`Can not find element: ${ stringify(id) }`);\n}\n\nexport function elementReady(id : ElementRefType) : ZalgoPromise {\n return new ZalgoPromise((resolve, reject) => {\n\n let name = stringify(id);\n let el = getElementSafe(id);\n\n if (el) {\n return resolve(el);\n }\n\n if (isDocumentReady()) {\n return reject(new Error(`Document is ready and element ${ name } does not exist`));\n }\n\n let interval = setInterval(() => {\n\n el = getElementSafe(id);\n\n if (el) {\n clearInterval(interval);\n return resolve(el);\n }\n\n if (isDocumentReady()) {\n clearInterval(interval);\n return reject(new Error(`Document is ready and element ${ name } does not exist`));\n }\n }, 10);\n });\n}\n\nexport function PopupOpenError(message : string) {\n this.message = message;\n}\n\nPopupOpenError.prototype = Object.create(Error.prototype);\n\ntype PopupOptions = {|\n name? : string,\n width? : number,\n height? : number,\n top? : number,\n left? : number,\n status? : 0 | 1,\n resizable? : 0 | 1,\n toolbar? : 0 | 1,\n menubar? : 0 | 1,\n scrollbars? : 0 | 1\n|};\n\nexport function popup(url : string, options? : PopupOptions) : CrossDomainWindowType {\n\n // $FlowFixMe\n options = options || {};\n\n let { width, height } = options;\n\n let top = 0;\n let left = 0;\n\n if (width) {\n if (window.outerWidth) {\n left = Math.round((window.outerWidth - width) / 2) + window.screenX;\n } else if (window.screen.width) {\n left = Math.round((window.screen.width - width) / 2);\n }\n }\n\n if (height) {\n if (window.outerHeight) {\n top = Math.round((window.outerHeight - height) / 2) + window.screenY;\n } else if (window.screen.height) {\n top = Math.round((window.screen.height - height) / 2);\n }\n }\n\n if (width && height) {\n options = {\n top,\n left,\n width,\n height,\n status: 1,\n toolbar: 0,\n menubar: 0,\n resizable: 1,\n scrollbars: 1,\n ...options\n };\n }\n\n let name = options.name || '';\n delete options.name;\n\n // eslint-disable-next-line array-callback-return\n let params = Object.keys(options).map(key => {\n // $FlowFixMe\n if (options[key] !== null && options[key] !== undefined) {\n return `${ key }=${ stringify(options[key]) }`;\n }\n }).filter(Boolean).join(',');\n\n let win;\n\n try {\n win = window.open(url, name, params, true);\n } catch (err) {\n throw new PopupOpenError(`Can not open popup window - ${ err.stack || err.message }`);\n }\n\n if (isWindowClosed(win)) {\n let err = new PopupOpenError(`Can not open popup window - blocked`);\n throw err;\n }\n\n window.addEventListener('unload', () => win.close());\n\n return win;\n}\n\n\nexport function writeToWindow(win : SameDomainWindowType, html : string) {\n try {\n win.document.open();\n win.document.write(html);\n win.document.close();\n } catch (err) {\n try {\n win.location = `javascript: document.open(); document.write(${ JSON.stringify(html) }); document.close();`;\n } catch (err2) {\n // pass\n }\n }\n}\n\nexport function writeElementToWindow(win : SameDomainWindowType, el : HTMLElement) {\n\n let tag = el.tagName.toLowerCase();\n\n if (tag !== 'html') {\n throw new Error(`Expected element to be html, got ${ tag }`);\n }\n\n let documentElement = win.document.documentElement;\n\n for (const child of arrayFrom(documentElement.children)) {\n documentElement.removeChild(child);\n }\n\n for (const child of arrayFrom(el.children)) {\n documentElement.appendChild(child);\n }\n}\n\nexport function setStyle(el : HTMLElement, styleText : string, doc : Document = window.document) {\n // $FlowFixMe\n if (el.styleSheet) {\n // $FlowFixMe\n el.styleSheet.cssText = styleText;\n } else {\n el.appendChild(doc.createTextNode(styleText));\n }\n}\n\nexport type ElementOptionsType = {\n style? : { [ string ] : string },\n id? : string,\n class? : ?Array,\n attributes? : { [ string ] : string },\n styleSheet? : ?string,\n html? : ?string\n};\n\nlet awaitFrameLoadPromises : WeakMap>;\n\nexport function awaitFrameLoad(frame : HTMLIFrameElement) : ZalgoPromise {\n awaitFrameLoadPromises = awaitFrameLoadPromises || new WeakMap();\n\n if (awaitFrameLoadPromises.has(frame)) {\n let promise = awaitFrameLoadPromises.get(frame);\n if (promise) {\n return promise;\n }\n }\n\n let promise = new ZalgoPromise((resolve, reject) => {\n frame.addEventListener('load', () => {\n linkFrameWindow(frame);\n resolve(frame);\n });\n\n frame.addEventListener('error', (err : Event) => {\n if (frame.contentWindow) {\n resolve(frame);\n } else {\n reject(err);\n }\n });\n });\n\n awaitFrameLoadPromises.set(frame, promise);\n\n return promise;\n}\n\nexport function awaitFrameWindow(frame : HTMLIFrameElement) : ZalgoPromise {\n return awaitFrameLoad(frame).then(loadedFrame => {\n\n if (!loadedFrame.contentWindow) {\n throw new Error(`Could not find window in iframe`);\n }\n\n return loadedFrame.contentWindow;\n });\n}\n\nexport function createElement(tag : string = 'div', options : ElementOptionsType = {}, container : ?HTMLElement) : HTMLElement {\n\n tag = tag.toLowerCase();\n let element = document.createElement(tag);\n\n if (options.style) {\n extend(element.style, options.style);\n }\n\n if (options.class) {\n element.className = options.class.join(' ');\n }\n\n if (options.id) {\n element.setAttribute('id', options.id);\n }\n\n if (options.attributes) {\n for (let key of Object.keys(options.attributes)) {\n element.setAttribute(key, options.attributes[key]);\n }\n }\n\n if (options.styleSheet) {\n setStyle(element, options.styleSheet);\n }\n\n if (container) {\n appendChild(container, element);\n }\n\n if (options.html) {\n if (tag === 'iframe') {\n // $FlowFixMe\n if (!container || !element.contentWindow) {\n throw new Error(`Iframe html can not be written unless container provided and iframe in DOM`);\n }\n\n // $FlowFixMe\n writeToWindow(element.contentWindow, options.html);\n\n } else {\n element.innerHTML = options.html;\n }\n }\n\n return element;\n}\n\n\nexport type IframeElementOptionsType = {\n style? : { [ string ] : string },\n class? : ?Array,\n attributes? : { [ string ] : string },\n styleSheet? : ?string,\n html? : ?string,\n url? : ?string\n};\n\nexport function iframe(options : IframeElementOptionsType = {}, container : ?HTMLElement) : HTMLIFrameElement {\n\n let attributes = options.attributes || {};\n let style = options.style || {};\n\n let frame = createElement('iframe', {\n attributes: {\n allowTransparency: 'true',\n ...attributes\n },\n style: {\n backgroundColor: 'transparent',\n border: 'none',\n ...style\n },\n html: options.html,\n class: options.class\n });\n\n const isIE = window.navigator.userAgent.match(/MSIE|Edge/i);\n \n if (!frame.hasAttribute('id')) {\n frame.setAttribute('id', uniqueID());\n }\n\n // $FlowFixMe\n awaitFrameLoad(frame);\n\n if (container) {\n let el = getElement(container);\n el.appendChild(frame);\n }\n\n if (options.url || isIE) {\n frame.setAttribute('src', options.url || 'about:blank');\n }\n\n // $FlowFixMe\n return frame;\n}\n\nexport function addEventListener(obj : HTMLElement, event : string, handler : (event : Event) => void) : CancelableType {\n obj.addEventListener(event, handler);\n return {\n cancel() {\n obj.removeEventListener(event, handler);\n }\n };\n}\n\nexport function bindEvents(element : HTMLElement, eventNames : Array, handler : (event : Event) => void) : CancelableType {\n\n handler = once(handler);\n\n for (let eventName of eventNames) {\n element.addEventListener(eventName, handler);\n }\n\n return {\n cancel: once(() => {\n for (let eventName of eventNames) {\n element.removeEventListener(eventName, handler);\n }\n })\n };\n}\n\nconst VENDOR_PREFIXES = [ 'webkit', 'moz', 'ms', 'o' ];\n\nexport function setVendorCSS(element : HTMLElement, name : string, value : string) {\n\n // $FlowFixMe\n element.style[name] = value;\n\n let capitalizedName = capitalizeFirstLetter(name);\n\n for (let prefix of VENDOR_PREFIXES) {\n // $FlowFixMe\n element.style[`${ prefix }${ capitalizedName }`] = value;\n }\n}\n\nconst ANIMATION_START_EVENTS = [ 'animationstart', 'webkitAnimationStart', 'oAnimationStart', 'MSAnimationStart' ];\nconst ANIMATION_END_EVENTS = [ 'animationend', 'webkitAnimationEnd', 'oAnimationEnd', 'MSAnimationEnd' ];\n\nexport function animate(element : ElementRefType, name : string, clean : (Function) => void, timeout : number = 1000) : ZalgoPromise {\n return new ZalgoPromise((resolve, reject) => {\n\n let el = getElement(element);\n\n if (!el) {\n return resolve();\n }\n\n let hasStarted = false;\n\n let startTimeout;\n let endTimeout;\n let startEvent;\n let endEvent;\n\n function cleanUp() {\n clearTimeout(startTimeout);\n clearTimeout(endTimeout);\n startEvent.cancel();\n endEvent.cancel();\n }\n\n startEvent = bindEvents(el, ANIMATION_START_EVENTS, event => {\n\n // $FlowFixMe\n if (event.target !== el || event.animationName !== name) {\n return;\n }\n\n clearTimeout(startTimeout);\n\n event.stopPropagation();\n\n startEvent.cancel();\n hasStarted = true;\n\n endTimeout = setTimeout(() => {\n cleanUp();\n resolve();\n }, timeout);\n });\n\n endEvent = bindEvents(el, ANIMATION_END_EVENTS, event => {\n\n // $FlowFixMe\n if (event.target !== el || event.animationName !== name) {\n return;\n }\n\n cleanUp();\n\n // $FlowFixMe\n if (typeof event.animationName === 'string' && event.animationName !== name) {\n return reject(`Expected animation name to be ${ name }, found ${ event.animationName }`);\n }\n\n return resolve();\n });\n\n setVendorCSS(el, 'animationName', name);\n\n startTimeout = setTimeout(() => {\n if (!hasStarted) {\n cleanUp();\n return resolve();\n }\n }, 200);\n\n if (clean) {\n clean(cleanUp);\n }\n });\n}\n\nconst STYLE = {\n\n DISPLAY: {\n NONE: 'none',\n BLOCK: 'block'\n },\n\n VISIBILITY: {\n VISIBLE: 'visible',\n HIDDEN: 'hidden'\n },\n\n IMPORTANT: 'important'\n};\n\nexport function makeElementVisible(element : HTMLElement) {\n element.style.setProperty('visibility', '');\n}\n\nexport function makeElementInvisible(element : HTMLElement) {\n element.style.setProperty('visibility', STYLE.VISIBILITY.HIDDEN, STYLE.IMPORTANT);\n}\n\n\nexport function showElement(element : HTMLElement) {\n element.style.setProperty('display', '');\n}\n\nexport function hideElement(element : HTMLElement) {\n element.style.setProperty('display', STYLE.DISPLAY.NONE, STYLE.IMPORTANT);\n}\n\nexport function destroyElement(element : HTMLElement) {\n if (element && element.parentNode) {\n element.parentNode.removeChild(element);\n }\n}\n\nexport function showAndAnimate(element : HTMLElement, name : string, clean : (Function) => void) : ZalgoPromise {\n let animation = animate(element, name, clean);\n showElement(element);\n return animation;\n}\n\nexport function animateAndHide(element : HTMLElement, name : string, clean : (Function) => void) : ZalgoPromise {\n return animate(element, name, clean).then(() => {\n hideElement(element);\n });\n}\n\nexport function addClass(element : HTMLElement, name : string) {\n element.classList.add(name);\n}\n\nexport function removeClass(element : HTMLElement, name : string) {\n element.classList.remove(name);\n}\n\nexport function isElementClosed(el : HTMLElement) : boolean {\n if (!el || !el.parentNode) {\n return true;\n }\n return false;\n}\n\nexport function watchElementForClose(element : HTMLElement, handler : () => mixed) : CancelableType {\n handler = once(handler);\n\n let interval;\n\n if (isElementClosed(element)) {\n handler();\n } else {\n interval = safeInterval(() => {\n if (isElementClosed(element)) {\n interval.cancel();\n handler();\n }\n }, 50);\n }\n\n return {\n cancel() {\n if (interval) {\n interval.cancel();\n }\n }\n };\n}\n\nexport function fixScripts(el : HTMLElement, doc : Document = window.document) {\n for (let script of querySelectorAll('script', el)) {\n let parentNode = script.parentNode;\n\n if (!parentNode) {\n continue;\n }\n\n let newScript = doc.createElement('script');\n newScript.text = script.textContent;\n parentNode.replaceChild(newScript, script);\n }\n}\n\ntype OnResizeOptions = {|\n width? : boolean,\n height? : boolean,\n interval? : number,\n win? : SameDomainWindowType\n|};\n\nexport function onResize(el : HTMLElement, handler : ({ width : number, height : number }) => void, { width = true, height = true, interval = 100, win = window } : OnResizeOptions = {}) : {} {\n let currentWidth = el.offsetWidth;\n let currentHeight = el.offsetHeight;\n\n handler({ width: currentWidth, height: currentHeight });\n\n let check = () => {\n let newWidth = el.offsetWidth;\n let newHeight = el.offsetHeight;\n\n if ((width && newWidth !== currentWidth) || (height && newHeight !== currentHeight)) {\n handler({ width: newWidth, height: newHeight });\n }\n\n currentWidth = newWidth;\n currentHeight = newHeight;\n };\n\n let observer;\n let timeout;\n\n if (typeof win.ResizeObserver !== 'undefined') {\n observer = new win.ResizeObserver(check);\n observer.observe(el);\n\n } else if (typeof win.MutationObserver !== 'undefined') {\n observer = new win.MutationObserver(check);\n observer.observe(el, {\n attributes: true,\n childList: true,\n subtree: true,\n characterData: false\n });\n win.addEventListener('resize', check);\n } else {\n let loop = () => {\n check();\n timeout = setTimeout(loop, interval);\n };\n loop();\n }\n\n return {\n cancel: () => {\n observer.disconnect();\n window.removeEventListener('resize', check);\n clearTimeout(timeout);\n }\n };\n}\n\nexport function getResourceLoadTime(url : string) : ?number {\n\n if (!enablePerformance()) {\n return;\n }\n\n if (!window.performance || typeof window.performance.getEntries !== 'function') {\n return;\n }\n\n const entries = window.performance.getEntries();\n\n for (let i = 0; i < entries.length; i++) {\n const entry = entries[i];\n\n if (entry && entry.name && entry.name.indexOf(url) === 0 && typeof entry.duration === 'number') {\n return Math.floor(entry.duration);\n }\n }\n}\n","/* @flow */\n\nexport const LOG_LEVEL = {\n DEBUG: ('debug' : 'debug'),\n INFO: ('info' : 'info'),\n WARN: ('warn' : 'warn'),\n ERROR: ('error' : 'error')\n};\n\nexport const PROTOCOL = {\n FILE: 'file:'\n};\n","/* @flow */\n\nimport { LOG_LEVEL } from './constants';\n\nexport const AUTO_FLUSH_LEVEL = [ LOG_LEVEL.WARN, LOG_LEVEL.ERROR ];\n\nexport const LOG_LEVEL_PRIORITY = [ LOG_LEVEL.ERROR, LOG_LEVEL.WARN, LOG_LEVEL.INFO, LOG_LEVEL.DEBUG ];\n\nexport const FLUSH_INTERVAL = 60 * 1000;\n\nexport const DEFAULT_LOG_LEVEL = __DEBUG__ ? LOG_LEVEL.DEBUG : LOG_LEVEL.WARN;\n","/* @flow */\n\nimport { ZalgoPromise } from 'zalgo-promise/src';\nimport { request, isBrowser, promiseDebounce, noop, safeInterval, objFilter } from 'belter/src';\n\nimport { DEFAULT_LOG_LEVEL, LOG_LEVEL_PRIORITY, AUTO_FLUSH_LEVEL, FLUSH_INTERVAL } from './config';\nimport { LOG_LEVEL, PROTOCOL } from './constants';\nimport { simpleRequest } from './util';\n\ntype Payload = { [string] : string };\n\ntype LoggerOptions = {|\n url : string,\n prefix? : string,\n logLevel? : $Values,\n flushInterval? : number\n|};\n\ntype ClientPayload = { [string] : ?string };\ntype Log = (name : string, payload? : ClientPayload) => LoggerType; // eslint-disable-line no-use-before-define\ntype Track = (payload : ClientPayload) => LoggerType; // eslint-disable-line no-use-before-define\n\ntype Builder = (Payload) => ClientPayload;\ntype AddBuilder = (Builder) => LoggerType; // eslint-disable-line no-use-before-define\n\nexport type LoggerType = {|\n debug : Log,\n info : Log,\n warn : Log,\n error : Log,\n\n track : Track,\n\n flush : () => (void | ZalgoPromise),\n immediateFlush : () => (void | ZalgoPromise),\n\n addPayloadBuilder : AddBuilder,\n addMetaBuilder : AddBuilder,\n addTrackingBuilder : AddBuilder,\n addHeaderBuilder : AddBuilder\n|};\n\nfunction extendIfDefined(target : { [string] : string }, source : { [string] : ?string }) {\n for (const key in source) {\n if (source.hasOwnProperty(key) && source[key] && !target[key]) {\n target[key] = source[key];\n }\n }\n}\n\nexport function Logger({ url, prefix, logLevel = DEFAULT_LOG_LEVEL, flushInterval = FLUSH_INTERVAL } : LoggerOptions) : LoggerType {\n\n let events : Array<{ level : $Values, event : string, payload : Payload }> = [];\n let tracking : Array = [];\n\n const payloadBuilders : Array = [];\n const metaBuilders : Array = [];\n const trackingBuilders : Array = [];\n const headerBuilders : Array = [];\n\n function print(level : $Values, event : string, payload : Payload) {\n if (__BEAVER_LOGGER__.__LITE_MODE__ || !isBrowser() || !window.console || !window.console.log) {\n return;\n }\n\n if (LOG_LEVEL_PRIORITY.indexOf(level) > LOG_LEVEL_PRIORITY.indexOf(logLevel)) {\n return;\n }\n\n const args = [ event ];\n\n args.push(payload);\n\n if (payload.error || payload.warning) {\n args.push('\\n\\n', payload.error || payload.warning);\n }\n\n try {\n if (window.console[level] && window.console[level].apply) {\n window.console[level].apply(window.console, args);\n } else if (window.console.log && window.console.log.apply) {\n window.console.log.apply(window.console, args);\n }\n } catch (err) {\n // pass\n }\n }\n\n function buildPayloads() : {| meta : Payload, headers : Payload |} {\n const meta = {};\n for (const builder of metaBuilders) {\n extendIfDefined(meta, builder(meta));\n }\n\n const headers = {};\n for (const builder of headerBuilders) {\n extendIfDefined(headers, builder(headers));\n }\n\n return { meta, headers };\n }\n\n function immediateFlush() : void | ZalgoPromise {\n if (!isBrowser() || window.location.protocol === PROTOCOL.FILE || (!events.length && !tracking.length)) {\n if (__BEAVER_LOGGER__.__LITE_MODE__) {\n return;\n } else {\n return ZalgoPromise.resolve();\n }\n }\n\n const { meta, headers } = buildPayloads();\n const json = { events, meta, tracking };\n const method = 'POST';\n\n events = [];\n tracking = [];\n\n if (__BEAVER_LOGGER__.__LITE_MODE__) {\n simpleRequest({ method, url, headers, json });\n } else {\n return request({ method, url, headers, json }).then(noop);\n }\n }\n\n const flush = __BEAVER_LOGGER__.__LITE_MODE__\n ? immediateFlush\n : promiseDebounce(immediateFlush);\n\n function enqueue(level : $Values, event : string, payload : Payload) {\n events.push({\n level,\n event,\n payload\n });\n\n if (AUTO_FLUSH_LEVEL.indexOf(level) !== -1) {\n flush();\n }\n }\n\n function log(level : $Values, event : string, payload = {}) : LoggerType {\n if (!isBrowser()) {\n return logger; // eslint-disable-line no-use-before-define\n }\n\n if (prefix) {\n event = `${ prefix }_${ event }`;\n }\n\n const logPayload : Payload = {\n ...objFilter(payload),\n timestamp: Date.now().toString()\n };\n\n for (const builder of payloadBuilders) {\n extendIfDefined(logPayload, builder(logPayload));\n }\n\n enqueue(level, event, logPayload);\n print(level, event, logPayload);\n\n return logger; // eslint-disable-line no-use-before-define\n }\n\n function addBuilder(builders, builder) : LoggerType {\n builders.push(builder);\n return logger; // eslint-disable-line no-use-before-define\n }\n\n function addPayloadBuilder(builder) : LoggerType {\n return addBuilder(payloadBuilders, builder);\n }\n\n function addMetaBuilder(builder) : LoggerType {\n return addBuilder(metaBuilders, builder);\n }\n\n function addTrackingBuilder(builder) : LoggerType {\n return addBuilder(trackingBuilders, builder);\n }\n\n function addHeaderBuilder(builder) : LoggerType {\n return addBuilder(headerBuilders, builder);\n }\n\n function debug(event, payload) : LoggerType {\n return log(LOG_LEVEL.DEBUG, event, payload);\n }\n\n function info(event, payload) : LoggerType {\n return log(LOG_LEVEL.INFO, event, payload);\n }\n\n function warn(event, payload) : LoggerType {\n return log(LOG_LEVEL.WARN, event, payload);\n }\n\n function error(event, payload) : LoggerType {\n return log(LOG_LEVEL.ERROR, event, payload);\n }\n\n function track(payload = {}) : LoggerType {\n if (!isBrowser()) {\n return logger; // eslint-disable-line no-use-before-define\n }\n\n const trackingPayload : Payload = objFilter(payload);\n\n for (const builder of trackingBuilders) {\n extendIfDefined(trackingPayload, builder(trackingPayload));\n }\n\n print(LOG_LEVEL.DEBUG, 'track', trackingPayload);\n tracking.push(trackingPayload);\n\n return logger; // eslint-disable-line no-use-before-define\n }\n\n if (isBrowser()) {\n safeInterval(flush, flushInterval);\n }\n\n const logger = {\n debug,\n info,\n warn,\n error,\n track,\n flush,\n immediateFlush,\n addPayloadBuilder,\n addMetaBuilder,\n addTrackingBuilder,\n addHeaderBuilder\n };\n\n return logger;\n}\n","/* @flow */\n\ntype SimpleRequest = {|\n method? : string,\n url : string,\n headers : { [string] : string },\n json : Object\n|};\n\nexport function simpleRequest({ method = 'GET', url, headers, json } : SimpleRequest) {\n const req = new XMLHttpRequest();\n req.open(method, url);\n for (const header of Object.keys(headers)) {\n req.setRequestHeader(header, headers[header]);\n }\n req.send(JSON.stringify(json));\n}\n","/* @flow */\n\nexport * from './logger';\nexport * from './constants';\n"],"sourceRoot":""} \ No newline at end of file diff --git a/dist/beaver-logger.min.js.map b/dist/beaver-logger.min.js.map index 8dd3f9a..ac69652 100644 --- a/dist/beaver-logger.min.js.map +++ b/dist/beaver-logger.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack://beaver/webpack/universalModuleDefinition","webpack://beaver/webpack/bootstrap","webpack://beaver/./node_modules/@babel/runtime/helpers/esm/extends.js","webpack://beaver/./node_modules/zalgo-promise/src/utils.js","webpack://beaver/./node_modules/zalgo-promise/src/exceptions.js","webpack://beaver/./node_modules/zalgo-promise/src/flush.js","webpack://beaver/./node_modules/zalgo-promise/src/promise.js","webpack://beaver/./node_modules/cross-domain-utils/src/utils.js","webpack://beaver/./node_modules/cross-domain-utils/src/constants.js","webpack://beaver/./node_modules/cross-domain-safe-weakmap/src/util.js","webpack://beaver/./node_modules/cross-domain-safe-weakmap/src/weakmap.js","webpack://beaver/./node_modules/belter/src/util.js","webpack://beaver/./node_modules/cross-domain-safe-weakmap/src/native.js","webpack://beaver/./node_modules/belter/src/dom.js","webpack://beaver/./node_modules/belter/src/constants.js","webpack://beaver/./node_modules/belter/src/http.js","webpack://beaver/./src/constants.js","webpack://beaver/./src/config.js","webpack://beaver/./src/util.js","webpack://beaver/./src/http.js","webpack://beaver/./src/logger.js"],"names":["root","factory","exports","module","define","amd","self","this","installedModules","__webpack_require__","moduleId","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","hasOwnProperty","p","s","_extends","assign","target","arguments","length","source","apply","isPromise","item","Promise","window","Window","constructor","toString","then","err","flushPromise","dispatchedErrors","possiblyUnhandledPromiseHandlers","activeCount","flushActive","promise","resolve","startActive","endActive","ZalgoPromise","handler","resolved","rejected","errorHandled","error","handlers","dispatching","stack","result","isAsync","res","reject","Error","dispatch","setTimeout","indexOf","push","j","dispatchPossiblyUnhandledError","asyncReject","chain","firstPromise","secondPromise","onSuccess","onError","promiseResult","catch","undefined","finally","onFinally","try","timeout","time","clearTimeout","toPromise","TypeError","lazy","all","promises","count","results","slice","prom","hash","awaitPromises","map","items","method","onPossiblyUnhandledException","cancel","splice","context","args","delay","flush","IE_WIN_ACCESS_ERROR","getActualProtocol","win","location","protocol","getProtocol","mockDomain","split","isAboutProtocol","canReadFromWindow","getActualDomain","PROTOCOL","parent","getParent","host","getDomain","domain","isSameDomain","desc","getOwnPropertyDescriptor","isMockProtocol","isActuallySameDomain","iframeWindows","iframeFrames","isWindowClosed","allowMock","closed","message","mockclosed","top","iframeIndex","collection","safeIndexOf","frame","contentWindow","parentNode","doc","ownerDocument","documentElement","contains","isFrameWindowClosed","isWindow","obj","__cross_domain_utils_window_check__","objectIDs","CrossDomainSafeWeakMap","weakmap","keys","values","Math","random","WeakMap","freeze","testWeakMap","testKey","set","hasNativeWeakMap","_cleanupClosedWindows","delete","isSafeToReadWrite","entry","writable","index","has","getOrSet","getFunctionName","fn","__name__","displayName","setFunctionName","uniqueID","chars","replace","charAt","floor","str","btoa","encodeURIComponent","p1","String","fromCharCode","parseInt","Buffer","from","base64encode","Date","toISOString","toLowerCase","serializeArgs","JSON","stringify","Array","subkey","val","uid","getObjectID","element","passed","Element","nodeType","style","_","isElement","getEmptyObject","memoizeGlobalIndex","memoizeGlobalIndexValidFrom","memoize","options","simpleCache","thisCache","thisNamespace","cacheTime","memoizeIndex","memoizedFunction","cache","cacheKey","cacheResult","now","reset","noop","objFilter","filter","Boolean","isDocumentReady","document","body","readyState","isDocumentInteractive","isBrowser","clear","interval","setInterval","clearInterval","currentScript","getCurrentScript","getStackTrace","stackDetails","exec","scriptLocation","getElementsByTagName","reverse","script","src","inferCurrentScript","currentUID","getAttribute","ATTRIBUTES","hashedString","total","charCodeAt","abs","strHashStr","dataset","setAttribute","headerBuilders","LOG_LEVEL","DEBUG","INFO","WARN","ERROR","FILE","AUTO_FLUSH_LEVEL","LOG_LEVEL_PRIORITY","DEFAULT_LOG_LEVEL","canUseSendBeacon","headers","enableSendBeacon","hasHeaders","navigator","sendBeacon","Blob","isAmplitude","url","data","useBlob","json","blob","type","e","extendIfDefined","getHTTPTransport","httpWin","assertSameDomain","beaconResult","normalizedHeaders","builtHeaders","headerBuilder","xhr","XMLHttpRequest","addEventListener","responseHeaders","rawHeaders","trim","join","parseHeaders","getAllResponseHeaders","status","contentType","isJSON","responseBody","responseText","parse","evt","open","setRequestHeader","ontimeout","send","request","Logger","prefix","logLevel","transport","amplitudeApiKey","flushInterval","events","tracking","payloadBuilders","metaBuilders","trackingBuilders","print","level","event","payload","console","log","warning","immediateFlush","meta","builder","api_key","event_type","transition_name","event_properties","localPromise","logger","logPayload","timestamp","enqueue","addBuilder","builders","loop","safeInterval","debug","info","warn","track","trackingPayload","addPayloadBuilder","addMetaBuilder","addTrackingBuilder","addHeaderBuilder","setTransport","newTransport","configure","opts"],"mappings":"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","file":"beaver-logger.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"beaver\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"beaver\"] = factory();\n\telse\n\t\troot[\"beaver\"] = factory();\n})((typeof self !== 'undefined' ? self : this), function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 0);\n","export default function _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}","/* @flow */\n\nexport function isPromise(item : mixed) : boolean {\n try {\n if (!item) {\n return false;\n }\n\n if (typeof Promise !== 'undefined' && item instanceof Promise) {\n return true;\n }\n\n if (typeof window !== 'undefined' && typeof window.Window === 'function' && item instanceof window.Window) {\n return false;\n }\n\n if (typeof window !== 'undefined' && typeof window.constructor === 'function' && item instanceof window.constructor) {\n return false;\n }\n\n const toString = ({}).toString;\n\n if (toString) {\n const name = toString.call(item);\n\n if (name === '[object Window]' || name === '[object global]' || name === '[object DOMWindow]') {\n return false;\n }\n }\n\n if (typeof item.then === 'function') {\n return true;\n }\n } catch (err) {\n return false;\n }\n\n return false;\n}\n","/* @flow */\n\nimport type { ZalgoPromise } from './promise';\n\nconst dispatchedErrors = [];\nconst possiblyUnhandledPromiseHandlers : Array<(mixed, promise? : ZalgoPromise) => void> = [];\n\nexport function dispatchPossiblyUnhandledError(err : mixed, promise : ZalgoPromise) {\n\n if (dispatchedErrors.indexOf(err) !== -1) {\n return;\n }\n\n dispatchedErrors.push(err);\n\n setTimeout(() => {\n if (__DEBUG__) {\n // $FlowFixMe\n throw new Error(`${ err.stack || err.toString() }\\n\\nFrom promise:\\n\\n${ promise.stack }`);\n }\n\n throw err;\n }, 1);\n\n for (let j = 0; j < possiblyUnhandledPromiseHandlers.length; j++) {\n // $FlowFixMe\n possiblyUnhandledPromiseHandlers[j](err, promise);\n }\n}\n\nexport function onPossiblyUnhandledException(handler : (mixed, promise? : ZalgoPromise) => void) : {| cancel : () => void |} {\n possiblyUnhandledPromiseHandlers.push(handler);\n\n return {\n cancel() {\n possiblyUnhandledPromiseHandlers.splice(possiblyUnhandledPromiseHandlers.indexOf(handler), 1);\n }\n };\n}\n","/* @flow */\n\nimport type { ZalgoPromise } from './promise';\n\nlet activeCount = 0;\nlet flushPromise;\n\nfunction flushActive() {\n if (!activeCount && flushPromise) {\n const promise = flushPromise;\n flushPromise = null;\n promise.resolve();\n }\n}\n\nexport function startActive() {\n activeCount += 1;\n}\n\nexport function endActive() {\n activeCount -= 1;\n flushActive();\n}\n\nexport function awaitActive(Zalgo : Class>) : ZalgoPromise { // eslint-disable-line no-undef\n const promise = flushPromise = flushPromise || new Zalgo();\n flushActive();\n return promise;\n}\n","/* @flow */\n\nimport { isPromise } from './utils';\nimport { onPossiblyUnhandledException, dispatchPossiblyUnhandledError } from './exceptions';\nimport { startActive, endActive, awaitActive } from './flush';\n\nexport class ZalgoPromise {\n\n resolved : boolean\n rejected : boolean\n errorHandled : boolean\n value : R\n error : mixed\n // eslint-disable-next-line flowtype/no-mutable-array\n handlers : Array<{|\n promise : ZalgoPromise<*>,\n onSuccess : void | (result : R) => mixed,\n onError : void | (error : mixed) => mixed\n |}>\n dispatching : boolean\n stack : string\n\n constructor(handler : ?(resolve : (result : R) => void, reject : (error : mixed) => void) => void) {\n\n this.resolved = false;\n this.rejected = false;\n this.errorHandled = false;\n\n this.handlers = [];\n\n if (handler) {\n\n let result;\n let error;\n let resolved = false;\n let rejected = false;\n let isAsync = false;\n\n startActive();\n\n try {\n handler(res => {\n if (isAsync) {\n this.resolve(res);\n } else {\n resolved = true;\n result = res;\n }\n\n }, err => {\n if (isAsync) {\n this.reject(err);\n } else {\n rejected = true;\n error = err;\n }\n });\n\n } catch (err) {\n endActive();\n this.reject(err);\n return;\n }\n\n endActive();\n\n isAsync = true;\n\n if (resolved) {\n // $FlowFixMe\n this.resolve(result);\n } else if (rejected) {\n this.reject(error);\n }\n }\n\n if (__DEBUG__) {\n try {\n throw new Error(`ZalgoPromise`);\n } catch (err) {\n this.stack = err.stack;\n }\n }\n }\n\n resolve(result : R) : ZalgoPromise {\n if (this.resolved || this.rejected) {\n return this;\n }\n\n if (isPromise(result)) {\n throw new Error('Can not resolve promise with another promise');\n }\n\n this.resolved = true;\n this.value = result;\n this.dispatch();\n\n return this;\n }\n\n reject(error : mixed) : ZalgoPromise {\n if (this.resolved || this.rejected) {\n return this;\n }\n\n if (isPromise(error)) {\n throw new Error('Can not reject promise with another promise');\n }\n\n if (!error) {\n // $FlowFixMe\n const err = (error && typeof error.toString === 'function' ? error.toString() : Object.prototype.toString.call(error));\n error = new Error(`Expected reject to be called with Error, got ${ err }`);\n }\n\n this.rejected = true;\n this.error = error;\n\n if (!this.errorHandled) {\n setTimeout(() => {\n if (!this.errorHandled) {\n dispatchPossiblyUnhandledError(error, this);\n }\n }, 1);\n }\n\n this.dispatch();\n\n return this;\n }\n\n asyncReject(error : mixed) : ZalgoPromise {\n this.errorHandled = true;\n this.reject(error);\n return this;\n }\n \n dispatch() {\n\n const { dispatching, resolved, rejected, handlers } = this;\n\n if (dispatching) {\n return;\n }\n\n if (!resolved && !rejected) {\n return;\n }\n\n this.dispatching = true;\n startActive();\n\n const chain = (firstPromise : ZalgoPromise, secondPromise : ZalgoPromise) => {\n return firstPromise.then(res => {\n secondPromise.resolve(res);\n }, err => {\n secondPromise.reject(err);\n });\n };\n\n for (let i = 0; i < handlers.length; i++) {\n\n const { onSuccess, onError, promise } = handlers[i];\n\n let result;\n\n if (resolved) {\n\n try {\n result = onSuccess ? onSuccess(this.value) : this.value;\n } catch (err) {\n promise.reject(err);\n continue;\n }\n\n } else if (rejected) {\n\n if (!onError) {\n promise.reject(this.error);\n continue;\n }\n\n try {\n result = onError(this.error);\n } catch (err) {\n promise.reject(err);\n continue;\n }\n }\n\n if (result instanceof ZalgoPromise && (result.resolved || result.rejected)) {\n const promiseResult : ZalgoPromise<*> = result;\n\n if (promiseResult.resolved) {\n promise.resolve(promiseResult.value);\n } else {\n promise.reject(promiseResult.error);\n }\n\n promiseResult.errorHandled = true;\n\n } else if (isPromise(result)) {\n\n if (result instanceof ZalgoPromise && (result.resolved || result.rejected)) {\n if (result.resolved) {\n promise.resolve(result.value);\n } else {\n promise.reject(result.error);\n }\n\n } else {\n // $FlowFixMe\n chain(result, promise);\n }\n\n } else {\n\n promise.resolve(result);\n }\n }\n\n handlers.length = 0;\n this.dispatching = false;\n endActive();\n }\n\n then(onSuccess : void | (result : R) => (ZalgoPromise | Y), onError : void | (error : mixed) => (ZalgoPromise | Y)) : ZalgoPromise {\n\n if (onSuccess && typeof onSuccess !== 'function' && !onSuccess.call) {\n throw new Error('Promise.then expected a function for success handler');\n }\n\n if (onError && typeof onError !== 'function' && !onError.call) {\n throw new Error('Promise.then expected a function for error handler');\n }\n\n const promise = new ZalgoPromise();\n\n this.handlers.push({\n promise,\n onSuccess,\n onError\n });\n\n this.errorHandled = true;\n\n this.dispatch();\n\n return promise;\n }\n\n catch(onError : (error : mixed) => ZalgoPromise | Y) : ZalgoPromise {\n // $FlowFixMe incompatible-call\n const resultPromise : ZalgoPromise = this.then(undefined, onError);\n return resultPromise;\n }\n\n finally(onFinally : () => mixed) : ZalgoPromise {\n\n if (onFinally && typeof onFinally !== 'function' && !onFinally.call) {\n throw new Error('Promise.finally expected a function');\n }\n\n return this.then((result) => {\n return ZalgoPromise.try(onFinally)\n .then(() => {\n return result;\n });\n }, (err) => {\n return ZalgoPromise.try(onFinally)\n .then(() => {\n throw err;\n });\n });\n }\n\n timeout(time : number, err : ?Error) : ZalgoPromise {\n\n if (this.resolved || this.rejected) {\n return this;\n }\n\n const timeout = setTimeout(() => {\n\n if (this.resolved || this.rejected) {\n return;\n }\n\n this.reject(err || new Error(`Promise timed out after ${ time }ms`));\n\n }, time);\n\n return this.then(result => {\n clearTimeout(timeout);\n return result;\n });\n }\n\n // $FlowFixMe\n toPromise() : Promise {\n // $FlowFixMe\n if (typeof Promise === 'undefined') {\n throw new TypeError(`Could not find Promise`);\n }\n // $FlowFixMe\n return Promise.resolve(this); // eslint-disable-line compat/compat\n }\n\n lazy() : ZalgoPromise {\n this.errorHandled = true;\n return this;\n }\n\n static resolve(value : ZalgoPromise | Y) : ZalgoPromise {\n\n if (value instanceof ZalgoPromise) {\n // $FlowFixMe incompatible-type-arg\n const result : ZalgoPromise = value;\n return result;\n }\n\n if (isPromise(value)) {\n // $FlowFixMe\n return new ZalgoPromise((resolve, reject) => value.then(resolve, reject));\n }\n\n return new ZalgoPromise().resolve(value);\n }\n\n static reject(error : mixed) : ZalgoPromise {\n return new ZalgoPromise().reject(error);\n }\n\n static asyncReject(error : mixed) : ZalgoPromise {\n return new ZalgoPromise().asyncReject(error);\n }\n\n static all>(promises : X) : ZalgoPromise<$TupleMap(ZalgoPromise | Y) => Y>> { // eslint-disable-line no-undef\n\n const promise = new ZalgoPromise();\n let count = promises.length;\n // eslint-disable-next-line no-undef\n const results = ([] : $TupleMap(ZalgoPromise | Y) => Y>).slice();\n\n if (!count) {\n promise.resolve(results);\n return promise;\n }\n\n const chain = (i : number, firstPromise : ZalgoPromise, secondPromise : ZalgoPromise) => {\n return firstPromise.then(res => {\n results[i] = res;\n count -= 1;\n if (count === 0) {\n promise.resolve(results);\n }\n }, err => {\n secondPromise.reject(err);\n });\n };\n\n for (let i = 0; i < promises.length; i++) {\n const prom = promises[i];\n\n if (prom instanceof ZalgoPromise) {\n if (prom.resolved) {\n results[i] = prom.value;\n count -= 1;\n continue;\n }\n } else if (!isPromise(prom)) {\n results[i] = prom;\n count -= 1;\n continue;\n }\n\n chain(i, ZalgoPromise.resolve(prom), promise);\n }\n\n if (count === 0) {\n promise.resolve(results);\n }\n\n return promise;\n }\n\n static hash(promises : O) : ZalgoPromise<$ObjMap(ZalgoPromise | Y) => Y>> { // eslint-disable-line no-undef\n const result = {};\n const awaitPromises = [];\n\n for (const key in promises) {\n if (promises.hasOwnProperty(key)) {\n const value = promises[key];\n\n if (isPromise(value)) {\n awaitPromises.push(value.then(res => {\n result[key] = res;\n }));\n } else {\n result[key] = value;\n }\n }\n }\n \n return ZalgoPromise.all(awaitPromises).then(() => result);\n }\n\n static map(items : $ReadOnlyArray, method : (T) => (ZalgoPromise | X)) : ZalgoPromise<$ReadOnlyArray> {\n // $FlowFixMe\n return ZalgoPromise.all(items.map(method));\n }\n\n static onPossiblyUnhandledException(handler : (err : mixed) => void) : {| cancel : () => void |} {\n return onPossiblyUnhandledException(handler);\n }\n\n static try>(method : (...args : $ReadOnlyArray) => (ZalgoPromise | Y), context? : C, args? : A) : ZalgoPromise {\n\n if (method && typeof method !== 'function' && !method.call) {\n throw new Error('Promise.try expected a function');\n }\n\n let result : ZalgoPromise | Y;\n\n startActive();\n \n try {\n result = method.apply(context, args || []);\n } catch (err) {\n endActive();\n return ZalgoPromise.reject(err);\n }\n\n endActive();\n\n // $FlowFixMe incompatible-call\n const resultPromise = ZalgoPromise.resolve(result);\n\n return resultPromise;\n }\n\n static delay(delay : number) : ZalgoPromise {\n return new ZalgoPromise(resolve => {\n setTimeout(resolve, delay);\n });\n }\n\n static isPromise(value : mixed) : boolean {\n\n if (value && value instanceof ZalgoPromise) {\n return true;\n }\n\n return isPromise(value);\n }\n\n static flush() : ZalgoPromise {\n return awaitActive(ZalgoPromise);\n }\n}\n","/* @flow */\n/* eslint max-lines: 0 */\n\nimport { isRegex, noop } from './util';\nimport type { CrossDomainWindowType, SameDomainWindowType, DomainMatcher } from './types';\nimport { PROTOCOL, WILDCARD } from './constants';\n\nconst IE_WIN_ACCESS_ERROR = 'Call was rejected by callee.\\r\\n';\n\nexport function getActualProtocol(win : SameDomainWindowType = window) : ?string {\n return win.location.protocol;\n}\n\nexport function getProtocol(win : SameDomainWindowType = window) : ?string {\n if (win.mockDomain) {\n const protocol = win.mockDomain.split('//')[0];\n\n if (protocol) {\n return protocol;\n }\n }\n\n return getActualProtocol(win);\n}\n\nexport function isFileProtocol(win : SameDomainWindowType = window) : boolean {\n return getProtocol(win) === PROTOCOL.FILE;\n}\n\nexport function isAboutProtocol(win : SameDomainWindowType = window) : boolean {\n return getProtocol(win) === PROTOCOL.ABOUT;\n}\n\nexport function isMockProtocol(win : SameDomainWindowType = window) : boolean {\n return getProtocol(win) === PROTOCOL.MOCK;\n}\n\nexport function getParent(win? : CrossDomainWindowType = window) : ?CrossDomainWindowType {\n\n if (!win) {\n return;\n }\n\n try {\n if (win.parent && win.parent !== win) {\n return win.parent;\n }\n } catch (err) {\n // pass\n }\n}\n\nexport function getOpener(win? : CrossDomainWindowType = window) : ?CrossDomainWindowType {\n\n if (!win) {\n return;\n }\n\n // Make sure we're not actually an iframe which has had window.open() called on us\n if (getParent(win)) {\n return;\n }\n\n try {\n return win.opener;\n } catch (err) {\n // pass\n }\n}\n\nexport function canReadFromWindow(win : CrossDomainWindowType | SameDomainWindowType) : boolean {\n try {\n // $FlowFixMe\n noop(win && win.location && win.location.href);\n return true;\n } catch (err) {\n // pass\n }\n\n return false;\n}\n\nexport function getActualDomain(win? : SameDomainWindowType = window) : string {\n\n const location = win.location;\n\n if (!location) {\n throw new Error(`Can not read window location`);\n }\n\n const protocol = getActualProtocol(win);\n\n if (!protocol) {\n throw new Error(`Can not read window protocol`);\n }\n\n if (protocol === PROTOCOL.FILE) {\n return `${ PROTOCOL.FILE }//`;\n }\n\n if (protocol === PROTOCOL.ABOUT) {\n\n const parent = getParent(win);\n if (parent && canReadFromWindow(parent)) {\n // $FlowFixMe\n return getActualDomain(parent);\n }\n\n return `${ PROTOCOL.ABOUT }//`;\n }\n\n const host = location.host;\n\n if (!host) {\n throw new Error(`Can not read window host`);\n }\n\n return `${ protocol }//${ host }`;\n}\n\nexport function getDomain(win? : SameDomainWindowType = window) : string {\n\n const domain = getActualDomain(win);\n\n if (domain && win.mockDomain && win.mockDomain.indexOf(PROTOCOL.MOCK) === 0) {\n return win.mockDomain;\n }\n\n return domain;\n}\n\nexport function isBlankDomain(win : CrossDomainWindowType) : boolean {\n try {\n // $FlowFixMe\n if (!win.location.href) {\n return true;\n }\n\n if (win.location.href === 'about:blank') {\n return true;\n }\n } catch (err) {\n // pass\n }\n\n return false;\n}\n\nexport function isActuallySameDomain(win : CrossDomainWindowType) : boolean {\n\n try {\n if (win === window) {\n return true;\n }\n\n } catch (err) {\n // pass\n }\n\n try {\n const desc = Object.getOwnPropertyDescriptor(win, 'location');\n\n if (desc && desc.enumerable === false) {\n return false;\n }\n\n } catch (err) {\n // pass\n }\n\n try {\n // $FlowFixMe\n if (isAboutProtocol(win) && canReadFromWindow(win)) {\n return true;\n }\n } catch (err) {\n // pass\n }\n\n try {\n // $FlowFixMe\n if (isMockProtocol(win) && canReadFromWindow(win)) {\n return true;\n }\n } catch (err) {\n // pass\n }\n\n try {\n // $FlowFixMe\n if (getActualDomain(win) === getActualDomain(window)) {\n return true;\n }\n\n } catch (err) {\n // pass\n }\n\n return false;\n}\n\nexport function isSameDomain(win : CrossDomainWindowType | SameDomainWindowType) : boolean {\n\n if (!isActuallySameDomain(win)) {\n return false;\n }\n\n try {\n if (win === window) {\n return true;\n }\n \n // $FlowFixMe\n if (isAboutProtocol(win) && canReadFromWindow(win)) {\n return true;\n }\n\n // $FlowFixMe\n if (getDomain(window) === getDomain(win)) {\n return true;\n }\n\n } catch (err) {\n // pass\n }\n\n return false;\n}\n\n\nexport function assertSameDomain(win : CrossDomainWindowType | SameDomainWindowType) : SameDomainWindowType {\n if (!isSameDomain(win)) {\n throw new Error(`Expected window to be same domain`);\n }\n\n // $FlowFixMe\n return win;\n}\n\nexport function getParents(win : CrossDomainWindowType) : $ReadOnlyArray {\n\n const result = [];\n\n try {\n\n while (win.parent !== win) {\n result.push(win.parent);\n win = win.parent;\n }\n\n } catch (err) {\n // pass\n }\n\n return result;\n}\n\nexport function isAncestorParent(parent : CrossDomainWindowType, child : CrossDomainWindowType) : boolean {\n\n if (!parent || !child) {\n return false;\n }\n\n const childParent = getParent(child);\n\n if (childParent) {\n return childParent === parent;\n }\n\n if (getParents(child).indexOf(parent) !== -1) {\n return true;\n }\n\n return false;\n}\n\nexport function getFrames(win : CrossDomainWindowType) : $ReadOnlyArray {\n\n const result = [];\n\n let frames;\n\n try {\n frames = win.frames;\n } catch (err) {\n frames = win;\n }\n\n let len;\n\n try {\n len = frames.length;\n } catch (err) {\n // pass\n }\n\n if (len === 0) {\n return result;\n }\n\n if (len) {\n for (let i = 0; i < len; i++) {\n\n let frame;\n\n try {\n frame = frames[i];\n } catch (err) {\n continue;\n }\n\n result.push(frame);\n }\n\n return result;\n }\n\n for (let i = 0; i < 100; i++) {\n let frame;\n\n try {\n frame = frames[i];\n } catch (err) {\n return result;\n }\n\n if (!frame) {\n return result;\n }\n\n result.push(frame);\n }\n\n return result;\n}\n\n\nexport function getAllChildFrames(win : CrossDomainWindowType) : $ReadOnlyArray {\n\n const result = [];\n\n for (const frame of getFrames(win)) {\n result.push(frame);\n\n for (const childFrame of getAllChildFrames(frame)) {\n result.push(childFrame);\n }\n }\n\n return result;\n}\n\nexport function getTop(win? : CrossDomainWindowType = window) : ?CrossDomainWindowType {\n\n try {\n if (win.top) {\n return win.top;\n }\n } catch (err) {\n // pass\n }\n\n if (getParent(win) === win) {\n return win;\n }\n\n try {\n if (isAncestorParent(window, win) && window.top) {\n return window.top;\n }\n } catch (err) {\n // pass\n }\n\n try {\n if (isAncestorParent(win, window) && window.top) {\n return window.top;\n }\n } catch (err) {\n // pass\n }\n\n for (const frame of getAllChildFrames(win)) {\n try {\n if (frame.top) {\n return frame.top;\n }\n } catch (err) {\n // pass\n }\n\n if (getParent(frame) === frame) {\n return frame;\n }\n }\n}\n\nexport function getNextOpener(win? : CrossDomainWindowType = window) : ?CrossDomainWindowType {\n return getOpener(getTop(win) || win);\n}\n\nexport function getUltimateTop(win? : CrossDomainWindowType = window) : CrossDomainWindowType {\n const opener = getNextOpener(win);\n\n if (opener) {\n return getUltimateTop(opener);\n }\n\n return top;\n}\n\nexport function getAllFramesInWindow(win : CrossDomainWindowType) : $ReadOnlyArray {\n const top = getTop(win);\n\n if (!top) {\n throw new Error(`Can not determine top window`);\n }\n\n let result = [ ...getAllChildFrames(top), top ];\n\n // Win may be in shadow dom\n if (result.indexOf(win) === -1) {\n result = [ ...result, win, ...getAllChildFrames(win) ];\n }\n\n return result;\n}\n\nexport function getAllWindows(win? : CrossDomainWindowType = window) : $ReadOnlyArray {\n const frames = getAllFramesInWindow(win);\n const opener = getNextOpener(win);\n\n if (opener) {\n return [ ...getAllWindows(opener), ...frames ];\n } else {\n return frames;\n }\n}\n\nexport function isTop(win : CrossDomainWindowType) : boolean {\n return win === getTop(win);\n}\n\nexport function isFrameWindowClosed(frame : HTMLIFrameElement) : boolean {\n\n if (!frame.contentWindow) {\n return true;\n }\n\n if (!frame.parentNode) {\n return true;\n }\n\n const doc = frame.ownerDocument;\n\n if (doc && doc.documentElement && !doc.documentElement.contains(frame)) {\n let parent = frame;\n\n while (parent.parentNode && parent.parentNode !== parent) {\n parent = parent.parentNode;\n }\n\n // $FlowFixMe\n if (!parent.host || !doc.documentElement.contains(parent.host)) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction safeIndexOf(collection : $ReadOnlyArray, item : T) : number {\n for (let i = 0; i < collection.length; i++) {\n\n try {\n if (collection[i] === item) {\n return i;\n }\n } catch (err) {\n // pass\n }\n }\n\n return -1;\n}\n\nconst iframeWindows = [];\nconst iframeFrames = [];\n\nexport function isWindowClosed(win : CrossDomainWindowType, allowMock : boolean = true) : boolean {\n\n try {\n if (win === window) {\n return false;\n }\n } catch (err) {\n return true;\n }\n\n try {\n if (!win) {\n return true;\n }\n\n } catch (err) {\n return true;\n }\n\n try {\n if (win.closed) {\n return true;\n }\n\n } catch (err) {\n\n // I love you so much IE\n\n if (err && err.message === IE_WIN_ACCESS_ERROR) {\n return false;\n }\n\n return true;\n }\n\n\n if (allowMock && isSameDomain(win)) {\n try {\n // $FlowFixMe\n if (win.mockclosed) {\n return true;\n }\n } catch (err) {\n // pass\n }\n }\n\n // Mobile safari\n\n try {\n if (!win.parent || !win.top) {\n return true;\n }\n } catch (err) {\n // pass\n }\n\n // Yes, this actually happens in IE. win === win errors out when the window\n // is from an iframe, and the iframe was removed from the page.\n\n try {\n noop(win === win); // eslint-disable-line no-self-compare\n } catch (err) {\n return true;\n }\n\n // IE orphaned frame\n\n const iframeIndex = safeIndexOf(iframeWindows, win);\n\n if (iframeIndex !== -1) {\n const frame = iframeFrames[iframeIndex];\n\n if (frame && isFrameWindowClosed(frame)) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction cleanIframes() {\n for (let i = 0; i < iframeWindows.length; i++) {\n let closed = false;\n\n try {\n closed = iframeWindows[i].closed;\n } catch (err) {\n // pass\n }\n\n if (closed) {\n iframeFrames.splice(i, 1);\n iframeWindows.splice(i, 1);\n }\n }\n}\n\nexport function linkFrameWindow(frame : HTMLIFrameElement) {\n\n cleanIframes();\n\n if (frame && frame.contentWindow) {\n try {\n iframeWindows.push(frame.contentWindow);\n iframeFrames.push(frame);\n } catch (err) {\n // pass\n }\n }\n}\n\nexport function getUserAgent(win : ?SameDomainWindowType) : string {\n win = win || window;\n return win.navigator.mockUserAgent || win.navigator.userAgent;\n}\n\n\nexport function getFrameByName(win : CrossDomainWindowType, name : string) : ?CrossDomainWindowType {\n\n const winFrames = getFrames(win);\n\n for (const childFrame of winFrames) {\n try {\n // $FlowFixMe\n if (isSameDomain(childFrame) && childFrame.name === name && winFrames.indexOf(childFrame) !== -1) {\n return childFrame;\n }\n } catch (err) {\n // pass\n }\n }\n\n try {\n // $FlowFixMe\n if (winFrames.indexOf(win.frames[name]) !== -1) {\n // $FlowFixMe\n return win.frames[name];\n }\n } catch (err) {\n // pass\n }\n\n try {\n if (winFrames.indexOf(win[name]) !== -1) {\n return win[name];\n }\n } catch (err) {\n // pass\n }\n}\n\nexport function findChildFrameByName(win : CrossDomainWindowType, name : string) : ?CrossDomainWindowType {\n\n const frame = getFrameByName(win, name);\n\n if (frame) {\n return frame;\n }\n\n for (const childFrame of getFrames(win)) {\n const namedFrame = findChildFrameByName(childFrame, name);\n\n if (namedFrame) {\n return namedFrame;\n }\n }\n}\n\nexport function findFrameByName(win : CrossDomainWindowType, name : string) : ?CrossDomainWindowType {\n const frame = getFrameByName(win, name);\n\n if (frame) {\n return frame;\n }\n\n const top = getTop(win) || win;\n\n return findChildFrameByName(top, name);\n}\n\nexport function isParent(win : CrossDomainWindowType, frame : CrossDomainWindowType) : boolean {\n\n const frameParent = getParent(frame);\n\n if (frameParent) {\n return frameParent === win;\n }\n\n for (const childFrame of getFrames(win)) {\n if (childFrame === frame) {\n return true;\n }\n }\n\n return false;\n}\n\nexport function isOpener(parent : CrossDomainWindowType, child : CrossDomainWindowType) : boolean {\n\n return parent === getOpener(child);\n}\n\nexport function getAncestor(win? : CrossDomainWindowType = window) : ?CrossDomainWindowType {\n win = win || window;\n\n const opener = getOpener(win);\n\n if (opener) {\n return opener;\n }\n\n const parent = getParent(win);\n\n if (parent) {\n return parent;\n }\n}\n\nexport function getAncestors(win : CrossDomainWindowType) : $ReadOnlyArray {\n\n const results = [];\n\n let ancestor = win;\n\n while (ancestor) {\n ancestor = getAncestor(ancestor);\n if (ancestor) {\n results.push(ancestor);\n }\n }\n\n return results;\n}\n\n\nexport function isAncestor(parent : CrossDomainWindowType, child : CrossDomainWindowType) : boolean {\n\n const actualParent = getAncestor(child);\n\n if (actualParent) {\n if (actualParent === parent) {\n return true;\n }\n\n return false;\n }\n\n if (child === parent) {\n return false;\n }\n\n if (getTop(child) === child) {\n return false;\n }\n\n for (const frame of getFrames(parent)) {\n if (frame === child) {\n return true;\n }\n }\n\n return false;\n}\n\nexport function isPopup(win? : CrossDomainWindowType = window) : boolean {\n return Boolean(getOpener(win));\n}\n\nexport function isIframe(win? : CrossDomainWindowType = window) : boolean {\n return Boolean(getParent(win));\n}\n\nexport function isFullpage(win? : CrossDomainWindowType = window) : boolean {\n return Boolean(!isIframe(win) && !isPopup(win));\n}\n\nfunction anyMatch(collection1, collection2) : boolean {\n\n for (const item1 of collection1) {\n for (const item2 of collection2) {\n if (item1 === item2) {\n return true;\n }\n }\n }\n\n return false;\n}\n\nexport function getDistanceFromTop(win : CrossDomainWindowType = window) : number {\n let distance = 0;\n let parent = win;\n\n while (parent) {\n parent = getParent(parent);\n if (parent) {\n distance += 1;\n }\n }\n\n return distance;\n}\n\nexport function getNthParent(win : CrossDomainWindowType, n : number = 1) : ?CrossDomainWindowType {\n let parent = win;\n\n for (let i = 0; i < n; i++) {\n if (!parent) {\n return;\n }\n\n parent = getParent(parent);\n }\n\n return parent;\n}\n\nexport function getNthParentFromTop(win : CrossDomainWindowType, n : number = 1) : ?CrossDomainWindowType {\n return getNthParent(win, getDistanceFromTop(win) - n);\n}\n\nexport function isSameTopWindow(win1 : CrossDomainWindowType, win2 : CrossDomainWindowType) : boolean {\n\n const top1 = getTop(win1) || win1;\n const top2 = getTop(win2) || win2;\n\n try {\n if (top1 && top2) {\n if (top1 === top2) {\n return true;\n }\n\n return false;\n }\n } catch (err) {\n // pass\n }\n\n const allFrames1 = getAllFramesInWindow(win1);\n const allFrames2 = getAllFramesInWindow(win2);\n\n if (anyMatch(allFrames1, allFrames2)) {\n return true;\n }\n\n const opener1 = getOpener(top1);\n const opener2 = getOpener(top2);\n\n if (opener1 && anyMatch(getAllFramesInWindow(opener1), allFrames2)) {\n return false;\n }\n\n if (opener2 && anyMatch(getAllFramesInWindow(opener2), allFrames1)) {\n return false;\n }\n\n return false;\n}\n\nexport function matchDomain(pattern : DomainMatcher, origin : DomainMatcher) : boolean {\n\n if (typeof pattern === 'string') {\n\n if (typeof origin === 'string') {\n return pattern === WILDCARD || origin === pattern;\n }\n\n if (isRegex(origin)) {\n return false;\n }\n\n if (Array.isArray(origin)) {\n return false;\n }\n }\n\n if (isRegex(pattern)) {\n\n if (isRegex(origin)) {\n return pattern.toString() === origin.toString();\n }\n\n if (Array.isArray(origin)) {\n return false;\n }\n\n // $FlowFixMe\n return Boolean(origin.match(pattern));\n }\n\n if (Array.isArray(pattern)) {\n\n if (Array.isArray(origin)) {\n return JSON.stringify(pattern) === JSON.stringify(origin);\n }\n\n if (isRegex(origin)) {\n return false;\n }\n\n return pattern.some(subpattern => matchDomain(subpattern, origin));\n }\n\n return false;\n}\n\nexport function stringifyDomainPattern(pattern : DomainMatcher) : string {\n if (Array.isArray(pattern)) {\n return `(${ pattern.join(' | ') })`;\n } else if (isRegex(pattern)) {\n return `RegExp(${ pattern.toString() })`;\n } else {\n return pattern.toString();\n }\n}\n\nexport function getDomainFromUrl(url : string) : string {\n\n let domain;\n\n if (url.match(/^(https?|mock|file):\\/\\//)) {\n domain = url;\n } else {\n return getDomain();\n }\n\n domain = domain.split('/').slice(0, 3).join('/');\n\n return domain;\n}\n\nexport function onCloseWindow(win : CrossDomainWindowType, callback : Function, delay : number = 1000, maxtime : number = Infinity) : {| cancel : () => void |} {\n\n let timeout;\n\n const check = () => {\n\n if (isWindowClosed(win)) {\n\n if (timeout) {\n clearTimeout(timeout);\n }\n\n return callback();\n }\n\n if (maxtime <= 0) {\n clearTimeout(timeout);\n } else {\n maxtime -= delay;\n timeout = setTimeout(check, delay);\n }\n };\n\n check();\n\n return {\n cancel() {\n if (timeout) {\n clearTimeout(timeout);\n }\n }\n };\n}\n\n// eslint-disable-next-line complexity\nexport function isWindow(obj : Object) : boolean {\n\n try {\n if (obj === window) {\n return true;\n }\n } catch (err) {\n if (err && err.message === IE_WIN_ACCESS_ERROR) {\n return true;\n }\n }\n\n try {\n // $FlowFixMe method-unbinding\n if (Object.prototype.toString.call(obj) === '[object Window]') {\n return true;\n }\n } catch (err) {\n if (err && err.message === IE_WIN_ACCESS_ERROR) {\n return true;\n }\n }\n\n try {\n if (window.Window && obj instanceof window.Window) {\n return true;\n }\n } catch (err) {\n if (err && err.message === IE_WIN_ACCESS_ERROR) {\n return true;\n }\n }\n\n try {\n if (obj && obj.self === obj) {\n return true;\n }\n } catch (err) {\n if (err && err.message === IE_WIN_ACCESS_ERROR) {\n return true;\n }\n }\n\n try {\n if (obj && obj.parent === obj) {\n return true;\n }\n } catch (err) {\n if (err && err.message === IE_WIN_ACCESS_ERROR) {\n return true;\n }\n }\n\n try {\n if (obj && obj.top === obj) {\n return true;\n }\n } catch (err) {\n if (err && err.message === IE_WIN_ACCESS_ERROR) {\n return true;\n }\n }\n\n try {\n if (noop(obj === obj) === '__unlikely_value__') { // eslint-disable-line no-self-compare\n return false;\n }\n\n } catch (err) {\n return true;\n }\n\n try {\n if (obj && obj.__cross_domain_utils_window_check__ === '__unlikely_value__') {\n return false;\n }\n\n } catch (err) {\n return true;\n }\n\n try {\n if ('postMessage' in obj && 'self' in obj && 'location' in obj) {\n return true;\n }\n } catch (err) {\n // pass\n }\n\n return false;\n}\n\nexport function isBrowser() : boolean {\n return (typeof window !== 'undefined' && typeof window.location !== 'undefined');\n}\n\nexport function isCurrentDomain(domain : string) : boolean {\n if (!isBrowser()) {\n return false;\n }\n\n return (getDomain() === domain);\n}\n\nexport function isMockDomain(domain : string) : boolean {\n return domain.indexOf(PROTOCOL.MOCK) === 0;\n}\n\nexport function normalizeMockUrl(url : string) : string {\n if (!isMockDomain(getDomainFromUrl(url))) {\n return url;\n }\n\n if (!__TEST__) {\n throw new Error(`Mock urls not supported out of test mode`);\n }\n\n return url.replace(/^mock:\\/\\/[^/]+/, getActualDomain(window));\n}\n\nexport function getFrameForWindow(win : CrossDomainWindowType) : ?HTMLElement {\n if (isSameDomain(win)) {\n return assertSameDomain(win).frameElement;\n }\n\n for (const frame of document.querySelectorAll('iframe')) {\n if (frame && frame.contentWindow && frame.contentWindow === win) {\n return frame;\n }\n }\n}\n\nexport function closeWindow(win : CrossDomainWindowType) {\n if (isIframe(win)) {\n const frame = getFrameForWindow(win);\n if (frame && frame.parentElement) {\n frame.parentElement.removeChild(frame);\n return;\n }\n }\n\n try {\n win.close();\n } catch (err) {\n // pass\n }\n}\n","/* @flow */\n\nexport const PROTOCOL = {\n MOCK: ('mock:' : 'mock:'),\n FILE: ('file:' : 'file:'),\n ABOUT: ('about:' : 'about:')\n};\n\nexport const WILDCARD = '*';\n\nexport const WINDOW_TYPE = {\n IFRAME: ('iframe' : 'iframe'),\n POPUP: ('popup' : 'popup')\n};\n","/* @flow */\n\nexport function safeIndexOf(collection : $ReadOnlyArray, item : T) : number {\n for (let i = 0; i < collection.length; i++) {\n\n try {\n if (collection[i] === item) {\n return i;\n }\n } catch (err) {\n // pass\n }\n }\n\n return -1;\n}\n\n// eslint-disable-next-line no-unused-vars\nexport function noop(...args : $ReadOnlyArray) {\n // pass\n}\n","/* @flow */\n\nimport { isWindow, isWindowClosed } from 'cross-domain-utils/src';\n\nimport { hasNativeWeakMap } from './native';\nimport { noop, safeIndexOf } from './util';\n\nexport class CrossDomainSafeWeakMap {\n\n name : string\n weakmap : ?WeakMap\n // eslint-disable-next-line flowtype/no-mutable-array\n keys : Array\n // eslint-disable-next-line flowtype/no-mutable-array\n values : Array\n\n constructor() {\n // eslint-disable-next-line no-bitwise\n this.name = `__weakmap_${ Math.random() * 1e9 >>> 0 }__`;\n\n if (hasNativeWeakMap()) {\n try {\n this.weakmap = new WeakMap();\n } catch (err) {\n // pass\n }\n }\n\n this.keys = [];\n this.values = [];\n }\n\n _cleanupClosedWindows() {\n\n const weakmap = this.weakmap;\n const keys = this.keys;\n\n for (let i = 0; i < keys.length; i++) {\n const value = keys[i];\n\n if (isWindow(value) && isWindowClosed(value)) {\n\n if (weakmap) {\n try {\n weakmap.delete(value);\n } catch (err) {\n // pass\n }\n }\n\n keys.splice(i, 1);\n this.values.splice(i, 1);\n\n i -= 1;\n }\n }\n }\n\n isSafeToReadWrite(key : K) : boolean {\n\n if (isWindow(key)) {\n return false;\n }\n\n try {\n noop(key && key.self);\n noop(key && key[this.name]);\n } catch (err) {\n return false;\n }\n\n return true;\n }\n\n set(key : K, value : V) {\n\n if (!key) {\n throw new Error(`WeakMap expected key`);\n }\n\n const weakmap = this.weakmap;\n\n if (weakmap) {\n try {\n weakmap.set(key, value);\n } catch (err) {\n delete this.weakmap;\n }\n }\n\n if (this.isSafeToReadWrite(key)) {\n try {\n const name = this.name;\n const entry = key[name];\n\n if (entry && entry[0] === key) {\n entry[1] = value;\n } else {\n Object.defineProperty(key, name, {\n value: [ key, value ],\n writable: true\n });\n }\n\n return;\n\n } catch (err) {\n // pass\n }\n }\n\n this._cleanupClosedWindows();\n\n const keys = this.keys;\n const values = this.values;\n const index = safeIndexOf(keys, key);\n\n if (index === -1) {\n keys.push(key);\n values.push(value);\n } else {\n values[index] = value;\n }\n }\n\n get(key : K) : V | void {\n\n if (!key) {\n throw new Error(`WeakMap expected key`);\n }\n\n const weakmap = this.weakmap;\n\n if (weakmap) {\n try {\n if (weakmap.has(key)) {\n return weakmap.get(key);\n }\n \n } catch (err) {\n delete this.weakmap;\n }\n }\n\n if (this.isSafeToReadWrite(key)) {\n try {\n const entry = key[this.name];\n\n if (entry && entry[0] === key) {\n return entry[1];\n }\n\n return;\n } catch (err) {\n // pass\n }\n }\n\n this._cleanupClosedWindows();\n\n const keys = this.keys;\n const index = safeIndexOf(keys, key);\n\n if (index === -1) {\n return;\n }\n\n return this.values[index];\n }\n\n delete(key : K) {\n\n if (!key) {\n throw new Error(`WeakMap expected key`);\n }\n\n const weakmap = this.weakmap;\n\n if (weakmap) {\n try {\n weakmap.delete(key);\n } catch (err) {\n delete this.weakmap;\n }\n }\n\n if (this.isSafeToReadWrite(key)) {\n try {\n const entry = key[this.name];\n\n if (entry && entry[0] === key) {\n entry[0] = entry[1] = undefined;\n }\n } catch (err) {\n // pass\n }\n }\n\n this._cleanupClosedWindows();\n\n const keys = this.keys;\n const index = safeIndexOf(keys, key);\n\n if (index !== -1) {\n keys.splice(index, 1);\n this.values.splice(index, 1);\n }\n }\n\n has(key : K) : boolean {\n\n if (!key) {\n throw new Error(`WeakMap expected key`);\n }\n\n const weakmap = this.weakmap;\n\n if (weakmap) {\n try {\n if (weakmap.has(key)) {\n return true;\n }\n } catch (err) {\n delete this.weakmap;\n }\n }\n\n if (this.isSafeToReadWrite(key)) {\n try {\n const entry = key[this.name];\n\n if (entry && entry[0] === key) {\n return true;\n }\n\n return false;\n } catch (err) {\n // pass\n }\n }\n\n this._cleanupClosedWindows();\n\n const index = safeIndexOf(this.keys, key);\n return index !== -1;\n }\n\n getOrSet(key : K, getter : () => V) : V {\n if (this.has(key)) {\n // $FlowFixMe\n return this.get(key);\n }\n\n const value = getter();\n this.set(key, value);\n return value;\n }\n}\n","\n/* @flow */\n/* eslint max-lines: 0 */\n\nimport { ZalgoPromise } from 'zalgo-promise/src';\nimport { WeakMap } from 'cross-domain-safe-weakmap/src';\n\nimport type { CancelableType } from './types';\n\nexport function isElement(element : mixed) : boolean {\n let passed = false;\n\n try {\n if (element instanceof window.Element) {\n passed = true;\n } else if (element !== null && typeof element === 'object' && element.nodeType === 1 && typeof element.style === 'object' && typeof element.ownerDocument === 'object') {\n passed = true;\n }\n } catch (_) {\n // we don't have an element\n }\n\n return passed;\n}\n\nexport function getFunctionName (fn : T) : string {\n return fn.name || fn.__name__ || fn.displayName || 'anonymous';\n}\n\nexport function setFunctionName (fn : T, name : string) : T {\n try {\n delete fn.name;\n fn.name = name;\n } catch (err) {\n // pass\n }\n\n fn.__name__ = fn.displayName = name;\n return fn;\n}\n\nexport function base64encode(str : string) : string {\n if (typeof btoa === 'function') {\n return btoa(encodeURIComponent(str).replace(/%([0-9A-F]{2})/g, (m, p1) => {\n return String.fromCharCode(parseInt(p1, 16));\n })).replace(/[=]/g, '');\n }\n\n if (typeof Buffer !== 'undefined') {\n return Buffer.from(str, 'utf8').toString('base64').replace(/[=]/g, '');\n }\n\n throw new Error(`Can not find window.btoa or Buffer`);\n}\n\nexport function base64decode(str : string) : string {\n if (typeof atob === 'function') {\n // $FlowFixMe[method-unbinding]\n return decodeURIComponent(Array.prototype.map.call(atob(str), c => {\n // eslint-disable-next-line prefer-template\n return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);\n }).join(''));\n }\n\n if (typeof Buffer !== 'undefined') {\n return Buffer.from(str, 'base64').toString('utf8');\n }\n\n throw new Error(`Can not find window.atob or Buffer`);\n}\n\nexport function uniqueID() : string {\n\n const chars = '0123456789abcdef';\n\n const randomID = 'xxxxxxxxxx'.replace(/./g, () => {\n return chars.charAt(Math.floor(Math.random() * chars.length));\n });\n\n const timeID = base64encode(\n new Date().toISOString().slice(11, 19).replace('T', '.')\n ).replace(/[^a-zA-Z0-9]/g, '').toLowerCase();\n\n return `uid_${ randomID }_${ timeID }`;\n}\n\nexport function getGlobal() : Object {\n if (typeof window !== 'undefined') {\n return window;\n }\n if (typeof global !== 'undefined') {\n return global;\n }\n if (typeof __GLOBAL__ !== 'undefined') {\n return __GLOBAL__;\n }\n throw new Error(`No global found`);\n}\n\nlet objectIDs;\n\nexport function getObjectID(obj : Object) : string {\n\n objectIDs = objectIDs || new WeakMap();\n\n if (obj === null || obj === undefined || (typeof obj !== 'object' && typeof obj !== 'function')) {\n throw new Error(`Invalid object`);\n }\n\n let uid = objectIDs.get(obj);\n\n if (!uid) {\n uid = `${ typeof obj }:${ uniqueID() }`;\n objectIDs.set(obj, uid);\n }\n\n return uid;\n}\n\nfunction serializeArgs(args : $ReadOnlyArray) : string {\n try {\n // $FlowFixMe[method-unbinding]\n return JSON.stringify(Array.prototype.slice.call(args), (subkey, val) => {\n\n // Treat each distinct function as unique for purposes of memoization\n // e.g. even if someFunction.stringify() is the same, we may use a different memoize cache\n // if the actual function is different.\n if (typeof val === 'function') {\n return `memoize[${ getObjectID(val) }]`;\n }\n\n // By default JSON.stringify(domElement) returns '{}'. This ensures that stays true even for non-standard\n // elements (e.g. React-rendered dom elements) with custom properties\n if (isElement(val)) {\n return {};\n }\n\n return val;\n });\n } catch (err) {\n throw new Error(`Arguments not serializable -- can not be used to memoize`);\n }\n}\n\nexport function getEmptyObject() : {||} {\n // $FlowFixMe\n return {};\n}\n\ntype MemoizeOptions = {|\n name? : string,\n time? : number,\n thisNamespace? : boolean\n|};\n\nconst getDefaultMemoizeOptions = () : MemoizeOptions => {\n // $FlowFixMe\n return {};\n};\n\nexport type Memoized = F & {| reset : () => void |};\n\nlet memoizeGlobalIndex = 0;\nlet memoizeGlobalIndexValidFrom = 0;\n\nexport function memoize(method : F, options? : MemoizeOptions = getDefaultMemoizeOptions()) : Memoized {\n const { thisNamespace = false, time: cacheTime } = options;\n\n let simpleCache;\n let thisCache;\n\n let memoizeIndex = memoizeGlobalIndex;\n memoizeGlobalIndex += 1;\n\n const memoizedFunction = function memoizedFunction(...args) : mixed {\n if (memoizeIndex < memoizeGlobalIndexValidFrom) {\n simpleCache = null;\n thisCache = null;\n memoizeIndex = memoizeGlobalIndex;\n memoizeGlobalIndex += 1;\n }\n\n let cache;\n\n if (thisNamespace) {\n thisCache = thisCache || new WeakMap();\n cache = thisCache.getOrSet(this, getEmptyObject);\n } else {\n cache = simpleCache = simpleCache || {};\n }\n\n let cacheKey;\n\n try {\n cacheKey = serializeArgs(args);\n } catch {\n return method.apply(this, arguments);\n }\n\n let cacheResult = cache[cacheKey];\n\n if (cacheResult && cacheTime && (Date.now() - cacheResult.time) < cacheTime) {\n delete cache[cacheKey];\n cacheResult = null;\n }\n\n if (cacheResult) {\n return cacheResult.value;\n }\n\n const time = Date.now();\n const value = method.apply(this, arguments);\n\n cache[cacheKey] = { time, value };\n\n return value;\n };\n\n memoizedFunction.reset = () => {\n simpleCache = null;\n thisCache = null;\n };\n\n // $FlowFixMe\n const result : F = memoizedFunction;\n\n return setFunctionName(result, `${ options.name || getFunctionName(method) }::memoized`);\n}\n\nmemoize.clear = () => {\n memoizeGlobalIndexValidFrom = memoizeGlobalIndex;\n};\n\nexport function promiseIdentity(item : ZalgoPromise | T) : ZalgoPromise {\n // $FlowFixMe\n return ZalgoPromise.resolve(item);\n}\n\n// eslint-disable-next-line flowtype/no-weak-types\nexport function memoizePromise(method : (...args : $ReadOnlyArray) => ZalgoPromise) : ((...args : $ReadOnlyArray) => ZalgoPromise) {\n let cache = {};\n\n // eslint-disable-next-line flowtype/no-weak-types\n function memoizedPromiseFunction(...args : $ReadOnlyArray) : ZalgoPromise {\n const key : string = serializeArgs(args);\n\n if (cache.hasOwnProperty(key)) {\n return cache[key];\n }\n\n cache[key] = ZalgoPromise.try(() => method.apply(this, arguments))\n .finally(() => {\n delete cache[key];\n });\n\n return cache[key];\n }\n\n memoizedPromiseFunction.reset = () => {\n cache = {};\n };\n\n return setFunctionName(memoizedPromiseFunction, `${ getFunctionName(method) }::promiseMemoized`);\n}\n\ntype PromisifyOptions = {|\n name ? : string\n|};\n\nconst getDefaultPromisifyOptions = () : PromisifyOptions => {\n // $FlowFixMe\n return {};\n};\n\n// eslint-disable-next-line flowtype/no-weak-types\nexport function promisify(method : (...args : $ReadOnlyArray) => R, options : PromisifyOptions = getDefaultPromisifyOptions()) : ((...args : $ReadOnlyArray) => ZalgoPromise) {\n function promisifiedFunction() : ZalgoPromise {\n return ZalgoPromise.try(method, this, arguments);\n }\n\n if (options.name) {\n promisifiedFunction.displayName = `${ options.name }:promisified`;\n }\n\n return setFunctionName(promisifiedFunction, `${ getFunctionName(method) }::promisified`);\n}\n\n// eslint-disable-next-line flowtype/no-weak-types\nexport function inlineMemoize(method : (...args : $ReadOnlyArray) => R, logic : (...args : $ReadOnlyArray) => R, args : $ReadOnlyArray = []) : R {\n // $FlowFixMe\n const cache : {| [string] : R |} = method.__inline_memoize_cache__ = method.__inline_memoize_cache__ || {};\n const key = serializeArgs(args);\n\n if (cache.hasOwnProperty(key)) {\n return cache[key];\n }\n\n const result = cache[key] = logic(...args);\n\n return result;\n}\n\n// eslint-disable-next-line no-unused-vars\nexport function noop(...args : $ReadOnlyArray) {\n // pass\n}\n\nexport function once(method : Function) : Function {\n let called = false;\n\n const onceFunction = function() : mixed {\n if (!called) {\n called = true;\n return method.apply(this, arguments);\n }\n };\n\n return setFunctionName(onceFunction, `${ getFunctionName(method) }::once`);\n}\n\nexport function hashStr(str : string) : number {\n let hash = 0;\n for (let i = 0; i < str.length; i++) {\n hash += str[i].charCodeAt(0) * Math.pow((i % 10) + 1, 5);\n }\n return Math.floor(Math.pow(Math.sqrt(hash), 5));\n}\n\nexport function strHashStr(str : string) : string {\n let hash = '';\n\n for (let i = 0; i < str.length; i++) {\n let total = (str[i].charCodeAt(0) * i);\n\n if (str[i + 1]) {\n total += (str[i + 1].charCodeAt(0) * (i - 1));\n }\n\n hash += String.fromCharCode(97 + (Math.abs(total) % 26));\n }\n\n return hash;\n}\n\nexport function match(str : string, pattern : RegExp) : ?string {\n const regmatch = str.match(pattern);\n if (regmatch) {\n return regmatch[1];\n }\n}\n\nexport function awaitKey(obj : Object, key : string) : ZalgoPromise {\n return new ZalgoPromise(resolve => {\n\n let value = obj[key];\n\n if (value) {\n return resolve(value);\n }\n\n delete obj[key];\n\n Object.defineProperty(obj, key, {\n\n configurable: true,\n\n set(item) {\n value = item;\n\n if (value) {\n resolve(value);\n }\n },\n\n get() : T {\n return value;\n }\n });\n });\n}\n\nexport function stringifyError(err : mixed, level : number = 1) : string {\n\n if (level >= 3) {\n return 'stringifyError stack overflow';\n }\n\n try {\n if (!err) {\n // $FlowFixMe[method-unbinding]\n return ``;\n }\n\n if (typeof err === 'string') {\n return err;\n }\n\n if (err instanceof Error) {\n const stack = err && err.stack;\n const message = err && err.message;\n\n if (stack && message) {\n if (stack.indexOf(message) !== -1) {\n return stack;\n } else {\n return `${ message }\\n${ stack }`;\n }\n } else if (stack) {\n return stack;\n } else if (message) {\n return message;\n }\n }\n\n if (err && err.toString && typeof err.toString === 'function') {\n // $FlowFixMe\n return err.toString();\n }\n\n // $FlowFixMe[method-unbinding]\n return Object.prototype.toString.call(err);\n\n } catch (newErr) {\n return `Error while stringifying error: ${ stringifyError(newErr, level + 1) }`;\n }\n}\n\nexport function stringifyErrorMessage(err : mixed) : string {\n\n // $FlowFixMe[method-unbinding]\n const defaultMessage = ``;\n\n if (!err) {\n return defaultMessage;\n }\n\n if (err instanceof Error) {\n return err.message || defaultMessage;\n }\n\n if (typeof err.message === 'string') {\n return err.message || defaultMessage;\n }\n\n return defaultMessage;\n}\n\nexport function stringify(item : mixed) : string {\n if (typeof item === 'string') {\n return item;\n }\n\n if (item && item.toString && typeof item.toString === 'function') {\n // $FlowFixMe\n return item.toString();\n }\n\n // $FlowFixMe[method-unbinding]\n return Object.prototype.toString.call(item);\n}\n\nexport function domainMatches(hostname : string, domain : string) : boolean {\n hostname = hostname.split('://')[1];\n const index = hostname.indexOf(domain);\n return (index !== -1 && hostname.slice(index) === domain);\n}\n\nexport function patchMethod(obj : Object, name : string, handler : Function) {\n const original = obj[name];\n\n obj[name] = function patchedMethod() : mixed {\n return handler({\n context: this,\n // $FlowFixMe[method-unbinding]\n args: Array.prototype.slice.call(arguments),\n original,\n callOriginal: () => original.apply(this, arguments)\n });\n };\n}\n\nexport function extend(obj : T, source : Object) : T {\n if (!source) {\n return obj;\n }\n\n if (Object.assign) {\n return Object.assign(obj, source);\n }\n\n for (const key in source) {\n if (source.hasOwnProperty(key)) {\n obj[key] = source[key];\n }\n }\n\n return obj;\n}\n\nexport function values(obj : { [string] : T }) : $ReadOnlyArray {\n if (Object.values) {\n // $FlowFixMe\n return Object.values(obj);\n }\n\n const result : Array = [];\n for (const key in obj) {\n if (obj.hasOwnProperty(key)) {\n // $FlowFixMe[escaped-generic]\n result.push(obj[key]);\n }\n }\n\n // $FlowFixMe\n return result;\n}\n\n// eslint-disable-next-line no-undef\nexport const memoizedValues : ({ [string] : T }) => $ReadOnlyArray = memoize(values);\n\nexport function perc(pixels : number, percentage : number) : number {\n return Math.round((pixels * percentage) / 100);\n}\n\nexport function min(...args : $ReadOnlyArray) : number {\n return Math.min(...args);\n}\n\nexport function max(...args : $ReadOnlyArray) : number {\n return Math.max(...args);\n}\n\nexport function roundUp(num : number, nearest : number) : number {\n const remainder = num % nearest;\n return remainder\n ? (num - remainder) + nearest\n : num;\n}\n\nexport function regexMap(str : string, regexp : RegExp, handler : () => T) : $ReadOnlyArray {\n const results = [];\n\n // $FlowFixMe\n str.replace(regexp, function regexMapMatcher(item) {\n results.push(handler ? handler.apply(null, arguments) : item);\n });\n\n // $FlowFixMe\n return results;\n}\n\nexport function svgToBase64(svg : string) : string {\n return `data:image/svg+xml;base64,${ base64encode(svg) }`;\n}\n\nexport function objFilter(obj : { [string] : T }, filter? : (T, ?string) => mixed = Boolean) : { [string] : R } {\n const result = {};\n\n for (const key in obj) {\n if (!obj.hasOwnProperty(key) || !filter(obj[key], key)) {\n continue;\n }\n\n result[key] = obj[key];\n }\n\n return result;\n}\n\nexport function identity (item : T) : T {\n return item;\n}\n\nexport function regexTokenize(text : string, regexp : RegExp) : $ReadOnlyArray {\n const result = [];\n text.replace(regexp, token => {\n result.push(token);\n return '';\n });\n return result;\n}\n\nexport function promiseDebounce(method : () => ZalgoPromise | T, delay : number = 50) : () => ZalgoPromise {\n\n let promise;\n let timeout;\n\n const promiseDebounced = function() : ZalgoPromise {\n if (timeout) {\n clearTimeout(timeout);\n }\n\n const localPromise = promise = promise || new ZalgoPromise();\n\n timeout = setTimeout(() => {\n promise = null;\n timeout = null;\n\n ZalgoPromise.try(method).then(\n result => { localPromise.resolve(result); },\n err => { localPromise.reject(err); }\n );\n }, delay);\n\n return localPromise;\n };\n\n return setFunctionName(promiseDebounced, `${ getFunctionName(method) }::promiseDebounced`);\n}\n\nexport function safeInterval(method : Function, time : number) : {| cancel : () => void |} {\n\n let timeout;\n\n function loop() {\n timeout = setTimeout(() => {\n method();\n loop();\n }, time);\n }\n\n loop();\n\n return {\n cancel() {\n clearTimeout(timeout);\n }\n };\n}\n\nexport function isInteger(str : string) : boolean {\n return Boolean(str.match(/^[0-9]+$/));\n}\n\nexport function isFloat(str : string) : boolean {\n return Boolean(str.match(/^[0-9]+\\.[0-9]+$/));\n}\n\nexport function serializePrimitive(value : string | number | boolean) : string {\n return value.toString();\n}\n\nexport function deserializePrimitive(value : string) : string | number | boolean {\n if (value === 'true') {\n return true;\n } else if (value === 'false') {\n return false;\n } else if (isInteger(value)) {\n return parseInt(value, 10);\n } else if (isFloat(value)) {\n return parseFloat(value);\n } else {\n return value;\n }\n}\n\nexport function dotify(obj : Object, prefix : string = '', newobj : Object = {}) : { [string] : string } {\n prefix = prefix ? `${ prefix }.` : prefix;\n for (const key in obj) {\n if (!obj.hasOwnProperty(key) || obj[key] === undefined || obj[key] === null || typeof obj[key] === 'function') {\n continue;\n } else if (obj[key] && Array.isArray(obj[key]) && obj[key].length && obj[key].every(val => typeof val !== 'object')) {\n newobj[`${ prefix }${ key }[]`] = obj[key].join(',');\n } else if (obj[key] && typeof obj[key] === 'object') {\n newobj = dotify(obj[key], `${ prefix }${ key }`, newobj);\n } else {\n newobj[`${ prefix }${ key }`] = serializePrimitive(obj[key]);\n }\n }\n return newobj;\n}\n\nexport function undotify(obj : { [string] : string }) : Object {\n\n const result = {};\n\n for (let key in obj) {\n if (!obj.hasOwnProperty(key) || typeof obj[key] !== 'string') {\n continue;\n }\n\n let value = obj[key];\n\n if (key.match(/^.+\\[\\]$/)) {\n key = key.slice(0, -2);\n value = value.split(',').map(deserializePrimitive);\n } else {\n value = deserializePrimitive(value);\n }\n\n let keyResult = result;\n const parts = key.split('.');\n for (let i = 0; i < parts.length; i++) {\n const part = parts[i];\n const isLast = (i + 1 === parts.length);\n const isIndex = !isLast && isInteger(parts[i + 1]);\n\n if (part === 'constructor' || part === 'prototype' || part === '__proto__') {\n throw new Error(`Disallowed key: ${ part }`);\n }\n\n if (isLast) {\n // $FlowFixMe\n keyResult[part] = value;\n } else {\n // $FlowFixMe\n keyResult = keyResult[part] = keyResult[part] || (isIndex ? [] : {});\n }\n }\n }\n\n return result;\n}\n\nexport type EventEmitterType = {|\n on : (eventName : string, handler : Function) => CancelableType,\n once : (eventName : string, handler : Function) => CancelableType,\n trigger : (eventName : string, ...args : $ReadOnlyArray) => ZalgoPromise,\n triggerOnce : (eventName : string, ...args : $ReadOnlyArray) => ZalgoPromise,\n reset : () => void\n|};\n\nexport function eventEmitter() : EventEmitterType {\n const triggered = {};\n let handlers = {};\n\n const emitter = {\n\n on(eventName : string, handler : Function) : CancelableType {\n const handlerList = handlers[eventName] = handlers[eventName] || [];\n\n handlerList.push(handler);\n\n let cancelled = false;\n\n return {\n cancel() {\n if (!cancelled) {\n cancelled = true;\n handlerList.splice(handlerList.indexOf(handler), 1);\n }\n\n }\n };\n },\n\n once(eventName : string, handler : Function) : CancelableType {\n\n const listener = emitter.on(eventName, () => {\n listener.cancel();\n handler();\n });\n\n return listener;\n },\n\n trigger(eventName : string, ...args : $ReadOnlyArray) : ZalgoPromise {\n\n const handlerList = handlers[eventName];\n const promises = [];\n\n if (handlerList) {\n for (const handler of handlerList) {\n promises.push(ZalgoPromise.try(() => handler(...args)));\n }\n }\n\n return ZalgoPromise.all(promises).then(noop);\n },\n\n triggerOnce(eventName : string, ...args : $ReadOnlyArray) : ZalgoPromise {\n\n if (triggered[eventName]) {\n return ZalgoPromise.resolve();\n }\n\n triggered[eventName] = true;\n return emitter.trigger(eventName, ...args);\n },\n\n reset() {\n handlers = {};\n }\n };\n\n return emitter;\n}\n\nexport function camelToDasherize(string : string) : string {\n return string.replace(/([A-Z])/g, (g) => {\n return `-${ g.toLowerCase() }`;\n });\n}\n\nexport function dasherizeToCamel(string : string) : string {\n return string.replace(/-([a-z])/g, (g) => {\n return g[1].toUpperCase();\n });\n}\n\nexport function capitalizeFirstLetter(string : string) : string {\n return string.charAt(0).toUpperCase() + string.slice(1).toLowerCase();\n}\n\nexport function get(item : Object, path : string, def : mixed) : mixed {\n\n if (!path) {\n return def;\n }\n\n const pathParts = path.split('.');\n\n // Loop through each section of our key path\n\n for (let i = 0; i < pathParts.length; i++) {\n\n // If we have an object, we can get the key\n if (typeof item === 'object' && item !== null) {\n item = item[pathParts[i]];\n\n // Otherwise, we should return the default (undefined if not provided)\n } else {\n return def;\n }\n }\n\n // If our final result is undefined, we should return the default\n\n return item === undefined ? def : item;\n}\n\nexport function safeTimeout(method : Function, time : number) {\n\n const interval = safeInterval(() => {\n time -= 100;\n if (time <= 0) {\n interval.cancel();\n method();\n }\n }, 100);\n}\n\nexport function defineLazyProp(obj : Object | $ReadOnlyArray, key : string | number, getter : () => T) {\n if (Array.isArray(obj)) {\n if (typeof key !== 'number') {\n throw new TypeError(`Array key must be number`);\n }\n } else if (typeof obj === 'object' && obj !== null) {\n if (typeof key !== 'string') {\n throw new TypeError(`Object key must be string`);\n }\n }\n\n Object.defineProperty(obj, key, {\n configurable: true,\n enumerable: true,\n get: () => {\n // $FlowFixMe\n delete obj[key];\n const value = getter();\n // $FlowFixMe\n obj[key] = value;\n return value;\n },\n set: (value : T) => {\n // $FlowFixMe\n delete obj[key];\n // $FlowFixMe\n obj[key] = value;\n }\n });\n}\n\nexport function arrayFrom(item : Iterable) : $ReadOnlyArray { // eslint-disable-line no-undef\n // $FlowFixMe[method-unbinding]\n return Array.prototype.slice.call(item);\n}\n\nexport function isObject(item : mixed) : boolean {\n return (typeof item === 'object' && item !== null);\n}\n\nexport function isObjectObject(obj : mixed) : boolean {\n // $FlowFixMe[method-unbinding]\n return isObject(obj) && Object.prototype.toString.call(obj) === '[object Object]';\n}\n\nexport function isPlainObject(obj : mixed) : boolean {\n if (!isObjectObject(obj)) {\n return false;\n }\n\n // $FlowFixMe\n const constructor = obj.constructor;\n\n if (typeof constructor !== 'function') {\n return false;\n }\n\n const prototype = constructor.prototype;\n\n if (!isObjectObject(prototype)) {\n return false;\n }\n\n if (!prototype.hasOwnProperty('isPrototypeOf')) {\n return false;\n }\n\n return true;\n}\n\nexport function replaceObject | Object> (item : T, replacer : (mixed, string | number, string) => mixed, fullKey : string = '') : T {\n\n if (Array.isArray(item)) {\n const length = item.length;\n const result : Array = [];\n\n for (let i = 0; i < length; i++) {\n\n\n defineLazyProp(result, i, () => {\n const itemKey = fullKey ? `${ fullKey }.${ i }` : `${ i }`;\n const el = item[i];\n\n let child = replacer(el, i, itemKey);\n\n if (isPlainObject(child) || Array.isArray(child)) {\n // $FlowFixMe\n child = replaceObject(child, replacer, itemKey);\n }\n\n return child;\n });\n }\n\n // $FlowFixMe\n return result;\n } else if (isPlainObject(item)) {\n const result = {};\n\n for (const key in item) {\n if (!item.hasOwnProperty(key)) {\n continue;\n }\n\n defineLazyProp(result, key, () => {\n const itemKey = fullKey ? `${ fullKey }.${ key }` : `${ key }`;\n // $FlowFixMe\n const el = item[key];\n\n let child = replacer(el, key, itemKey);\n\n if (isPlainObject(child) || Array.isArray(child)) {\n // $FlowFixMe\n child = replaceObject(child, replacer, itemKey);\n }\n\n return child;\n });\n }\n\n // $FlowFixMe\n return result;\n } else {\n throw new Error(`Pass an object or array`);\n }\n}\n\n\nexport function copyProp(source : Object, target : Object, name : string, def : mixed) {\n if (source.hasOwnProperty(name)) {\n const descriptor = Object.getOwnPropertyDescriptor(source, name);\n // $FlowFixMe\n Object.defineProperty(target, name, descriptor);\n\n } else {\n target[name] = def;\n }\n}\n\ntype RegexResultType = {|\n text : string,\n groups : $ReadOnlyArray,\n start : number,\n end : number,\n length : number,\n replace : (text : string) => string\n|};\n\nexport function regex(pattern : string | RegExp, string : string, start : number = 0) : ?RegexResultType {\n\n if (typeof pattern === 'string') {\n // eslint-disable-next-line security/detect-non-literal-regexp\n pattern = new RegExp(pattern);\n }\n\n const result = string.slice(start).match(pattern);\n\n if (!result) {\n return;\n }\n\n // $FlowFixMe\n const index : number = result.index;\n const regmatch = result[0];\n\n return {\n text: regmatch,\n groups: result.slice(1),\n start: start + index,\n end: start + index + regmatch.length,\n length: regmatch.length,\n\n replace(text : string) : string {\n\n if (!regmatch) {\n return '';\n }\n\n return `${ regmatch.slice(0, start + index) }${ text }${ regmatch.slice(index + regmatch.length) }`;\n }\n };\n}\n\nexport function regexAll(pattern : string | RegExp, string : string) : $ReadOnlyArray {\n\n const matches = [];\n let start = 0;\n\n // eslint-disable-next-line no-constant-condition\n while (true) {\n const regmatch = regex(pattern, string, start);\n\n if (!regmatch) {\n break;\n }\n\n matches.push(regmatch);\n start = match.end;\n }\n\n return matches;\n}\n\nexport function isDefined(value : ?mixed) : boolean {\n return value !== null && value !== undefined;\n}\n\nexport function cycle(method : Function) : ZalgoPromise {\n return ZalgoPromise.try(method).then(() => cycle(method));\n}\n\nexport function debounce(method : (...args : $ReadOnlyArray) => T, time : number = 100) : (...args : $ReadOnlyArray) => void {\n\n let timeout;\n\n const debounceWrapper = function() {\n clearTimeout(timeout);\n\n timeout = setTimeout(() => {\n return method.apply(this, arguments);\n }, time);\n };\n\n return setFunctionName(debounceWrapper, `${ getFunctionName(method) }::debounced`);\n}\n\nexport function isRegex(item : mixed) : boolean {\n // $FlowFixMe[method-unbinding]\n return Object.prototype.toString.call(item) === '[object RegExp]';\n}\n\ntype FunctionProxy = (method : T) => T;\n\n// eslint-disable-next-line flowtype/no-weak-types\nexport const weakMapMemoize : FunctionProxy<*> = (method : (arg : any) => R) : ((...args : $ReadOnlyArray) => R) => {\n\n const weakmap = new WeakMap();\n\n // eslint-disable-next-line flowtype/no-weak-types\n return function weakmapMemoized(arg : any) : R {\n return weakmap.getOrSet(arg, () => method.call(this, arg));\n };\n};\n\ntype FunctionPromiseProxy) => ZalgoPromise> = (T) => T;\n\n// eslint-disable-next-line flowtype/no-weak-types\nexport const weakMapMemoizePromise : FunctionPromiseProxy<*, *> = (method : (arg : any) => ZalgoPromise) : ((...args : $ReadOnlyArray) => ZalgoPromise) => {\n\n const weakmap = new WeakMap();\n\n // eslint-disable-next-line flowtype/no-weak-types\n return function weakmapMemoizedPromise(arg : any) : ZalgoPromise {\n return weakmap.getOrSet(arg, () =>\n method.call(this, arg).finally(() => {\n weakmap.delete(arg);\n }));\n };\n};\n\nexport function getOrSet(obj : O, key : string, getter : () => T) : T {\n if (obj.hasOwnProperty(key)) {\n return obj[key];\n }\n\n const val = getter();\n obj[key] = val;\n return val;\n}\n\nexport type CleanupType = {|\n set : (string, T) => T, // eslint-disable-line no-undef\n register : (Function) => {| cancel : () => void |},\n all : (err? : mixed) => ZalgoPromise\n|};\n\nexport function cleanup(obj : Object) : CleanupType {\n\n const tasks = [];\n let cleaned = false;\n let cleanErr;\n\n const cleaner = {\n set(name : string, item : T) : T {\n if (!cleaned) {\n obj[name] = item;\n cleaner.register(() => {\n delete obj[name];\n });\n }\n return item;\n },\n\n register(method : Function) : {| cancel : () => void |} {\n const task = once(() => method(cleanErr));\n\n if (cleaned) {\n method(cleanErr);\n } else {\n tasks.push(task);\n }\n\n return {\n cancel: () => {\n const index = tasks.indexOf(task);\n if (index !== -1) {\n tasks.splice(index, 1);\n }\n }\n };\n },\n\n all(err? : mixed) : ZalgoPromise {\n cleanErr = err;\n\n const results = [];\n cleaned = true;\n\n while (tasks.length) {\n const task = tasks.shift();\n results.push(task());\n }\n\n return ZalgoPromise.all(results).then(noop);\n }\n };\n\n return cleaner;\n}\n\nexport function tryCatch(fn : () => T) : {| result : T, error : void |} | {| result : void, error : mixed |} {\n let result;\n let error;\n\n try {\n result = fn();\n } catch (err) {\n error = err;\n }\n\n // $FlowFixMe\n return { result, error };\n}\n\n// eslint-disable-next-line flowtype/no-mutable-array\nexport function removeFromArray>(arr : T, item : X) {\n const index = arr.indexOf(item);\n if (index !== -1) {\n arr.splice(index, 1);\n }\n}\n\nexport function assertExists(name : string, thing : void | null | T) : T {\n if (thing === null || typeof thing === 'undefined') {\n throw new Error(`Expected ${ name } to be present`);\n }\n\n return thing;\n}\n\nexport function unique(arr : $ReadOnlyArray) : $ReadOnlyArray {\n const result = {};\n for (const item of arr) {\n result[item] = true;\n }\n return Object.keys(result);\n}\n\nexport const constHas = (constant : T, value : X) : boolean => {\n return memoizedValues(constant).indexOf(value) !== -1;\n};\n\nexport function dedupeErrors(handler : (mixed) => T) : (mixed) => (T | void) {\n const seenErrors = [];\n const seenStringifiedErrors = {};\n\n return (err) => {\n if (seenErrors.indexOf(err) !== -1) {\n return;\n }\n\n seenErrors.push(err);\n\n const stringifiedError = stringifyError(err);\n if (seenStringifiedErrors[stringifiedError]) {\n return;\n }\n\n seenStringifiedErrors[stringifiedError] = true;\n return handler(err);\n };\n}\n\nexport class ExtendableError extends Error {\n constructor(message : string) {\n super(message);\n // eslint-disable-next-line unicorn/custom-error-definition\n this.name = this.constructor.name;\n if (typeof Error.captureStackTrace === 'function') {\n Error.captureStackTrace(this, this.constructor);\n } else {\n this.stack = (new Error(message)).stack;\n }\n }\n}\n","/* @flow */\n\nexport function hasNativeWeakMap() : boolean {\n\n if (typeof WeakMap === 'undefined') {\n return false;\n }\n\n if (typeof Object.freeze === 'undefined') {\n return false;\n }\n\n try {\n\n const testWeakMap = new WeakMap();\n const testKey = {};\n const testValue = '__testvalue__';\n\n Object.freeze(testKey);\n\n testWeakMap.set(testKey, testValue);\n\n if (testWeakMap.get(testKey) === testValue) {\n return true;\n }\n\n return false;\n\n } catch (err) {\n\n return false;\n }\n}\n","/* @flow */\n/* eslint max-lines: off */\nimport { ZalgoPromise } from 'zalgo-promise/src';\nimport { linkFrameWindow, isWindowClosed, assertSameDomain,\n type SameDomainWindowType, type CrossDomainWindowType } from 'cross-domain-utils/src';\nimport { WeakMap } from 'cross-domain-safe-weakmap/src';\n\nimport { isElement, inlineMemoize, memoize, noop, stringify, capitalizeFirstLetter,\n once, extend, safeInterval, uniqueID, arrayFrom, ExtendableError, strHashStr } from './util';\nimport { isDevice } from './device';\nimport { KEY_CODES, ATTRIBUTES, UID_HASH_LENGTH } from './constants';\nimport type { CancelableType } from './types';\n\ntype ElementRefType = string | HTMLElement;\n\nexport function getBody() : HTMLBodyElement {\n // eslint-disable-next-line compat/compat\n const body = document.body;\n\n if (!body) {\n throw new Error(`Body element not found`);\n }\n\n return body;\n}\n\nexport function isDocumentReady() : boolean {\n // eslint-disable-next-line compat/compat\n return Boolean(document.body) && (document.readyState === 'complete');\n}\n\nexport function isDocumentInteractive() : boolean {\n // eslint-disable-next-line compat/compat\n return Boolean(document.body) && (document.readyState === 'interactive');\n}\n\nexport function urlEncode(str : string) : string {\n return encodeURIComponent(str);\n}\n\nexport function waitForWindowReady() : ZalgoPromise {\n return inlineMemoize(waitForWindowReady, () : ZalgoPromise => {\n return new ZalgoPromise(resolve => {\n if (isDocumentReady()) {\n resolve();\n }\n\n window.addEventListener('load', () => resolve());\n });\n });\n}\n\ntype WaitForDocumentReady = () => ZalgoPromise;\n\nexport const waitForDocumentReady : WaitForDocumentReady = memoize(() => {\n return new ZalgoPromise(resolve => {\n\n if (isDocumentReady() || isDocumentInteractive()) {\n return resolve();\n }\n\n const interval = setInterval(() => {\n if (isDocumentReady() || isDocumentInteractive()) {\n clearInterval(interval);\n return resolve();\n }\n }, 10);\n });\n});\n\nexport function waitForDocumentBody() : ZalgoPromise {\n return ZalgoPromise.try(() => {\n if (document.body) {\n return document.body;\n }\n\n return waitForDocumentReady().then(() => {\n if (document.body) {\n return document.body;\n }\n\n throw new Error('Document ready but document.body not present');\n });\n });\n}\n\nexport function parseQuery(queryString : string) : Object {\n return inlineMemoize(parseQuery, () : Object => {\n const params = {};\n\n if (!queryString) {\n return params;\n }\n\n if (queryString.indexOf('=') === -1) {\n return params;\n }\n\n for (let pair of queryString.split('&')) {\n pair = pair.split('=');\n\n if (pair[0] && pair[1]) {\n params[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1]);\n }\n }\n\n return params;\n }, [ queryString ]);\n}\n\n\nexport function getQueryParam(name : string) : string {\n return parseQuery(window.location.search.slice(1))[name];\n}\n\nexport function urlWillRedirectPage(url : string) : boolean {\n\n if (url.indexOf('#') === -1) {\n return true;\n }\n\n if (url.indexOf('#') === 0) {\n return false;\n }\n\n if (url.split('#')[0] === window.location.href.split('#')[0]) {\n return false;\n }\n\n return true;\n}\n\nexport type Query = {\n [ string ] : boolean | string\n};\n\nexport function formatQuery(obj : Query = {}) : string {\n\n return Object.keys(obj).filter(key => {\n return typeof obj[key] === 'string' || typeof obj[key] === 'boolean';\n }).map(key => {\n const val = obj[key];\n\n if (typeof val !== 'string' && typeof val !== 'boolean') {\n throw new TypeError(`Invalid type for query`);\n }\n\n return `${ urlEncode(key) }=${ urlEncode(val.toString()) }`;\n }).join('&');\n}\n\nexport function extendQuery(originalQuery : string, props : Query = {}) : string {\n\n if (!props || !Object.keys(props).length) {\n return originalQuery;\n }\n\n return formatQuery({\n ...parseQuery(originalQuery),\n ...props\n });\n}\n\nexport function extendUrl(url : string, options : {| query? : Query, hash? : Query |}) : string {\n\n const query = options.query || {};\n const hash = options.hash || {};\n\n let originalUrl;\n let originalQuery;\n let originalHash;\n\n [ originalUrl, originalHash ] = url.split('#');\n [ originalUrl, originalQuery ] = originalUrl.split('?');\n\n const queryString = extendQuery(originalQuery, query);\n const hashString = extendQuery(originalHash, hash);\n\n if (queryString) {\n originalUrl = `${ originalUrl }?${ queryString }`;\n }\n\n if (hashString) {\n originalUrl = `${ originalUrl }#${ hashString }`;\n }\n\n return originalUrl;\n}\n\nexport function redirect(url : string, win : CrossDomainWindowType = window) : ZalgoPromise {\n return new ZalgoPromise(resolve => {\n win.location = url;\n if (!urlWillRedirectPage(url)) {\n resolve();\n }\n });\n}\n\nexport function hasMetaViewPort() : boolean {\n const meta = document.querySelector('meta[name=viewport]');\n\n if (isDevice() && window.screen.width < 660 && !meta) {\n return false;\n }\n\n return true;\n}\n\nexport function isElementVisible(el : HTMLElement) : boolean {\n return Boolean(el.offsetWidth || el.offsetHeight || el.getClientRects().length);\n}\n\nexport function getPerformance() : ?Performance {\n return inlineMemoize(getPerformance, () : ?Performance => {\n const performance = window.performance;\n\n if (\n performance &&\n performance.now &&\n performance.timing &&\n performance.timing.connectEnd &&\n performance.timing.navigationStart &&\n (Math.abs(performance.now() - Date.now()) > 1000) &&\n (performance.now() - (performance.timing.connectEnd - performance.timing.navigationStart)) > 0\n ) {\n return performance;\n }\n });\n}\n\nexport function enablePerformance() : boolean {\n return Boolean(getPerformance());\n}\n\nexport function getPageRenderTime() : ZalgoPromise {\n return waitForDocumentReady().then(() => {\n const performance = getPerformance();\n\n if (!performance) {\n return;\n }\n\n const timing = performance.timing;\n\n if (timing.connectEnd && timing.domInteractive) {\n return timing.domInteractive - timing.connectEnd;\n }\n });\n}\n\nexport function htmlEncode(html : string = '') : string {\n return html.toString()\n .replace(/&/g, '&')\n .replace(//g, '>')\n .replace(/\"/g, '"')\n .replace(/'/g, ''')\n .replace(/\\//g, '/');\n}\n\nexport function isBrowser() : boolean {\n return (typeof window !== 'undefined') && window.location !== undefined;\n}\n\nexport function querySelectorAll(selector : string, doc : HTMLElement = window.document) : $ReadOnlyArray {\n // $FlowFixMe[method-unbinding]\n return Array.prototype.slice.call(doc.querySelectorAll(selector));\n}\n\nexport function onClick(element : HTMLElement, handler : (Event) => void) {\n element.addEventListener('touchstart', noop);\n element.addEventListener('click', handler);\n element.addEventListener('keypress', (event : Event) => {\n // $FlowFixMe\n if (event.keyCode === KEY_CODES.ENTER || event.keyCode === KEY_CODES.SPACE) {\n return handler(event);\n }\n });\n}\n\nexport function getScript({ host = window.location.host, path, reverse = false } : {| host? : string, path : string, reverse? : boolean |}) : ?HTMLScriptElement {\n return inlineMemoize(getScript, () : ?HTMLScriptElement => {\n\n const url = `${ host }${ path }`;\n // $FlowFixMe[method-unbinding]\n const scripts = Array.prototype.slice.call(document.getElementsByTagName('script'));\n\n if (reverse) {\n scripts.reverse();\n }\n\n for (const script of scripts) {\n if (!script.src) {\n continue;\n }\n\n const src = script.src.replace(/^https?:\\/\\//, '').split('?')[0];\n\n if (src === url) {\n return script;\n }\n }\n }, [ path ]);\n}\n\nexport function isLocalStorageEnabled() : boolean {\n return inlineMemoize(isLocalStorageEnabled, () => {\n try {\n if (typeof window === 'undefined') {\n return false;\n }\n\n if (window.localStorage) {\n const value = Math.random().toString();\n window.localStorage.setItem('__test__localStorage__', value);\n const result = window.localStorage.getItem('__test__localStorage__');\n window.localStorage.removeItem('__test__localStorage__');\n if (value === result) {\n return true;\n }\n }\n } catch (err) {\n // pass\n }\n return false;\n });\n}\n\nexport function getBrowserLocales() : $ReadOnlyArray<{| country? : string, lang : string |}> {\n const nav = window.navigator;\n\n const locales = nav.languages\n ? [ ...nav.languages ]\n : [];\n\n if (nav.language) {\n locales.push(nav.language);\n }\n\n if (nav.userLanguage) {\n locales.push(nav.userLanguage);\n }\n\n return locales.map(locale => {\n\n if (locale && locale.match(/^[a-z]{2}[-_][A-Z]{2}$/)) {\n const [ lang, country ] = locale.split(/[-_]/);\n return { country, lang };\n }\n\n if (locale && locale.match(/^[a-z]{2}$/)) {\n return { lang: locale };\n }\n\n return null;\n\n }).filter(Boolean);\n}\n\n\nexport function appendChild(container : HTMLElement, child : HTMLElement | Text) {\n container.appendChild(child);\n}\n\nexport function getElementSafe(id : ElementRefType, doc : Document | HTMLElement = document) : ?HTMLElement {\n\n if (isElement(id)) {\n // $FlowFixMe\n return id;\n }\n\n if (typeof id === 'string') {\n return doc.querySelector(id);\n }\n}\n\nexport function getElement(id : ElementRefType, doc : Document | HTMLElement = document) : HTMLElement {\n\n const element = getElementSafe(id, doc);\n\n if (element) {\n return element;\n }\n\n throw new Error(`Can not find element: ${ stringify(id) }`);\n}\n\nexport function elementReady(id : ElementRefType) : ZalgoPromise {\n return new ZalgoPromise((resolve, reject) => {\n\n const name = stringify(id);\n let el = getElementSafe(id);\n\n if (el) {\n return resolve(el);\n }\n\n if (isDocumentReady()) {\n return reject(new Error(`Document is ready and element ${ name } does not exist`));\n }\n\n const interval = setInterval(() => {\n\n el = getElementSafe(id);\n\n if (el) {\n resolve(el);\n clearInterval(interval);\n return;\n }\n\n if (isDocumentReady()) {\n clearInterval(interval);\n return reject(new Error(`Document is ready and element ${ name } does not exist`));\n }\n }, 10);\n });\n}\n\n// eslint-disable-next-line unicorn/custom-error-definition\nexport class PopupOpenError extends ExtendableError {}\n\ntype PopupOptions = {|\n name? : string,\n width? : number,\n height? : number,\n top? : number,\n left? : number,\n status? : 0 | 1,\n resizable? : 0 | 1,\n toolbar? : 0 | 1,\n menubar? : 0 | 1,\n scrollbars? : 0 | 1,\n closeOnUnload? : 0 | 1\n|};\n\nexport function popup(url : string, options? : PopupOptions) : CrossDomainWindowType {\n\n // $FlowFixMe\n options = options || {};\n\n const { closeOnUnload = 1, name = '', width, height } = options;\n\n let top = 0;\n let left = 0;\n\n if (width) {\n if (window.outerWidth) {\n left = Math.round((window.outerWidth - width) / 2) + window.screenX;\n } else if (window.screen.width) {\n left = Math.round((window.screen.width - width) / 2);\n }\n }\n\n if (height) {\n if (window.outerHeight) {\n top = Math.round((window.outerHeight - height) / 2) + window.screenY;\n } else if (window.screen.height) {\n top = Math.round((window.screen.height - height) / 2);\n }\n }\n\n delete options.closeOnUnload;\n delete options.name;\n\n if (width && height) {\n // $FlowFixMe\n options = {\n top,\n left,\n width,\n height,\n status: 1,\n toolbar: 0,\n menubar: 0,\n resizable: 1,\n scrollbars: 1,\n ...options\n };\n }\n\n // eslint-disable-next-line array-callback-return\n const params = Object.keys(options).map(key => {\n // $FlowFixMe\n if (options[key] !== null && options[key] !== undefined) {\n return `${ key }=${ stringify(options[key]) }`;\n }\n }).filter(Boolean).join(',');\n\n let win;\n\n try {\n win = window.open(url, name, params);\n } catch (err) {\n throw new PopupOpenError(`Can not open popup window - ${ err.stack || err.message }`);\n }\n\n if (isWindowClosed(win)) {\n const err = new PopupOpenError(`Can not open popup window - blocked`);\n throw err;\n }\n\n if (closeOnUnload) {\n window.addEventListener('unload', () => win.close());\n }\n\n return win;\n}\n\n\nexport function writeToWindow(win : SameDomainWindowType, html : string) {\n try {\n win.document.open();\n win.document.write(html);\n win.document.close();\n } catch (err) {\n try {\n win.location = `javascript: document.open(); document.write(${ JSON.stringify(html) }); document.close();`;\n } catch (err2) {\n // pass\n }\n }\n}\n\nexport function writeElementToWindow(win : SameDomainWindowType, el : HTMLElement) {\n\n const tag = el.tagName.toLowerCase();\n\n if (tag !== 'html') {\n throw new Error(`Expected element to be html, got ${ tag }`);\n }\n\n const documentElement = win.document.documentElement;\n\n for (const child of arrayFrom(documentElement.children)) {\n documentElement.removeChild(child);\n }\n\n for (const child of arrayFrom(el.children)) {\n documentElement.appendChild(child);\n }\n}\n\nexport function setStyle(el : HTMLElement, styleText : string, doc : Document = window.document) {\n // $FlowFixMe\n if (el.styleSheet) {\n // $FlowFixMe\n el.styleSheet.cssText = styleText;\n } else {\n el.appendChild(doc.createTextNode(styleText));\n }\n}\n\nexport type ElementOptionsType = {|\n style? : { [ string ] : string },\n id? : string,\n class? : ?$ReadOnlyArray,\n attributes? : { [ string ] : string },\n styleSheet? : ?string,\n html? : ?string\n|};\n\nlet awaitFrameLoadPromises : WeakMap>;\n\nexport function awaitFrameLoad(frame : HTMLIFrameElement) : ZalgoPromise {\n awaitFrameLoadPromises = awaitFrameLoadPromises || new WeakMap();\n\n if (awaitFrameLoadPromises.has(frame)) {\n const promise = awaitFrameLoadPromises.get(frame);\n if (promise) {\n return promise;\n }\n }\n\n const promise = new ZalgoPromise((resolve, reject) => {\n frame.addEventListener('load', () => {\n linkFrameWindow(frame);\n resolve(frame);\n });\n\n frame.addEventListener('error', (err : Event) => {\n if (frame.contentWindow) {\n resolve(frame);\n } else {\n reject(err);\n }\n });\n });\n\n awaitFrameLoadPromises.set(frame, promise);\n\n return promise;\n}\n\nexport function awaitFrameWindow(frame : HTMLIFrameElement) : ZalgoPromise {\n return awaitFrameLoad(frame).then(loadedFrame => {\n\n if (!loadedFrame.contentWindow) {\n throw new Error(`Could not find window in iframe`);\n }\n\n return loadedFrame.contentWindow;\n });\n}\n\nconst getDefaultCreateElementOptions = () : ElementOptionsType => {\n // $FlowFixMe\n return {};\n};\n\nexport function createElement(tag : string = 'div', options : ElementOptionsType = getDefaultCreateElementOptions(), container : ?HTMLElement) : HTMLElement {\n\n tag = tag.toLowerCase();\n const element = document.createElement(tag);\n\n if (options.style) {\n extend(element.style, options.style);\n }\n\n if (options.class) {\n element.className = options.class.join(' ');\n }\n\n if (options.id) {\n element.setAttribute('id', options.id);\n }\n\n if (options.attributes) {\n for (const key of Object.keys(options.attributes)) {\n element.setAttribute(key, options.attributes[key]);\n }\n }\n\n if (options.styleSheet) {\n setStyle(element, options.styleSheet);\n }\n\n if (container) {\n appendChild(container, element);\n }\n\n if (options.html) {\n if (tag === 'iframe') {\n // $FlowFixMe\n if (!container || !element.contentWindow) {\n throw new Error(`Iframe html can not be written unless container provided and iframe in DOM`);\n }\n\n // $FlowFixMe\n writeToWindow(element.contentWindow, options.html);\n\n } else {\n element.innerHTML = options.html;\n }\n }\n\n return element;\n}\n\ntype StringMap = {|\n [ string ] : string\n|};\n\nexport type IframeElementOptionsType = {|\n style? : StringMap,\n class? : ?$ReadOnlyArray,\n attributes? : StringMap,\n styleSheet? : ?string,\n html? : ?string,\n url? : ?string\n|};\n\nconst getDefaultIframeOptions = () : IframeElementOptionsType => {\n // $FlowFixMe\n return {};\n};\n\nconst getDefaultStringMap = () : StringMap => {\n // $FlowFixMe\n return {};\n};\n\nexport function iframe(options : IframeElementOptionsType = getDefaultIframeOptions(), container : ?HTMLElement) : HTMLIFrameElement {\n\n const attributes = options.attributes || getDefaultStringMap();\n const style = options.style || getDefaultStringMap();\n\n // $FlowFixMe\n const newAttributes = {\n allowTransparency: 'true',\n ...attributes\n };\n\n // $FlowFixMe\n const newStyle = {\n backgroundColor: 'transparent',\n border: 'none',\n ...style\n };\n\n const frame = createElement('iframe', {\n attributes: newAttributes,\n style: newStyle,\n html: options.html,\n class: options.class\n });\n\n const isIE = window.navigator.userAgent.match(/MSIE|Edge/i);\n\n if (!frame.hasAttribute('id')) {\n frame.setAttribute('id', uniqueID());\n }\n\n // $FlowFixMe\n awaitFrameLoad(frame);\n\n if (container) {\n const el = getElement(container);\n el.appendChild(frame);\n }\n\n if (options.url || isIE) {\n frame.setAttribute('src', options.url || 'about:blank');\n }\n\n // $FlowFixMe\n return frame;\n}\n\nexport function addEventListener(obj : HTMLElement, event : string, handler : (event : Event) => void) : CancelableType {\n obj.addEventListener(event, handler);\n return {\n cancel() {\n obj.removeEventListener(event, handler);\n }\n };\n}\n\nexport function bindEvents(element : HTMLElement, eventNames : $ReadOnlyArray, handler : (event : Event) => void) : CancelableType {\n\n handler = once(handler);\n\n for (const eventName of eventNames) {\n element.addEventListener(eventName, handler);\n }\n\n return {\n cancel: once(() => {\n for (const eventName of eventNames) {\n element.removeEventListener(eventName, handler);\n }\n })\n };\n}\n\nconst VENDOR_PREFIXES = [ 'webkit', 'moz', 'ms', 'o' ];\n\nexport function setVendorCSS(element : HTMLElement, name : string, value : string) {\n\n // $FlowFixMe\n element.style[name] = value;\n\n const capitalizedName = capitalizeFirstLetter(name);\n\n for (const prefix of VENDOR_PREFIXES) {\n // $FlowFixMe\n element.style[`${ prefix }${ capitalizedName }`] = value;\n }\n}\n\nconst ANIMATION_START_EVENTS = [ 'animationstart', 'webkitAnimationStart', 'oAnimationStart', 'MSAnimationStart' ];\nconst ANIMATION_END_EVENTS = [ 'animationend', 'webkitAnimationEnd', 'oAnimationEnd', 'MSAnimationEnd' ];\n\nexport function animate(element : ElementRefType, name : string, clean : (Function) => void, timeout : number = 1000) : ZalgoPromise {\n return new ZalgoPromise((resolve, reject) => {\n\n const el = getElement(element);\n\n if (!el) {\n return resolve();\n }\n\n let hasStarted = false;\n\n // eslint-disable-next-line prefer-const\n let startTimeout;\n let endTimeout;\n // eslint-disable-next-line prefer-const\n let startEvent;\n // eslint-disable-next-line prefer-const\n let endEvent;\n\n function cleanUp() {\n clearTimeout(startTimeout);\n clearTimeout(endTimeout);\n startEvent.cancel();\n endEvent.cancel();\n }\n\n startEvent = bindEvents(el, ANIMATION_START_EVENTS, event => {\n\n // $FlowFixMe\n if (event.target !== el || event.animationName !== name) {\n return;\n }\n\n clearTimeout(startTimeout);\n\n event.stopPropagation();\n\n startEvent.cancel();\n hasStarted = true;\n\n endTimeout = setTimeout(() => {\n cleanUp();\n resolve();\n }, timeout);\n });\n\n endEvent = bindEvents(el, ANIMATION_END_EVENTS, event => {\n\n // $FlowFixMe\n if (event.target !== el || event.animationName !== name) {\n return;\n }\n\n cleanUp();\n\n // $FlowFixMe\n if (typeof event.animationName === 'string' && event.animationName !== name) {\n return reject(`Expected animation name to be ${ name }, found ${ event.animationName }`);\n }\n\n return resolve();\n });\n\n setVendorCSS(el, 'animationName', name);\n\n startTimeout = setTimeout(() => {\n if (!hasStarted) {\n cleanUp();\n return resolve();\n }\n }, 200);\n\n if (clean) {\n clean(cleanUp);\n }\n });\n}\n\nexport function makeElementVisible(element : HTMLElement) {\n element.style.setProperty('visibility', '');\n}\n\nexport function makeElementInvisible(element : HTMLElement) {\n element.style.setProperty('visibility', 'hidden', 'important');\n}\n\n\nexport function showElement(element : HTMLElement) {\n element.style.setProperty('display', '');\n}\n\nexport function hideElement(element : HTMLElement) {\n element.style.setProperty('display', 'none', 'important');\n}\n\nexport function destroyElement(element : HTMLElement) {\n if (element && element.parentNode) {\n element.parentNode.removeChild(element);\n }\n}\n\nexport function showAndAnimate(element : HTMLElement, name : string, clean : (Function) => void) : ZalgoPromise {\n const animation = animate(element, name, clean);\n showElement(element);\n return animation;\n}\n\nexport function animateAndHide(element : HTMLElement, name : string, clean : (Function) => void) : ZalgoPromise {\n return animate(element, name, clean).then(() => {\n hideElement(element);\n });\n}\n\nexport function addClass(element : HTMLElement, name : string) {\n element.classList.add(name);\n}\n\nexport function removeClass(element : HTMLElement, name : string) {\n element.classList.remove(name);\n}\n\nexport function isElementClosed(el : HTMLElement) : boolean {\n if (!el || !el.parentNode || !el.ownerDocument || !el.ownerDocument.documentElement || !el.ownerDocument.documentElement.contains(el)) {\n return true;\n }\n return false;\n}\n\nexport function watchElementForClose(element : HTMLElement, handler : () => mixed) : CancelableType {\n handler = once(handler);\n\n let cancelled = false;\n const mutationObservers = [];\n // eslint-disable-next-line prefer-const\n let interval;\n // eslint-disable-next-line prefer-const\n let sacrificialFrame;\n let sacrificialFrameWin;\n\n const cancel = () => {\n cancelled = true;\n for (const observer of mutationObservers) {\n observer.disconnect();\n }\n if (interval) {\n interval.cancel();\n }\n if (sacrificialFrameWin) {\n // eslint-disable-next-line no-use-before-define\n sacrificialFrameWin.removeEventListener('unload', elementClosed);\n }\n if (sacrificialFrame) {\n destroyElement(sacrificialFrame);\n }\n };\n\n const elementClosed = () => {\n if (!cancelled) {\n handler();\n cancel();\n }\n };\n\n if (isElementClosed(element)) {\n elementClosed();\n return { cancel };\n }\n\n // Strategy 1: Mutation observer\n\n if (window.MutationObserver) {\n let mutationElement = element.parentElement;\n while (mutationElement) {\n const mutationObserver = new window.MutationObserver(() => {\n if (isElementClosed(element)) {\n elementClosed();\n }\n });\n\n mutationObserver.observe(mutationElement, { childList: true });\n mutationObservers.push(mutationObserver);\n mutationElement = mutationElement.parentElement;\n }\n }\n\n // Strategy 2: Sacrificial iframe\n\n sacrificialFrame = document.createElement('iframe');\n sacrificialFrame.setAttribute('name', `__detect_close_${ uniqueID() }__`);\n sacrificialFrame.style.display = 'none';\n awaitFrameWindow(sacrificialFrame).then(frameWin => {\n sacrificialFrameWin = assertSameDomain(frameWin);\n sacrificialFrameWin.addEventListener('unload', elementClosed);\n });\n element.appendChild(sacrificialFrame);\n\n // Strategy 3: Poller\n\n const check = () => {\n if (isElementClosed(element)) {\n elementClosed();\n }\n };\n interval = safeInterval(check, 1000);\n\n return { cancel };\n}\n\nexport function fixScripts(el : HTMLElement, doc : Document = window.document) {\n for (const script of querySelectorAll('script', el)) {\n const parentNode = script.parentNode;\n\n if (!parentNode) {\n continue;\n }\n\n const newScript = doc.createElement('script');\n newScript.text = script.textContent;\n parentNode.replaceChild(newScript, script);\n }\n}\n\ntype OnResizeOptions = {|\n width? : boolean,\n height? : boolean,\n interval? : number,\n win? : SameDomainWindowType\n|};\n\nexport function onResize(el : HTMLElement, handler : ({| width : number, height : number |}) => void, { width = true, height = true, interval = 100, win = window } : OnResizeOptions = {}) : {| cancel : () => void |} {\n let currentWidth = el.offsetWidth;\n let currentHeight = el.offsetHeight;\n let canceled = false;\n\n handler({ width: currentWidth, height: currentHeight });\n\n const check = () => {\n if (canceled || !isElementVisible(el)) {\n return;\n }\n\n const newWidth = el.offsetWidth;\n const newHeight = el.offsetHeight;\n\n if ((width && newWidth !== currentWidth) || (height && newHeight !== currentHeight)) {\n handler({ width: newWidth, height: newHeight });\n }\n\n currentWidth = newWidth;\n currentHeight = newHeight;\n };\n\n let observer;\n let timeout;\n\n win.addEventListener('resize', check);\n\n if (typeof win.ResizeObserver !== 'undefined') {\n observer = new win.ResizeObserver(check);\n observer.observe(el);\n timeout = safeInterval(check, interval * 10);\n\n } else if (typeof win.MutationObserver !== 'undefined') {\n observer = new win.MutationObserver(check);\n observer.observe(el, {\n attributes: true,\n childList: true,\n subtree: true,\n characterData: false\n });\n timeout = safeInterval(check, interval * 10);\n } else {\n timeout = safeInterval(check, interval);\n }\n\n return {\n cancel: () => {\n canceled = true;\n observer.disconnect();\n window.removeEventListener('resize', check);\n timeout.cancel();\n }\n };\n}\n\nexport function getResourceLoadTime(url : string) : ?number {\n const performance = getPerformance();\n\n if (!performance) {\n return;\n }\n\n // $FlowFixMe[method-unbinding]\n if (typeof performance.getEntries !== 'function') {\n return;\n }\n\n const entries = performance.getEntries();\n\n for (let i = 0; i < entries.length; i++) {\n const entry = entries[i];\n\n if (entry && entry.name && entry.name.indexOf(url) === 0 && typeof entry.duration === 'number') {\n return Math.floor(entry.duration);\n }\n }\n}\n\nexport function isShadowElement(element : Node) : boolean {\n while (element.parentNode) {\n element = element.parentNode;\n }\n\n return element.toString() === '[object ShadowRoot]';\n}\n\nexport function getShadowRoot(element : Node) : ?Node {\n while (element.parentNode) {\n element = element.parentNode;\n }\n\n if (isShadowElement(element)) {\n return element;\n }\n}\n\nexport function getShadowHost(element : Node) : ?HTMLElement {\n const shadowRoot = getShadowRoot(element);\n\n // $FlowFixMe\n if (shadowRoot && shadowRoot.host) {\n // $FlowFixMe\n return shadowRoot.host;\n }\n}\n\n\nexport function insertShadowSlot(element : HTMLElement) : HTMLElement {\n const shadowHost = getShadowHost(element);\n\n if (!shadowHost) {\n throw new Error(`Element is not in shadow dom`);\n }\n\n const slotName = `shadow-slot-${ uniqueID() }`;\n const slot = document.createElement('slot');\n slot.setAttribute('name', slotName);\n element.appendChild(slot);\n\n const slotProvider = document.createElement('div');\n slotProvider.setAttribute('slot', slotName);\n shadowHost.appendChild(slotProvider);\n\n if (isShadowElement(shadowHost)) {\n return insertShadowSlot(slotProvider);\n }\n\n return slotProvider;\n}\n\nexport function preventClickFocus(el : HTMLElement) {\n const onFocus = (event : Event) => {\n el.removeEventListener('focus', onFocus);\n event.preventDefault();\n el.blur();\n return false;\n };\n\n el.addEventListener('mousedown', () => {\n el.addEventListener('focus', onFocus);\n setTimeout(() => {\n el.removeEventListener('focus', onFocus);\n }, 1);\n });\n}\n\nexport function getStackTrace() : string {\n try {\n throw new Error('_');\n }\n catch (err) {\n return err.stack || '';\n }\n}\n\nfunction inferCurrentScript() : ?HTMLScriptElement {\n try {\n const stack = getStackTrace();\n const stackDetails = (/.*at [^(]*\\((.*):(.+):(.+)\\)$/ig).exec(stack);\n const scriptLocation = stackDetails && stackDetails[1];\n\n if (!scriptLocation) {\n return;\n }\n\n // $FlowFixMe[method-unbinding]\n for (const script of Array.prototype.slice.call(document.getElementsByTagName('script')).reverse()) {\n if (script.src && script.src === scriptLocation) {\n return script;\n }\n }\n\n } catch (err) {\n // pass\n }\n}\n\n// eslint-disable-next-line compat/compat\nlet currentScript = typeof document !== 'undefined' ? document.currentScript : null;\n\ntype GetCurrentScript = () => HTMLScriptElement;\n\nexport const getCurrentScript : GetCurrentScript = memoize(() => {\n if (currentScript) {\n return currentScript;\n }\n\n currentScript = inferCurrentScript();\n\n if (currentScript) {\n return currentScript;\n }\n\n throw new Error('Can not determine current script');\n});\n\nconst currentUID = uniqueID();\n\ntype GetCurrentScriptUID = () => string;\n\nexport const getCurrentScriptUID : GetCurrentScriptUID = memoize(() => {\n let script;\n\n try {\n script = getCurrentScript();\n } catch (err) {\n return currentUID;\n }\n\n let uid = script.getAttribute(ATTRIBUTES.UID);\n\n if (uid && typeof uid === 'string') {\n return uid;\n }\n\n uid = script.getAttribute(`${ ATTRIBUTES.UID }-auto`);\n\n if (uid && typeof uid === 'string') {\n return uid;\n }\n\n if (script.src) {\n\n const { src, dataset } = script;\n const stringToHash = JSON.stringify({ src, dataset });\n const hashedString = strHashStr(stringToHash);\n const hashResult = hashedString.slice(hashedString.length - UID_HASH_LENGTH);\n\n uid = `uid_${ hashResult }`;\n } else {\n uid = uniqueID();\n }\n\n script.setAttribute(`${ ATTRIBUTES.UID }-auto`, uid);\n\n return uid;\n});\n\ntype SubmitFormOptions = {|\n url : string,\n target : string,\n body? : {| [string] : string | boolean |},\n method? : string\n|};\n\nexport function submitForm({ url, target, body, method = 'post' } : SubmitFormOptions) {\n const form = document.createElement('form');\n form.setAttribute('target', target);\n form.setAttribute('method', method);\n form.setAttribute('action', url);\n form.style.display = 'none';\n\n if (body) {\n for (const key of Object.keys(body)) {\n const input = document.createElement('input');\n input.setAttribute('name', key);\n input.setAttribute('value', body[key]?.toString());\n form.appendChild(input);\n }\n }\n\n getBody().appendChild(form);\n form.submit();\n getBody().removeChild(form);\n}\n","/* @flow */\n\nexport const KEY_CODES = {\n ENTER: 13,\n SPACE: 32\n};\n\nexport const ATTRIBUTES = {\n UID: 'data-uid'\n};\n\nexport const UID_HASH_LENGTH = 30;\n","/* @flow */\n\nimport { ZalgoPromise } from 'zalgo-promise/src';\nimport { type SameDomainWindowType } from 'cross-domain-utils/src';\n\ntype RequestOptionsType = {|\n url : string,\n method? : string,\n headers? : { [key : string] : string },\n json? : $ReadOnlyArray | Object,\n data? : { [key : string] : string },\n body? : string,\n win? : SameDomainWindowType,\n timeout? : number\n|};\n\ntype ResponseType = {|\n status : number,\n headers : { [string] : string },\n body : Object\n|};\n\nconst HEADERS = {\n CONTENT_TYPE: 'content-type',\n ACCEPT: 'accept'\n};\n\nconst headerBuilders = [];\n\nfunction parseHeaders(rawHeaders : string = '') : { [string] : string } {\n const result = {};\n for (const line of rawHeaders.trim().split('\\n')) {\n const [ key, ...values ] = line.split(':');\n result[key.toLowerCase()] = values.join(':').trim();\n }\n return result;\n}\n\nexport function request({ url, method = 'get', headers = {}, json, data, body, win = window, timeout = 0 } : RequestOptionsType) : ZalgoPromise {\n return new ZalgoPromise((resolve, reject) => {\n\n if ((json && data) || (json && body) || (data && json)) {\n throw new Error(`Only options.json or options.data or options.body should be passed`);\n }\n\n const normalizedHeaders = {};\n\n for (const key of Object.keys(headers)) {\n normalizedHeaders[key.toLowerCase()] = headers[key];\n }\n\n if (json) {\n normalizedHeaders[HEADERS.CONTENT_TYPE] = normalizedHeaders[HEADERS.CONTENT_TYPE] || 'application/json';\n } else if (data || body) {\n normalizedHeaders[HEADERS.CONTENT_TYPE] = normalizedHeaders[HEADERS.CONTENT_TYPE] || 'application/x-www-form-urlencoded; charset=utf-8';\n }\n\n normalizedHeaders[HEADERS.ACCEPT] = normalizedHeaders[HEADERS.ACCEPT] || 'application/json';\n\n for (const headerBuilder of headerBuilders) {\n const builtHeaders = headerBuilder();\n\n for (const key of Object.keys(builtHeaders)) {\n normalizedHeaders[key.toLowerCase()] = builtHeaders[key];\n }\n }\n\n const xhr = new win.XMLHttpRequest();\n\n xhr.addEventListener('load', function xhrLoad() : void {\n\n const responseHeaders = parseHeaders(this.getAllResponseHeaders());\n\n if (!this.status) {\n return reject(new Error(`Request to ${ method.toLowerCase() } ${ url } failed: no response status code.`));\n }\n \n const contentType = responseHeaders['content-type'];\n const isJSON = contentType && (contentType.indexOf('application/json') === 0 || contentType.indexOf('text/json') === 0);\n let responseBody = this.responseText;\n\n try {\n responseBody = JSON.parse(responseBody);\n } catch (err) {\n if (isJSON) {\n return reject(new Error(`Invalid json: ${ this.responseText }.`));\n }\n }\n\n const res = {\n status: this.status,\n headers: responseHeaders,\n body: responseBody\n };\n\n return resolve(res);\n\n }, false);\n\n xhr.addEventListener('error', (evt) => {\n reject(new Error(`Request to ${ method.toLowerCase() } ${ url } failed: ${ evt.toString() }.`));\n }, false);\n\n xhr.open(method, url, true);\n\n for (const key in normalizedHeaders) {\n if (normalizedHeaders.hasOwnProperty(key)) {\n xhr.setRequestHeader(key, normalizedHeaders[key]);\n }\n }\n\n if (json) {\n body = JSON.stringify(json);\n } else if (data) {\n body = Object.keys(data).map(key => {\n return `${ encodeURIComponent(key) }=${ data ? encodeURIComponent(data[key]) : '' }`;\n }).join('&');\n }\n\n xhr.timeout = timeout;\n xhr.ontimeout = function xhrTimeout() {\n reject(new Error(`Request to ${ method.toLowerCase() } ${ url } has timed out`));\n };\n\n xhr.send(body);\n });\n}\n\nexport function addHeaderBuilder(method : () => { [string] : string }) {\n headerBuilders.push(method);\n}\n","/* @flow */\n\nexport const LOG_LEVEL = {\n DEBUG: ('debug' : 'debug'),\n INFO: ('info' : 'info'),\n WARN: ('warn' : 'warn'),\n ERROR: ('error' : 'error')\n};\n\nexport const PROTOCOL = {\n FILE: 'file:'\n};\n","/* @flow */\n\nimport { LOG_LEVEL } from './constants';\n\nexport const AUTO_FLUSH_LEVEL = [ LOG_LEVEL.WARN, LOG_LEVEL.ERROR ];\n\nexport const LOG_LEVEL_PRIORITY = [ LOG_LEVEL.ERROR, LOG_LEVEL.WARN, LOG_LEVEL.INFO, LOG_LEVEL.DEBUG ];\n\nexport const FLUSH_INTERVAL = 60 * 1000;\n\nexport const DEFAULT_LOG_LEVEL : $Values = __DEBUG__ ? LOG_LEVEL.DEBUG : LOG_LEVEL.WARN;\n\nexport const AMPLITUDE_URL = 'https://api2.amplitude.com/2/httpapi';\n","/* @flow */\n\nimport { type SameDomainWindowType } from 'cross-domain-utils/src';\n\nimport { AMPLITUDE_URL } from './config';\nimport type { Payload } from './types';\n\ntype CanUseBeaconOptions = {|\n headers : { [string] : string },\n enableSendBeacon : boolean\n|};\n\nconst canUseSendBeacon = ({ headers, enableSendBeacon } : CanUseBeaconOptions) : boolean => {\n const hasHeaders = headers && Object.keys(headers).length;\n if (window && window.navigator.sendBeacon && !hasHeaders && enableSendBeacon && window.Blob) {\n return true;\n }\n\n return false;\n};\n\nconst isAmplitude = (url : string) : boolean => {\n if (url === AMPLITUDE_URL) {\n return true;\n }\n\n return false;\n};\n\ntype SendBeaconOptions = {|\n win : SameDomainWindowType,\n url : string,\n data : JSON,\n useBlob : boolean\n|};\n\nconst sendBeacon = ({ win = window, url, data, useBlob = true } : SendBeaconOptions) : boolean => {\n try {\n const json = JSON.stringify(data);\n\n if (!win.navigator.sendBeacon) {\n throw new Error(`No sendBeacon available`);\n }\n\n if (useBlob) {\n const blob = new Blob([ json ], { type: 'application/json' });\n return win.navigator.sendBeacon(url, blob);\n }\n \n return win.navigator.sendBeacon(url, json);\n } catch (e) {\n return false;\n }\n};\n\nconst extendIfDefined = (target : Payload, source : Payload) => {\n for (const key in source) {\n if (source.hasOwnProperty(key)) {\n target[key] = source[key];\n }\n }\n};\n\nexport { canUseSendBeacon, extendIfDefined, isAmplitude, sendBeacon };\n","/* @flow */\n\nimport { ZalgoPromise } from 'zalgo-promise/src';\nimport { request, noop } from 'belter/src';\nimport { isSameDomain, assertSameDomain, type CrossDomainWindowType } from 'cross-domain-utils/src';\n\nimport { canUseSendBeacon, isAmplitude, sendBeacon } from './util';\n\nexport type TransportOptions = {|\n url : string,\n method : string,\n headers : { [string] : string },\n json : Object,\n enableSendBeacon? : boolean\n|};\n\nexport type Transport = (TransportOptions) => ZalgoPromise;\n\nexport function getHTTPTransport(httpWin : CrossDomainWindowType = window) : Transport {\n const win = isSameDomain(httpWin) ? assertSameDomain(httpWin) : window;\n\n return ({ url, method, headers, json, enableSendBeacon = false } : TransportOptions) : ZalgoPromise => {\n return ZalgoPromise.try(() => {\n let beaconResult = false;\n\n if (canUseSendBeacon({ headers, enableSendBeacon })) {\n if (isAmplitude(url)) {\n beaconResult = sendBeacon({ win, url, data: json, useBlob: false });\n } else {\n beaconResult = sendBeacon({ win, url, data: json, useBlob: true });\n }\n }\n\n return beaconResult ? beaconResult : request({ win, url, method, headers, json });\n }).then(noop);\n };\n}\n","/* @flow */\n\nimport { ZalgoPromise } from 'zalgo-promise/src';\nimport { isBrowser, promiseDebounce, noop, safeInterval, objFilter } from 'belter/src';\n\nimport { DEFAULT_LOG_LEVEL, LOG_LEVEL_PRIORITY, AUTO_FLUSH_LEVEL, FLUSH_INTERVAL, AMPLITUDE_URL } from './config';\nimport { LOG_LEVEL, PROTOCOL } from './constants';\nimport { extendIfDefined } from './util';\nimport { type Transport, getHTTPTransport } from './http';\nimport type { Payload } from './types';\n\ntype LoggerOptions = {|\n url? : string,\n prefix? : string,\n logLevel? : $Values,\n transport? : Transport,\n flushInterval? : number,\n enableSendBeacon? : boolean,\n amplitudeApiKey? : string\n|};\n\ntype ClientPayload = Payload;\ntype Log = (name : string, payload? : ClientPayload) => LoggerType; // eslint-disable-line no-use-before-define\ntype Track = (payload : ClientPayload) => LoggerType; // eslint-disable-line no-use-before-define\n\ntype Builder = (Payload) => ClientPayload;\ntype AddBuilder = (Builder) => LoggerType; // eslint-disable-line no-use-before-define\n\nexport type LoggerType = {|\n debug : Log,\n info : Log,\n warn : Log,\n error : Log,\n\n track : Track,\n\n flush : () => ZalgoPromise,\n immediateFlush : () => ZalgoPromise,\n\n addPayloadBuilder : AddBuilder,\n addMetaBuilder : AddBuilder,\n addTrackingBuilder : AddBuilder,\n addHeaderBuilder : AddBuilder,\n\n setTransport : (Transport) => LoggerType,\n configure : (LoggerOptions) => LoggerType\n|};\n\nexport function Logger({ url, prefix, logLevel = DEFAULT_LOG_LEVEL, transport = getHTTPTransport(), amplitudeApiKey, flushInterval = FLUSH_INTERVAL, enableSendBeacon = false } : LoggerOptions) : LoggerType {\n\n let events : Array<{| level : $Values, event : string, payload : Payload |}> = [];\n let tracking : Array = [];\n\n const payloadBuilders : Array = [];\n const metaBuilders : Array = [];\n const trackingBuilders : Array = [];\n const headerBuilders : Array = [];\n\n function print(level : $Values, event : string, payload : Payload) {\n\n if (!isBrowser() || !window.console || !window.console.log) {\n return;\n }\n\n if (LOG_LEVEL_PRIORITY.indexOf(level) > LOG_LEVEL_PRIORITY.indexOf(logLevel)) {\n return;\n }\n\n const args = [ event ];\n\n args.push(payload);\n\n if (payload.error || payload.warning) {\n args.push('\\n\\n', payload.error || payload.warning);\n }\n\n try {\n if (window.console[level] && window.console[level].apply) {\n window.console[level].apply(window.console, args);\n } else if (window.console.log && window.console.log.apply) {\n window.console.log.apply(window.console, args);\n }\n } catch (err) {\n // pass\n }\n }\n\n function immediateFlush() : ZalgoPromise {\n return ZalgoPromise.try(() => {\n if (!isBrowser() || window.location.protocol === PROTOCOL.FILE) {\n return;\n }\n\n if (!events.length && !tracking.length) {\n return;\n }\n\n const meta = {};\n for (const builder of metaBuilders) {\n extendIfDefined(meta, builder(meta));\n }\n\n const headers = {};\n for (const builder of headerBuilders) {\n extendIfDefined(headers, builder(headers));\n }\n\n let res;\n\n if (url) {\n res = transport({\n method: 'POST',\n url,\n headers,\n json: {\n events,\n meta,\n tracking\n },\n enableSendBeacon\n }).catch(noop);\n }\n\n if (amplitudeApiKey) {\n transport({\n method: 'POST',\n url: AMPLITUDE_URL,\n headers: {},\n json: {\n api_key: amplitudeApiKey,\n events: tracking.map((payload : Payload) => {\n // $FlowFixMe\n return {\n event_type: payload.transition_name || 'event',\n event_properties: payload,\n ...payload\n };\n })\n },\n enableSendBeacon\n }).catch(noop);\n }\n\n events = [];\n tracking = [];\n\n return ZalgoPromise.resolve(res).then(noop);\n });\n }\n\n const flush = promiseDebounce(immediateFlush);\n\n function enqueue(level : $Values, event : string, payload : Payload) {\n\n events.push({\n level,\n event,\n payload\n });\n\n if (AUTO_FLUSH_LEVEL.indexOf(level) !== -1) {\n flush();\n }\n }\n\n function log(level : $Values, event : string, payload = {}) : LoggerType {\n\n if (!isBrowser()) {\n return logger; // eslint-disable-line no-use-before-define\n }\n\n if (prefix) {\n event = `${ prefix }_${ event }`;\n }\n\n const logPayload : Payload = {\n ...objFilter(payload),\n timestamp: Date.now().toString()\n };\n\n for (const builder of payloadBuilders) {\n extendIfDefined(logPayload, builder(logPayload));\n }\n\n enqueue(level, event, logPayload);\n print(level, event, logPayload);\n\n return logger; // eslint-disable-line no-use-before-define\n }\n\n function addBuilder(builders, builder) : LoggerType {\n builders.push(builder);\n return logger; // eslint-disable-line no-use-before-define\n }\n\n function addPayloadBuilder(builder) : LoggerType {\n return addBuilder(payloadBuilders, builder);\n }\n\n function addMetaBuilder(builder) : LoggerType {\n return addBuilder(metaBuilders, builder);\n }\n\n function addTrackingBuilder(builder) : LoggerType {\n return addBuilder(trackingBuilders, builder);\n }\n\n function addHeaderBuilder(builder) : LoggerType {\n return addBuilder(headerBuilders, builder);\n }\n\n function debug(event, payload) : LoggerType {\n return log(LOG_LEVEL.DEBUG, event, payload);\n }\n\n function info(event, payload) : LoggerType {\n return log(LOG_LEVEL.INFO, event, payload);\n }\n\n function warn(event, payload) : LoggerType {\n return log(LOG_LEVEL.WARN, event, payload);\n }\n\n function error(event, payload) : LoggerType {\n return log(LOG_LEVEL.ERROR, event, payload);\n }\n\n function track(payload = {}) : LoggerType {\n if (!isBrowser()) {\n return logger; // eslint-disable-line no-use-before-define\n }\n\n const trackingPayload : Payload = objFilter(payload);\n\n for (const builder of trackingBuilders) {\n extendIfDefined(trackingPayload, builder(trackingPayload));\n }\n\n print(LOG_LEVEL.DEBUG, 'track', trackingPayload);\n tracking.push(trackingPayload);\n\n return logger; // eslint-disable-line no-use-before-define\n }\n\n function setTransport(newTransport : Transport) : LoggerType {\n transport = newTransport;\n return logger; // eslint-disable-line no-use-before-define\n }\n\n function configure(opts : LoggerOptions) : LoggerType {\n if (opts.url) {\n url = opts.url;\n }\n\n if (opts.prefix) {\n prefix = opts.prefix;\n }\n\n if (opts.logLevel) {\n logLevel = opts.logLevel;\n }\n\n if (opts.transport) {\n transport = opts.transport;\n }\n\n if (opts.amplitudeApiKey) {\n amplitudeApiKey = opts.amplitudeApiKey;\n }\n\n if (opts.flushInterval) {\n flushInterval = opts.flushInterval;\n }\n\n if (opts.enableSendBeacon) {\n enableSendBeacon = opts.enableSendBeacon;\n }\n\n return logger; // eslint-disable-line no-use-before-define\n }\n\n if (isBrowser()) {\n safeInterval(flush, flushInterval);\n }\n\n if (typeof window === 'object') {\n window.addEventListener('beforeunload', () => {\n immediateFlush();\n });\n\n window.addEventListener('unload', () => {\n immediateFlush();\n });\n\n window.addEventListener('pagehide', () => {\n immediateFlush();\n });\n }\n\n const logger = {\n debug,\n info,\n warn,\n error,\n track,\n flush,\n immediateFlush,\n addPayloadBuilder,\n addMetaBuilder,\n addTrackingBuilder,\n addHeaderBuilder,\n setTransport,\n configure\n };\n\n return logger;\n}\n"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack://beaver/webpack/universalModuleDefinition","webpack://beaver/webpack/bootstrap","webpack://beaver/./node_modules/@babel/runtime/helpers/esm/extends.js","webpack://beaver/./node_modules/@krakenjs/zalgo-promise/src/utils.js","webpack://beaver/./node_modules/@krakenjs/zalgo-promise/src/exceptions.js","webpack://beaver/./node_modules/@krakenjs/zalgo-promise/src/flush.js","webpack://beaver/./node_modules/@krakenjs/zalgo-promise/src/promise.js","webpack://beaver/./node_modules/@krakenjs/cross-domain-utils/src/utils.js","webpack://beaver/./node_modules/@krakenjs/cross-domain-utils/src/constants.js","webpack://beaver/./node_modules/@krakenjs/cross-domain-safe-weakmap/src/util.js","webpack://beaver/./node_modules/@krakenjs/cross-domain-safe-weakmap/src/weakmap.js","webpack://beaver/./node_modules/@krakenjs/belter/src/util.js","webpack://beaver/./node_modules/@krakenjs/cross-domain-safe-weakmap/src/native.js","webpack://beaver/./node_modules/@krakenjs/belter/src/dom.js","webpack://beaver/./node_modules/@krakenjs/belter/src/constants.js","webpack://beaver/./node_modules/@krakenjs/belter/src/http.js","webpack://beaver/./src/constants.js","webpack://beaver/./src/config.js","webpack://beaver/./src/util.js","webpack://beaver/./src/http.js","webpack://beaver/./src/logger.js"],"names":["root","factory","exports","module","define","amd","self","this","installedModules","__webpack_require__","moduleId","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","hasOwnProperty","p","s","_extends","assign","target","arguments","length","source","apply","isPromise","item","Promise","window","Window","constructor","toString","then","err","flushPromise","dispatchedErrors","possiblyUnhandledPromiseHandlers","activeCount","flushActive","promise","resolve","startActive","endActive","ZalgoPromise","handler","resolved","rejected","errorHandled","error","handlers","dispatching","stack","result","isAsync","res","reject","Error","dispatch","setTimeout","indexOf","push","j","dispatchPossiblyUnhandledError","asyncReject","chain","firstPromise","secondPromise","onSuccess","onError","promiseResult","catch","undefined","finally","onFinally","try","timeout","time","clearTimeout","toPromise","TypeError","lazy","all","promises","count","results","slice","prom","hash","awaitPromises","map","items","method","onPossiblyUnhandledException","cancel","splice","context","args","delay","flush","IE_WIN_ACCESS_ERROR","getActualProtocol","win","location","protocol","getProtocol","mockDomain","split","isAboutProtocol","canReadFromWindow","getActualDomain","PROTOCOL","parent","getParent","host","getDomain","domain","isSameDomain","desc","getOwnPropertyDescriptor","isMockProtocol","isActuallySameDomain","iframeWindows","iframeFrames","isWindowClosed","allowMock","closed","message","mockclosed","top","iframeIndex","collection","safeIndexOf","frame","contentWindow","parentNode","doc","ownerDocument","documentElement","contains","isFrameWindowClosed","isWindow","obj","__cross_domain_utils_window_check__","objectIDs","CrossDomainSafeWeakMap","weakmap","keys","values","Math","random","WeakMap","freeze","testWeakMap","testKey","set","hasNativeWeakMap","_cleanupClosedWindows","delete","isSafeToReadWrite","entry","writable","index","has","getOrSet","getFunctionName","fn","__name__","displayName","setFunctionName","uniqueID","chars","replace","charAt","floor","str","btoa","encodeURIComponent","p1","String","fromCharCode","parseInt","Buffer","from","base64encode","Date","toISOString","toLowerCase","serializeArgs","JSON","stringify","Array","subkey","val","uid","getObjectID","element","passed","Element","nodeType","style","_","isElement","getEmptyObject","memoizeGlobalIndex","memoizeGlobalIndexValidFrom","memoize","options","simpleCache","thisCache","thisNamespace","cacheTime","memoizeIndex","memoizedFunction","cache","cacheKey","cacheResult","now","reset","noop","objFilter","filter","Boolean","isDocumentReady","document","body","readyState","isDocumentInteractive","isBrowser","clear","interval","setInterval","clearInterval","currentScript","getCurrentScript","getStackTrace","stackDetails","exec","scriptLocation","getElementsByTagName","reverse","script","src","inferCurrentScript","currentUID","getAttribute","ATTRIBUTES","hashedString","total","charCodeAt","abs","strHashStr","dataset","setAttribute","headerBuilders","LOG_LEVEL","DEBUG","INFO","WARN","ERROR","FILE","AUTO_FLUSH_LEVEL","LOG_LEVEL_PRIORITY","DEFAULT_LOG_LEVEL","canUseSendBeacon","headers","enableSendBeacon","hasHeaders","navigator","sendBeacon","Blob","isAmplitude","url","data","useBlob","json","blob","type","e","extendIfDefined","getHTTPTransport","httpWin","assertSameDomain","beaconResult","normalizedHeaders","builtHeaders","headerBuilder","xhr","XMLHttpRequest","addEventListener","responseHeaders","rawHeaders","trim","join","parseHeaders","getAllResponseHeaders","status","contentType","isJSON","responseBody","responseText","parse","evt","open","setRequestHeader","ontimeout","send","request","Logger","prefix","logLevel","transport","amplitudeApiKey","flushInterval","events","tracking","payloadBuilders","metaBuilders","trackingBuilders","print","level","event","payload","console","log","warning","immediateFlush","meta","builder","api_key","event_type","transition_name","event_properties","localPromise","logger","logPayload","timestamp","enqueue","addBuilder","builders","loop","safeInterval","debug","info","warn","track","trackingPayload","addPayloadBuilder","addMetaBuilder","addTrackingBuilder","addHeaderBuilder","setTransport","newTransport","configure","opts"],"mappings":"CAAA,SAA2CA,EAAMC,GAC1B,iBAAZC,SAA0C,iBAAXC,OACxCA,OAAOD,QAAUD,IACQ,mBAAXG,QAAyBA,OAAOC,IAC9CD,OAAO,SAAU,GAAIH,GACK,iBAAZC,QACdA,QAAgB,OAAID,IAEpBD,EAAa,OAAIC,IARnB,CASoB,oBAATK,KAAuBA,KAAOC,MAAO,WAChD,O,YCTE,IAAIC,EAAmB,GAGvB,SAASC,EAAoBC,GAG5B,GAAGF,EAAiBE,GACnB,OAAOF,EAAiBE,GAAUR,QAGnC,IAAIC,EAASK,EAAiBE,GAAY,CACzCC,EAAGD,EACHE,GAAG,EACHV,QAAS,IAUV,OANAW,EAAQH,GAAUI,KAAKX,EAAOD,QAASC,EAAQA,EAAOD,QAASO,GAG/DN,EAAOS,GAAI,EAGJT,EAAOD,QA0Df,OArDAO,EAAoBM,EAAIF,EAGxBJ,EAAoBO,EAAIR,EAGxBC,EAAoBQ,EAAI,SAASf,EAASgB,EAAMC,GAC3CV,EAAoBW,EAAElB,EAASgB,IAClCG,OAAOC,eAAepB,EAASgB,EAAM,CAAEK,YAAY,EAAMC,IAAKL,KAKhEV,EAAoBgB,EAAI,SAASvB,GACX,oBAAXwB,QAA0BA,OAAOC,aAC1CN,OAAOC,eAAepB,EAASwB,OAAOC,YAAa,CAAEC,MAAO,WAE7DP,OAAOC,eAAepB,EAAS,aAAc,CAAE0B,OAAO,KAQvDnB,EAAoBoB,EAAI,SAASD,EAAOE,GAEvC,GADU,EAAPA,IAAUF,EAAQnB,EAAoBmB,IAC/B,EAAPE,EAAU,OAAOF,EACpB,GAAW,EAAPE,GAA8B,iBAAVF,GAAsBA,GAASA,EAAMG,WAAY,OAAOH,EAChF,IAAII,EAAKX,OAAOY,OAAO,MAGvB,GAFAxB,EAAoBgB,EAAEO,GACtBX,OAAOC,eAAeU,EAAI,UAAW,CAAET,YAAY,EAAMK,MAAOA,IACtD,EAAPE,GAA4B,iBAATF,EAAmB,IAAI,IAAIM,KAAON,EAAOnB,EAAoBQ,EAAEe,EAAIE,EAAK,SAASA,GAAO,OAAON,EAAMM,IAAQC,KAAK,KAAMD,IAC9I,OAAOF,GAIRvB,EAAoB2B,EAAI,SAASjC,GAChC,IAAIgB,EAAShB,GAAUA,EAAO4B,WAC7B,WAAwB,OAAO5B,EAAgB,SAC/C,WAA8B,OAAOA,GAEtC,OADAM,EAAoBQ,EAAEE,EAAQ,IAAKA,GAC5BA,GAIRV,EAAoBW,EAAI,SAASiB,EAAQC,GAAY,MAAOjB,GAAiBkB,eAAezB,KAAKuB,EAAQC,IAGzG7B,EAAoB+B,EAAI,GAIjB/B,EAAoBA,EAAoBgC,EAAI,G,+BClFtC,SAASC,IAetB,OAdAA,EAAWrB,OAAOsB,QAAU,SAAUC,GACpC,IAAK,IAAIjC,EAAI,EAAGA,EAAIkC,UAAUC,OAAQnC,IAAK,CACzC,IAAIoC,EAASF,UAAUlC,GAEvB,IAAK,IAAIuB,KAAOa,GACV1B,IAAiBkB,eAAezB,KAAKiC,EAAQb,KAC/CU,EAAOV,GAAOa,EAAOb,IAK3B,OAAOU,IAGOI,MAAMzC,KAAMsC,WCbvB,SAASI,EAAUC,GACtB,IACI,IAAKA,EACD,OAAO,EAGX,GAAuB,oBAAZC,SAA2BD,aAAgBC,QAClD,OAAO,EAGX,GAAsB,oBAAXC,QAAmD,mBAAlBA,OAAOC,QAAyBH,aAAgBE,OAAOC,OAC/F,OAAO,EAGX,GAAsB,oBAAXD,QAAwD,mBAAvBA,OAAOE,aAA8BJ,aAAgBE,OAAOE,YACpG,OAAO,EAGX,IAAMC,EAAY,GAAIA,SAEtB,GAAIA,EAAU,CACV,IAAMrC,EAAOqC,EAASzC,KAAKoC,GAE3B,GAAa,oBAAThC,GAAuC,oBAATA,GAAuC,uBAATA,EAC5D,OAAO,EAIf,GAAyB,mBAAdgC,EAAKM,KACZ,OAAO,EAEb,MAAOC,GACL,OAAO,EAGX,OAAO,E,4WCjCX,ICCIC,EDDEC,EAAmB,GACnBC,EAA4F,GCD9FC,EAAc,EAGlB,SAASC,IACL,IAAKD,GAAeH,EAAc,CAC9B,IAAMK,EAAUL,EAChBA,EAAe,KACfK,EAAQC,WAIT,SAASC,IACZJ,GAAe,EAGZ,SAASK,IACZL,GAAe,EACfC,ICdG,IAAMK,EAAb,WAgBI,WAAYC,GAAuF,WAQ/F,GAR+F,KAdnGC,cAcmG,OAbnGC,cAamG,OAZnGC,kBAYmG,OAXnG3C,WAWmG,OAVnG4C,WAUmG,OARnGC,cAQmG,OAHnGC,iBAGmG,OAFnGC,WAEmG,EAE/FpE,KAAK8D,UAAW,EAChB9D,KAAK+D,UAAW,EAChB/D,KAAKgE,cAAe,EAEpBhE,KAAKkE,SAAW,GAEZL,EAAS,CAET,IAAIQ,EACAJ,EACAH,GAAW,EACXC,GAAW,EACXO,GAAU,EAEdZ,IAEA,IACIG,GAAQ,SAAAU,GACAD,EACA,EAAKb,QAAQc,IAEbT,GAAW,EACXO,EAASE,MAGd,SAAArB,GACKoB,EACA,EAAKE,OAAOtB,IAEZa,GAAW,EACXE,EAAQf,MAIlB,MAAOA,GAGL,OAFAS,SACA3D,KAAKwE,OAAOtB,GAIhBS,IAEAW,GAAU,EAENR,EAEA9D,KAAKyD,QAAQY,GACNN,GACP/D,KAAKwE,OAAOP,IAlE5B,2BA+EIR,QAAA,SAAQY,GACJ,GAAIrE,KAAK8D,UAAY9D,KAAK+D,SACtB,OAAO/D,KAGX,GAAI0C,EAAU2B,GACV,MAAM,IAAII,MAAM,gDAOpB,OAJAzE,KAAK8D,UAAW,EAChB9D,KAAKqB,MAAQgD,EACbrE,KAAK0E,WAEE1E,MA5Ff,EA+FIwE,OAAA,SAAOP,GAAiC,WACpC,GAAIjE,KAAK8D,UAAY9D,KAAK+D,SACtB,OAAO/D,KAGX,GAAI0C,EAAUuB,GACV,MAAM,IAAIQ,MAAM,+CAGpB,IAAKR,EAAO,CAER,IAAMf,EAAOe,GAAmC,mBAAnBA,EAAMjB,SAA0BiB,EAAMjB,WAAalC,GAAiBkC,SAASzC,KAAK0D,GAC/GA,EAAQ,IAAIQ,MAAJ,gDAA2DvB,GAgBvE,OAbAlD,KAAK+D,UAAW,EAChB/D,KAAKiE,MAAQA,EAERjE,KAAKgE,cACNW,YAAW,WACF,EAAKX,cFnHnB,SAA2Cd,EAAaM,GAE3D,IAAuC,IAAnCJ,EAAiBwB,QAAQ1B,GAA7B,CAIAE,EAAiByB,KAAK3B,GAEtByB,YAAW,WAMP,MAAMzB,IACP,GAEH,IAAK,IAAI4B,EAAI,EAAGA,EAAIzB,EAAiCd,OAAQuC,IAEzDzB,EAAiCyB,GAAG5B,EAAKM,IEiG7BuB,CAA+Bd,EAAO,KAE3C,GAGPjE,KAAK0E,WAEE1E,MA3Hf,EA8HIgF,YAAA,SAAYf,GAGR,OAFAjE,KAAKgE,cAAe,EACpBhE,KAAKwE,OAAOP,GACLjE,MAjIf,EAoII0E,SAAA,WAEI,IAAqBZ,EAAiC9D,KAAjC8D,SAAUC,EAAuB/D,KAAvB+D,SAAUG,EAAalE,KAAbkE,SAEzC,IAFsDlE,KAA9CmE,cAMHL,GAAaC,GAAlB,CAIA/D,KAAKmE,aAAc,EACnBT,IAUA,IARA,IAAMuB,EAAQ,SAAIC,EAAgCC,GAC9C,OAAOD,EAAajC,MAAK,SAAAsB,GACrBY,EAAc1B,QAAQc,MACvB,SAAArB,GACCiC,EAAcX,OAAOtB,OAIpB9C,EAAI,EAAGA,EAAI8D,EAAS3B,OAAQnC,IAAK,CAEtC,MAAwC8D,EAAS9D,GAAzCgF,EAAR,EAAQA,UAAWC,EAAnB,EAAmBA,QAAS7B,EAA5B,EAA4BA,QAExBa,OAAM,EAEV,GAAIP,EAEA,IACIO,EAASe,EAAYA,EAAUpF,KAAKqB,OAASrB,KAAKqB,MACpD,MAAO6B,GACLM,EAAQgB,OAAOtB,GACf,cAGD,GAAIa,EAAU,CAEjB,IAAKsB,EAAS,CACV7B,EAAQgB,OAAOxE,KAAKiE,OACpB,SAGJ,IACII,EAASgB,EAAQrF,KAAKiE,OACxB,MAAOf,GACLM,EAAQgB,OAAOtB,GACf,UAIR,GAAImB,aAAkBT,IAAiBS,EAAOP,UAAYO,EAAON,UAAW,CACxE,IAAMuB,EAAkCjB,EAEpCiB,EAAcxB,SACdN,EAAQC,QAAQ6B,EAAcjE,OAE9BmC,EAAQgB,OAAOc,EAAcrB,OAGjCqB,EAActB,cAAe,OAEtBtB,EAAU2B,GAEbA,aAAkBT,IAAiBS,EAAOP,UAAYO,EAAON,UACzDM,EAAOP,SACPN,EAAQC,QAAQY,EAAOhD,OAEvBmC,EAAQgB,OAAOH,EAAOJ,OAK1BgB,EAAMZ,EAAQb,GAKlBA,EAAQC,QAAQY,GAIxBH,EAAS3B,OAAS,EAClBvC,KAAKmE,aAAc,EACnBR,MA1NR,EA6NIV,KAAA,SAAWmC,EAA0DC,GAEjE,GAAID,GAAkC,mBAAdA,IAA6BA,EAAU7E,KAC3D,MAAM,IAAIkE,MAAM,wDAGpB,GAAIY,GAA8B,mBAAZA,IAA2BA,EAAQ9E,KACrD,MAAM,IAAIkE,MAAM,sDAGpB,IAAMjB,EAAU,IAAII,EAYpB,OAVA5D,KAAKkE,SAASW,KAAK,CACfrB,UACA4B,YACAC,YAGJrF,KAAKgE,cAAe,EAEpBhE,KAAK0E,WAEElB,GAnPf,EAsPI+B,MAAA,SAAYF,GAGR,OAD4CrF,KAAKiD,UAAKuC,EAAWH,IAxPzE,EA4PII,QAAA,SAAQC,GAEJ,GAAIA,GAAkC,mBAAdA,IAA6BA,EAAUnF,KAC3D,MAAM,IAAIkE,MAAM,uCAGpB,OAAOzE,KAAKiD,MAAK,SAACoB,GACd,OAAOT,EAAa+B,IAAID,GACnBzC,MAAK,WACF,OAAOoB,QAEhB,SAACnB,GACA,OAAOU,EAAa+B,IAAID,GACnBzC,MAAK,WACF,MAAMC,SA1Q1B,EA+QI0C,QAAA,SAAQC,EAAe3C,GAAgC,WAEnD,GAAIlD,KAAK8D,UAAY9D,KAAK+D,SACtB,OAAO/D,KAGX,IAAM4F,EAAUjB,YAAW,WAEnB,EAAKb,UAAY,EAAKC,UAI1B,EAAKS,OAAOtB,GAAO,IAAIuB,MAAJ,2BAAsCoB,EAAtC,SAEpBA,GAEH,OAAO7F,KAAKiD,MAAK,SAAAoB,GAEb,OADAyB,aAAaF,GACNvB,MAjSnB,EAsSI0B,UAAA,WAEI,GAAuB,oBAAZnD,QACP,MAAM,IAAIoD,UAAJ,0BAGV,OAAOpD,QAAQa,QAAQzD,OA5S/B,EA+SIiG,KAAA,WAEI,OADAjG,KAAKgE,cAAe,EACbhE,MAjTf,EAoTWyD,QAAP,SAAqBpC,GAEjB,OAAIA,aAAiBuC,EAEoBvC,EAIrCqB,EAAUrB,GAEH,IAAIuC,GAAa,SAACH,EAASe,GAAV,OAAqBnD,EAAM4B,KAAKQ,EAASe,OAG9D,IAAIZ,GAAeH,QAAQpC,IAjU1C,EAoUWmD,OAAP,SAAcP,GACV,OAAO,IAAIL,GAAeY,OAAOP,IArUzC,EAwUWe,YAAP,SAAmBf,GACf,OAAO,IAAIL,GAAeoB,YAAYf,IAzU9C,EA4UWiC,IAAP,SAAsCC,GAElC,IAAM3C,EAAU,IAAII,EAChBwC,EAAQD,EAAS5D,OAEf8D,EAAW,GAAkDC,QAEnE,IAAKF,EAED,OADA5C,EAAQC,QAAQ4C,GACT7C,EAeX,IAZA,IAAMyB,EAAQ,SAAI7E,EAAY8E,EAAgCC,GAC1D,OAAOD,EAAajC,MAAK,SAAAsB,GACrB8B,EAAQjG,GAAKmE,EAEC,IADd6B,GAAS,IAEL5C,EAAQC,QAAQ4C,MAErB,SAAAnD,GACCiC,EAAcX,OAAOtB,OAIpB9C,EAAI,EAAGA,EAAI+F,EAAS5D,OAAQnC,IAAK,CACtC,IAAMmG,EAAOJ,EAAS/F,GAEtB,GAAImG,aAAgB3C,GAChB,GAAI2C,EAAKzC,SAAU,CACfuC,EAAQjG,GAAKmG,EAAKlF,MAClB+E,GAAS,EACT,eAED,IAAK1D,EAAU6D,GAAO,CACzBF,EAAQjG,GAAKmG,EACbH,GAAS,EACT,SAGJnB,EAAM7E,EAAGwD,EAAaH,QAAQ8C,GAAO/C,GAOzC,OAJc,IAAV4C,GACA5C,EAAQC,QAAQ4C,GAGb7C,GA1Xf,EA6XWgD,KAAP,SAAwBL,GACpB,IAAM9B,EAAS,GACToC,EAAgB,GAFsE,WAIjF9E,GACP,GAAIwE,EAASnE,eAAeL,GAAM,CAC9B,IAAMN,EAAQ8E,EAASxE,GAEnBe,EAAUrB,GACVoF,EAAc5B,KAAKxD,EAAM4B,MAAK,SAAAsB,GAC1BF,EAAO1C,GAAO4C,MAGlBF,EAAO1C,GAAON,IAT1B,IAAK,IAAMM,KAAOwE,EAAU,EAAjBxE,GAcX,OAAOiC,EAAasC,IAAIO,GAAexD,MAAK,kBAAMoB,MA/Y1D,EAkZWqC,IAAP,SAAiBC,EAA2BC,GAExC,OAAOhD,EAAasC,IAAIS,EAAMD,IAAIE,KApZ1C,EAuZWC,6BAAP,SAAoChD,GAChC,OFjYD,SAAsCA,GAGzC,OAFAR,EAAiCwB,KAAKhB,GAE/B,CACHiD,OADG,WAECzD,EAAiC0D,OAAO1D,EAAiCuB,QAAQf,GAAU,KE4XxFgD,CAA6BhD,IAxZ5C,EA2ZW8B,IAAP,SAAuDiB,EAAqEI,EAAcC,GAEtI,GAAIL,GAA4B,mBAAXA,IAA0BA,EAAOrG,KAClD,MAAM,IAAIkE,MAAM,mCAGpB,IAAIJ,EAEJX,IAEA,IACIW,EAASuC,EAAOnE,MAAMuE,EAASC,GAAQ,IACzC,MAAO/D,GAEL,OADAS,IACOC,EAAaY,OAAOtB,GAQ/B,OALAS,IAGsBC,EAAaH,QAAQY,IA/anD,EAobW6C,MAAP,SAAaA,GACT,OAAO,IAAItD,GAAa,SAAAH,GACpBkB,WAAWlB,EAASyD,OAtbhC,EA0bWxE,UAAP,SAAiBrB,GAEb,SAAIA,GAASA,aAAiBuC,IAIvBlB,EAAUrB,IAhczB,EAmcW8F,MAAP,WACI,ODlbE3D,EAAUL,EAAeA,GAAgB,ICkbxBS,EDjbvBL,IACOC,EAHJ,IACGA,GClBV,KCAM4D,EAAsB,mCAErB,SAASC,EAAkBC,GAC9B,YAD6E,IAA/CA,MAA6BzE,QACpDyE,EAAIC,SAASC,SAGjB,SAASC,EAAYH,GACxB,QADuE,IAA/CA,MAA6BzE,QACjDyE,EAAII,WAAY,CAChB,IAAMF,EAAWF,EAAII,WAAWC,MAAM,MAAM,GAE5C,GAAIH,EACA,OAAOA,EAIf,OAAOH,EAAkBC,GAOtB,SAASM,EAAgBN,GAC5B,YAD2E,IAA/CA,MAA6BzE,QCxBjD,WDyBD4E,EAAYH,GAwChB,SAASO,EAAkBP,GAC9B,IAGI,OAAO,EACT,MAAOpE,IAIT,OAAO,EAGJ,SAAS4E,EAAgBR,QAA+C,IAA/CA,MAA8BzE,QAE1D,IAAM0E,EAAWD,EAAIC,SAErB,IAAKA,EACD,MAAM,IAAI9C,MAAJ,gCAGV,IAAM+C,EAAWH,EAAkBC,GAEnC,IAAKE,EACD,MAAM,IAAI/C,MAAJ,gCAGV,GC5FQ,UD4FJ+C,EACA,MAAWO,UAGf,GC/FQ,WD+FJP,EAA6B,CAE7B,IAAMQ,EAjEP,SAAmBV,GAEtB,QAFsF,IAAhEA,MAA+BzE,QAEhDyE,EAIL,IACI,GAAIA,EAAIU,QAAUV,EAAIU,SAAWV,EAC7B,OAAOA,EAAIU,OAEjB,MAAO9E,KAuDU+E,CAAUX,GACzB,OAAIU,GAAUH,IAEHC,EAAgBE,GAGhBD,WAGf,IAAMG,EAAOX,EAASW,KAEtB,IAAKA,EACD,MAAM,IAAIzD,MAAJ,4BAGV,OAAW+C,EAAX,KAA0BU,EAGvB,SAASC,EAAUb,QAA+C,IAA/CA,MAA8BzE,QAEpD,IAAMuF,EAASN,EAAgBR,GAE/B,OAAIc,GAAUd,EAAII,YAAwD,IAA1CJ,EAAII,WAAW9C,QCzHvC,SD0HG0C,EAAII,WAGRU,EAyEJ,SAASC,EAAaf,GAEzB,IAvDG,SAA8BA,GAEjC,IACI,GAAIA,IAAQzE,OACR,OAAO,EAGb,MAAOK,IAIT,IACI,IAAMoF,EAAOxH,OAAOyH,yBAAyBjB,EAAK,YAElD,GAAIgB,IAA4B,IAApBA,EAAKtH,WACb,OAAO,EAGb,MAAOkC,IAIT,IAEI,GAAI0E,EAAgBN,IAAQO,IACxB,OAAO,EAEb,MAAO3E,IAIT,IAEI,GApJD,SAAwBoE,GAC3B,YAD0E,IAA/CA,MAA6BzE,QC9BhD,UD+BD4E,EAAYH,GAmJXkB,CAAelB,IAAQO,IACvB,OAAO,EAEb,MAAO3E,IAIT,IAEI,GAAI4E,EAAgBR,KAASQ,EAAgBjF,QACzC,OAAO,EAGb,MAAOK,IAIT,OAAO,EAKFuF,CAAqBnB,GACtB,OAAO,EAGX,IACI,GAAIA,IAAQzE,OACR,OAAO,EAIX,GAAI+E,EAAgBN,IAAQO,IACxB,OAAO,EAIX,GAAIM,EAAUtF,UAAYsF,EAAUb,GAChC,OAAO,EAGb,MAAOpE,IAIT,OAAO,EAoQX,IAAMwF,EAAgB,GAChBC,EAAe,GAEd,SAASC,EAAetB,EAA6BuB,QAAsC,IAAtCA,OAAsB,GAE9E,IACI,GAAIvB,IAAQzE,OACR,OAAO,EAEb,MAAOK,GACL,OAAO,EAGX,IACI,IAAKoE,EACD,OAAO,EAGb,MAAOpE,GACL,OAAO,EAGX,IACI,GAAIoE,EAAIwB,OACJ,OAAO,EAGb,MAAO5F,GAIL,OAAIA,GAAOA,EAAI6F,UAAY3B,EAQ/B,GAAIyB,GAAaR,EAAaf,GAC1B,IAEI,GAAIA,EAAI0B,WACJ,OAAO,EAEb,MAAO9F,IAOb,IACI,IAAKoE,EAAIU,SAAWV,EAAI2B,IACpB,OAAO,EAEb,MAAO/F,IAeT,IAAMgG,EAtFV,SAAwBC,EAAgCxG,GACpD,IAAK,IAAIvC,EAAI,EAAGA,EAAI+I,EAAW5G,OAAQnC,IAEnC,IACI,GAAI+I,EAAW/I,KAAOuC,EAClB,OAAOvC,EAEb,MAAO8C,IAKb,OAAQ,EA0EYkG,CAAYV,EAAepB,GAE/C,IAAqB,IAAjB4B,EAAoB,CACpB,IAAMG,EAAQV,EAAaO,GAE3B,GAAIG,GAvHL,SAA6BA,GAEhC,IAAKA,EAAMC,cACP,OAAO,EAGX,IAAKD,EAAME,WACP,OAAO,EAGX,IAAMC,EAAMH,EAAMI,cAElB,GAAID,GAAOA,EAAIE,kBAAoBF,EAAIE,gBAAgBC,SAASN,GAAQ,CAGpE,IAFA,IAAIrB,EAASqB,EAENrB,EAAOuB,YAAcvB,EAAOuB,aAAevB,GAC9CA,EAASA,EAAOuB,WAIpB,IAAKvB,EAAOE,OAASsB,EAAIE,gBAAgBC,SAAS3B,EAAOE,MACrD,OAAO,EAIf,OAAO,EA8FU0B,CAAoBP,GAC7B,OAAO,EAIf,OAAO,EAqYJ,SAASQ,EAASC,GAErB,IACI,GAAIA,IAAQjH,OACR,OAAO,EAEb,MAAOK,GACL,GAAIA,GAAOA,EAAI6F,UAAY3B,EACvB,OAAO,EAIf,IAEI,GAA4C,oBAAxCtG,GAAiBkC,SAASzC,KAAKuJ,GAC/B,OAAO,EAEb,MAAO5G,GACL,GAAIA,GAAOA,EAAI6F,UAAY3B,EACvB,OAAO,EAIf,IACI,GAAIvE,OAAOC,QAAUgH,aAAejH,OAAOC,OACvC,OAAO,EAEb,MAAOI,GACL,GAAIA,GAAOA,EAAI6F,UAAY3B,EACvB,OAAO,EAIf,IACI,GAAI0C,GAAOA,EAAI/J,OAAS+J,EACpB,OAAO,EAEb,MAAO5G,GACL,GAAIA,GAAOA,EAAI6F,UAAY3B,EACvB,OAAO,EAIf,IACI,GAAI0C,GAAOA,EAAI9B,SAAW8B,EACtB,OAAO,EAEb,MAAO5G,GACL,GAAIA,GAAOA,EAAI6F,UAAY3B,EACvB,OAAO,EAIf,IACI,GAAI0C,GAAOA,EAAIb,MAAQa,EACnB,OAAO,EAEb,MAAO5G,GACL,GAAIA,GAAOA,EAAI6F,UAAY3B,EACvB,OAAO,EAaf,IACI,GAAI0C,GAAmD,uBAA5CA,EAAIC,oCACX,OAAO,EAGb,MAAO7G,GACL,OAAO,EAGX,IACI,GAAI,gBAAiB4G,GAAO,SAAUA,GAAO,aAAcA,EACvD,OAAO,EAEb,MAAO5G,IAIT,OAAO,EEnhCJ,SAASkG,EAAeD,EAAgCxG,GAC3D,IAAK,IAAIvC,EAAI,EAAGA,EAAI+I,EAAW5G,OAAQnC,IAEnC,IACI,GAAI+I,EAAW/I,KAAOuC,EAClB,OAAOvC,EAEb,MAAO8C,IAKb,OAAQ,ECPL,IC4FH8G,ED5FSC,EAAb,WASI,aAII,GAJU,KAPdtJ,UAOc,OANduJ,aAMc,OAJdC,UAIc,OAFdC,YAEc,EAEVpK,KAAKW,KAAL,cAA0C,IAAhB0J,KAAKC,WAAmB,GAAlD,KEhBD,WAEH,GAAuB,oBAAZC,QACP,OAAO,EAGX,QAA6B,IAAlBzJ,OAAO0J,OACd,OAAO,EAGX,IAEI,IAAMC,EAAc,IAAIF,QAClBG,EAAU,GAOhB,OAJA5J,OAAO0J,OAAOE,GAEdD,EAAYE,IAAID,EAJE,mCAMdD,EAAYxJ,IAAIyJ,GAMtB,MAAOxH,GAEL,OAAO,GFVH0H,GACA,IACI5K,KAAKkK,QAAU,IAAIK,QACrB,MAAOrH,IAKblD,KAAKmK,KAAQ,GACbnK,KAAKoK,OAAS,GAtBtB,2BAyBIS,sBAAA,WAKI,IAHA,IAAMX,EAAUlK,KAAKkK,QACfC,EAAOnK,KAAKmK,KAET/J,EAAI,EAAGA,EAAI+J,EAAK5H,OAAQnC,IAAK,CAClC,IAAMiB,EAAQ8I,EAAK/J,GAEnB,GAAIyJ,EAASxI,IAAUuH,EAAevH,GAAQ,CAE1C,GAAI6I,EACA,IACIA,EAAQY,OAAOzJ,GACjB,MAAO6B,IAKbiH,EAAKpD,OAAO3G,EAAG,GACfJ,KAAKoK,OAAOrD,OAAO3G,EAAG,GAEtBA,GAAK,KA9CrB,EAmDI2K,kBAAA,SAAkBpJ,GAEd,OAAIkI,EAASlI,IArDrB,EAmEIgJ,IAAA,SAAIhJ,EAASN,GAET,IAAKM,EACD,MAAM,IAAI8C,MAAJ,wBAGV,IAAMyF,EAAUlK,KAAKkK,QAErB,GAAIA,EACA,IACIA,EAAQS,IAAIhJ,EAAKN,GACnB,MAAO6B,UACElD,KAAKkK,QAIpB,GAAIlK,KAAK+K,kBAAkBpJ,GACvB,IACI,IAAMhB,EAAOX,KAAKW,KACZqK,EAAQrJ,EAAIhB,GAWlB,YATIqK,GAASA,EAAM,KAAOrJ,EACtBqJ,EAAM,GAAK3J,EAEXP,OAAOC,eAAeY,EAAKhB,EAAM,CAC7BU,MAAU,CAAEM,EAAKN,GACjB4J,UAAU,KAMpB,MAAO/H,IAKblD,KAAK6K,wBAEL,IAAMV,EAAOnK,KAAKmK,KACZC,EAASpK,KAAKoK,OACdc,EAAQ9B,EAAYe,EAAMxI,IAEjB,IAAXuJ,GACAf,EAAKtF,KAAKlD,GACVyI,EAAOvF,KAAKxD,IAEZ+I,EAAOc,GAAS7J,GAlH5B,EAsHIJ,IAAA,SAAIU,GAEA,IAAKA,EACD,MAAM,IAAI8C,MAAJ,wBAGV,IAAMyF,EAAUlK,KAAKkK,QAErB,GAAIA,EACA,IACI,GAAIA,EAAQiB,IAAIxJ,GACZ,OAAOuI,EAAQjJ,IAAIU,GAGzB,MAAOuB,UACElD,KAAKkK,QAIpB,GAAIlK,KAAK+K,kBAAkBpJ,GACvB,IACI,IAAMqJ,EAAQrJ,EAAI3B,KAAKW,MAEvB,OAAIqK,GAASA,EAAM,KAAOrJ,EACfqJ,EAAM,QAGjB,EACF,MAAO9H,IAKblD,KAAK6K,wBAEL,IACMK,EAAQ9B,EADDpJ,KAAKmK,KACcxI,GAEhC,IAAe,IAAXuJ,EAIJ,OAAOlL,KAAKoK,OAAOc,IAhK3B,EAmKIJ,OAAA,SAAOnJ,GAEH,IAAKA,EACD,MAAM,IAAI8C,MAAJ,wBAGV,IAAMyF,EAAUlK,KAAKkK,QAErB,GAAIA,EACA,IACIA,EAAQY,OAAOnJ,GACjB,MAAOuB,UACElD,KAAKkK,QAIpB,GAAIlK,KAAK+K,kBAAkBpJ,GACvB,IACI,IAAMqJ,EAAQrJ,EAAI3B,KAAKW,MAEnBqK,GAASA,EAAM,KAAOrJ,IACtBqJ,EAAM,GAAKA,EAAM,QAAKxF,GAE5B,MAAOtC,IAKblD,KAAK6K,wBAEL,IAAMV,EAAOnK,KAAKmK,KACZe,EAAQ9B,EAAYe,EAAMxI,IAEjB,IAAXuJ,IACAf,EAAKpD,OAAOmE,EAAO,GACnBlL,KAAKoK,OAAOrD,OAAOmE,EAAO,KAtMtC,EA0MIC,IAAA,SAAIxJ,GAEA,IAAKA,EACD,MAAM,IAAI8C,MAAJ,wBAGV,IAAMyF,EAAUlK,KAAKkK,QAErB,GAAIA,EACA,IACI,GAAIA,EAAQiB,IAAIxJ,GACZ,OAAO,EAEb,MAAOuB,UACElD,KAAKkK,QAIpB,GAAIlK,KAAK+K,kBAAkBpJ,GACvB,IACI,IAAMqJ,EAAQrJ,EAAI3B,KAAKW,MAEvB,SAAIqK,GAASA,EAAM,KAAOrJ,GAK5B,MAAOuB,IAQb,OAHAlD,KAAK6K,yBAGa,IADJzB,EAAYpJ,KAAKmK,KAAMxI,IA5O7C,EAgPIyJ,SAAA,SAASzJ,EAASf,GACd,GAAIZ,KAAKmL,IAAIxJ,GAET,OAAO3B,KAAKiB,IAAIU,GAGpB,IAAMN,EAAQT,IAEd,OADAZ,KAAK2K,IAAIhJ,EAAKN,GACPA,GAxPf,KCkBO,SAASgK,EAA+BC,GAC3C,OAAOA,EAAG3K,MAAQ2K,EAAGC,UAAYD,EAAGE,aAAe,YAGhD,SAASC,EAA+BH,EAAQ3K,GACnD,WACW2K,EAAG3K,KACV2K,EAAG3K,KAAOA,EACZ,MAAOuC,IAKT,OADAoI,EAAGC,SAAWD,EAAGE,YAAc7K,EACxB2K,EAiCJ,SAASI,IAEZ,IAAMC,EAAQ,mBAUd,aARiB,aAAaC,QAAQ,MAAM,WACxC,OAAOD,EAAME,OAAOxB,KAAKyB,MAAMzB,KAAKC,SAAWqB,EAAMpJ,YAOzD,IA1CG,SAAsBwJ,GACzB,GAAoB,mBAATC,KACP,OAAOA,KAAKC,mBAAmBF,GAAKH,QAAQ,mBAAmB,SAACpL,EAAG0L,GAC/D,OAAOC,OAAOC,aAAaC,SAASH,EAAI,SACxCN,QAAQ,OAAQ,IAGxB,GAAsB,oBAAXU,OACP,OAAOA,OAAOC,KAAKR,EAAK,QAAQ/I,SAAS,UAAU4I,QAAQ,OAAQ,IAGvE,MAAM,IAAInH,MAAJ,sCA2BS+H,EACX,IAAIC,MAAOC,cAAcpG,MAAM,GAAI,IAAIsF,QAAQ,IAAK,MACtDA,QAAQ,gBAAiB,IAAIe,cAsCnC,SAASC,EAAiB3F,GACtB,IAEI,OAAO4F,KAAKC,UAAUC,GAAgBzG,MAAM/F,KAAK0G,IAAO,SAAC+F,EAAQC,GAK7D,MAAmB,mBAARA,EACP,WA3BT,SAAqBnD,GAIxB,GAFAE,EAAYA,GAAa,IAAIO,EAEzBT,SAAqD,iBAARA,GAAmC,mBAARA,EACxE,MAAM,IAAIrF,MAAJ,kBAGV,IAAIyI,EAAMlD,EAAU/I,IAAI6I,GAOxB,OALKoD,IACDA,SAAiBpD,EAAd,IAAuB4B,IAC1B1B,EAAUW,IAAIb,EAAKoD,IAGhBA,EAYwBC,CAAYF,GAA/B,IAvHT,SAAmBG,GACtB,IAAIC,GAAS,EAEb,KACQD,aAAmBvK,OAAOyK,SAEP,OAAZF,GAAuC,iBAAZA,GAA6C,IAArBA,EAAQG,UAA2C,iBAAlBH,EAAQI,OAAuD,iBAA1BJ,EAAQ3D,iBADxI4D,GAAS,GAIf,MAAOI,IAIT,OAAOJ,EA+GKK,CAAUT,GACH,GAGJA,KAEb,MAAO/J,GACL,MAAM,IAAIuB,MAAJ,6DAIP,SAASkJ,IAEZ,MAAO,GASX,IAOIC,EAAqB,EACrBC,EAA8B,EAE3B,SAASC,EAAsBlH,EAAYmH,QAAsE,IAAtEA,MARvC,IASP,IAEIC,EACAC,EAHJ,EAAmDF,EAA3CG,qBAAR,SAAqCC,EAAcJ,EAApBlI,KAK3BuI,EAAeR,EACnBA,GAAsB,EAEtB,IAAMS,EAAmB,WAA2C,2BAAdpH,EAAc,yBAAdA,EAAc,gBAQhE,IAAIqH,EASAC,EAhBAH,EAAeP,IACfG,EAAc,KACdC,EAAY,KACZG,EAAeR,EACfA,GAAsB,GAOtBU,EAFAJ,GACAD,EAAYA,GAAa,IAAI1D,GACXa,SAASpL,KAAM2N,GAEzBK,EAAcA,GAAe,GAKzC,IACIO,EAAW3B,EAAc3F,GAC3B,SACE,OAAOL,EAAOnE,MAAMzC,KAAMsC,WAG9B,IAAIkM,EAAcF,EAAMC,GAOxB,GALIC,GAAeL,GAAc1B,KAAKgC,MAAQD,EAAY3I,KAAQsI,WACvDG,EAAMC,GACbC,EAAc,MAGdA,EACA,OAAOA,EAAYnN,MAGvB,IAAMwE,EAAQ4G,KAAKgC,MACbpN,EAAQuF,EAAOnE,MAAMzC,KAAMsC,WAIjC,OAFAgM,EAAMC,GAAY,CAAE1I,OAAMxE,SAEnBA,GAWX,OARAgN,EAAiBK,MAAQ,WACrBV,EAAc,KACdC,EAAY,MAMTxC,EAFY4C,GAEgBN,EAAQpN,MAAQ0K,EAAgBzE,IAA7C,cA6EnB,SAAS+H,KA4PT,SAASC,EAAgB9E,EAAwB+E,QAA8D,IAA9DA,MAAkCC,SACtF,IAAMzK,EAAS,GAEf,IAAK,IAAM1C,KAAOmI,EACTA,EAAI9H,eAAeL,IAASkN,EAAO/E,EAAInI,GAAMA,KAIlD0C,EAAO1C,GAAOmI,EAAInI,IAGtB,OAAO0C,EE5hBJ,SAAS0K,IAEZ,OAAOD,QAAQE,SAASC,OAAkC,aAAxBD,SAASE,WAGxC,SAASC,IAEZ,OAAOL,QAAQE,SAASC,OAAkC,gBAAxBD,SAASE,WAmOxC,SAASE,IACZ,MAA0B,oBAAXvM,aAA+C2C,IAApB3C,OAAO0E,SFhCrDuG,EAAQuB,MAAQ,WACZxB,EAA8BD,GAgSyCE,GAnBpE,SAAmBhE,GACtB,GAAIhJ,OAAOsJ,OAEP,OAAOtJ,OAAOsJ,OAAON,GAGzB,IAAMzF,EAAoB,GAC1B,IAAK,IAAM1C,KAAOmI,EACVA,EAAI9H,eAAeL,IAEnB0C,EAAOQ,KAAKiF,EAAInI,IAKxB,OAAO0C,KAitB0BI,ME7pCsBqJ,GAAQ,WAC/D,OAAO,IAAIlK,GAAa,SAAAH,GAEpB,GAAIsL,KAAqBI,IACrB,OAAO1L,IAGX,IAAM6L,EAAWC,aAAY,WACzB,GAAIR,KAAqBI,IAErB,OADAK,cAAcF,GACP7L,MAEZ,UA2lCX,IAAIgM,EAAoC,oBAAbT,SAA2BA,SAASS,cAAgB,KAIlEC,EAAsC5B,GAAQ,WACvD,GAAI2B,EACA,OAAOA,EAKX,GAFAA,EAhCJ,WACI,IACI,IAAMrL,EAXP,WACH,IACI,MAAM,IAAIK,MAAM,KAEpB,MAAOvB,GACH,OAAOA,EAAIkB,OAAS,IAMNuL,GACRC,EAAgB,kCAAmCC,KAAKzL,GACxD0L,EAAiBF,GAAgBA,EAAa,GAEpD,IAAKE,EACD,OANJ,cAUqB/C,GAAgBzG,MAAM/F,KAAKyO,SAASe,qBAAqB,WAAWC,UAVzF,eAUoG,CAA/F,IAAMC,EAAM,KACb,GAAIA,EAAOC,KAAOD,EAAOC,MAAQJ,EAC7B,OAAOG,GAIjB,MAAO/M,KAeOiN,GAGZ,OAAOV,EAGX,MAAM,IAAIhL,MAAM,uCAGd2L,EAAa1E,IAIsCoC,GAAQ,WAC7D,IAAImC,EAEJ,IACIA,EAASP,IACX,MAAOxM,GACL,OAAOkN,EAGX,IAAIlD,EAAM+C,EAAOI,aCprCZ,YDsrCL,GAAInD,GAAsB,iBAARA,EACd,OAAOA,EAKX,IAFAA,EAAM+C,EAAOI,aAAiBC,mBAEJ,iBAARpD,EACd,OAAOA,EAGX,GAAI+C,EAAOC,IAAK,CAEZ,IAEMK,EFp4BP,SAAoBxE,GAGvB,IAFA,IAAIvF,EAAO,GAEFpG,EAAI,EAAGA,EAAI2L,EAAIxJ,OAAQnC,IAAK,CACjC,IAAIoQ,EAASzE,EAAI3L,GAAGqQ,WAAW,GAAKrQ,EAEhC2L,EAAI3L,EAAI,KACRoQ,GAAUzE,EAAI3L,EAAI,GAAGqQ,WAAW,IAAMrQ,EAAI,IAG9CoG,GAAQ2F,OAAOC,aAAa,GAAM/B,KAAKqG,IAAIF,GAAS,IAGxD,OAAOhK,EEu3BkBmK,CADA9D,KAAKC,UAAU,CAAEoD,IADbD,EAAjBC,IACmCU,QADlBX,EAAZW,WAKb1D,EAAM,OAFaqD,EAAajK,MAAMiK,EAAahO,OClsC5B,SDssCvB2K,EAAMxB,IAKV,OAFAuE,EAAOY,aAAiBP,gBAAwBpD,GAEzCA,KEhsCX,IAKM4D,EAAiB,GCzBVC,EAAY,CACrBC,MAAQ,QACRC,KAAQ,OACRC,KAAQ,OACRC,MAAQ,SAGCpJ,EAAW,CACpBqJ,KAAM,SCNGC,EAAmB,CAAEN,EAAUG,KAAMH,EAAUI,OAE/CG,EAAqB,CAAEP,EAAUI,MAAOJ,EAAUG,KAAMH,EAAUE,KAAMF,EAAUC,OAIlFO,EAA8ER,EAAUG,KCE/FM,EAAmB,SAAC,GAAkE,IAAhEC,EAAgE,EAAhEA,QAASC,EAAuD,EAAvDA,iBAC3BC,EAAaF,GAAW3Q,OAAOqJ,KAAKsH,GAASlP,OACnD,SAAIM,QAAUA,OAAO+O,UAAUC,aAAeF,GAAcD,GAAoB7O,OAAOiP,OAOrFC,EAAc,SAACC,GACjB,MDVyB,yCCUrBA,GAcFH,EAAa,SAAC,GAA8E,QAA5EvK,WAA4E,MAAtEzE,OAAsE,EAA9DmP,EAA8D,EAA9DA,IAAKC,EAAyD,EAAzDA,KAAyD,IAAnDC,eAAmD,SAC9F,IACI,IAAMC,EAAOtF,KAAKC,UAAUmF,GAE5B,IAAK3K,EAAIsK,UAAUC,WACf,MAAM,IAAIpN,MAAJ,2BAGV,GAAIyN,EAAS,CACT,IAAME,EAAO,IAAIN,KAAK,CAAEK,GAAQ,CAAEE,KAAM,qBACxC,OAAO/K,EAAIsK,UAAUC,WAAWG,EAAKI,GAGzC,OAAO9K,EAAIsK,UAAUC,WAAWG,EAAKG,GACvC,MAAOG,GACL,OAAO,IAITC,EAAkB,SAAClQ,EAAkBG,GACvC,IAAK,IAAMb,KAAOa,EACVA,EAAOR,eAAeL,KACtBU,EAAOV,GAAOa,EAAOb,KCxC1B,SAAS6Q,GAAiBC,QAAsD,IAAtDA,MAAkC5P,QAC/D,IAAMyE,EAAMe,EAAaoK,GZmNtB,SAA0BnL,GAC7B,IAAKe,EAAaf,GACd,MAAM,IAAI7C,MAAJ,qCAIV,OAAO6C,EYzN6BoL,CAAiBD,GAAW5P,OAEhE,OAAO,YAAsG,IAAnGmP,EAAmG,EAAnGA,IAAKpL,EAA8F,EAA9FA,OAAQ6K,EAAsF,EAAtFA,QAASU,EAA6E,EAA7EA,KAA6E,IAAvET,wBAAuE,SACzG,OAAO9N,EAAa+B,KAAI,WACpB,IAAIgN,GAAe,EAUnB,OARInB,EAAiB,CAAEC,UAASC,uBAExBiB,EADAZ,EAAYC,GACGH,EAAW,CAAEvK,MAAK0K,MAAKC,KAAME,EAAMD,SAAS,IAE5CL,EAAW,CAAEvK,MAAK0K,MAAKC,KAAME,EAAMD,SAAS,KAI5DS,GJKZ,YAAuJ,IAApIX,EAAoI,EAApIA,IAAoI,IAA/HpL,cAA+H,MAAtH,MAAsH,MAA/G6K,eAA+G,MAArG,GAAqG,EAAjGU,EAAiG,EAAjGA,KAAMF,EAA2F,EAA3FA,KAAMhD,EAAqF,EAArFA,KAAqF,IAA/E3H,WAA+E,MAAzEzE,OAAyE,MAAjE+C,eAAiE,MAAvD,EAAuD,EAC1J,OAAO,IAAIhC,GAAa,SAACH,EAASe,GAE9B,GAAK2N,GAAQF,GAAUE,GAAQlD,GAAUgD,GAAQE,EAC7C,MAAM,IAAI1N,MAAJ,sEAH+B,IAMzC,IAAMmO,EAAoB,GANe,MAQvB9R,OAAOqJ,KAAKsH,GARW,eAQD,CAAnC,IAAM9P,EAAG,KACViR,EAAkBjR,EAAIgL,eAAiB8E,EAAQ9P,GAG/CwQ,EACAS,EA7BM,gBA6BoCA,EA7BpC,iBA6B+E,oBAC9EX,GAAQhD,KACf2D,EA/BM,gBA+BoCA,EA/BpC,iBA+B+E,oDAGzFA,EAAiB,OAAmBA,EAAiB,QAAoB,mBAlBhC,cAoBb9B,EApBa,WAoBG,IAAvC,IACK+B,GAAeC,EADGhC,EAAJ,MAAoB,MAGtBhQ,OAAOqJ,KAAK0I,GAHU,eAGK,CAAxC,IAAMlR,EAAG,KACViR,EAAkBjR,EAAIgL,eAAiBkG,EAAalR,GAI5D,IAAMoR,EAAM,IAAIzL,EAAI0L,eAsCpB,IAAK,IAAMrR,KApCXoR,EAAIE,iBAAiB,QAAQ,WAEzB,IAAMC,EA1ClB,SAAsBC,QAAkD,IAAlDA,MAAsB,IAA4B,IACpE,IAAM9O,EAAS,GADqD,MAEjD8O,EAAWC,OAAOzL,MAAM,MAFyB,eAElB,CAA7C,IACD,EADW,KACqBA,MAAM,KAA9BhG,EAAR,KAAgByI,EAAhB,WACA/F,EAAO1C,EAAIgL,eAAiBvC,EAAOiJ,KAAK,KAAKD,OAEjD,OAAO/O,EAoCyBiP,CAAatT,KAAKuT,yBAE1C,IAAKvT,KAAKwT,OACN,OAAOhP,EAAO,IAAIC,MAAJ,cAAyBmC,EAAO+F,cAAhC,IAAmDqF,EAAnD,sCAGlB,IAAMyB,EAAcP,EAAgB,gBAC9BQ,EAASD,IAA4D,IAA5CA,EAAY7O,QAAQ,qBAAkE,IAArC6O,EAAY7O,QAAQ,cAChG+O,EAAe3T,KAAK4T,aAExB,IACID,EAAe9G,KAAKgH,MAAMF,GAC5B,MAAOzQ,GACL,GAAIwQ,EACA,OAAOlP,EAAO,IAAIC,MAAJ,iBAA4BzE,KAAK4T,aAAjC,MAUtB,OAAOnQ,EANK,CACR+P,OAASxT,KAAKwT,OACd/B,QAASyB,EACTjE,KAAS0E,OAKd,GAEHZ,EAAIE,iBAAiB,SAAS,SAACa,GAC3BtP,EAAO,IAAIC,MAAJ,cAAyBmC,EAAO+F,cAAhC,IAAmDqF,EAAnD,YAAoE8B,EAAI9Q,WAAxE,SACR,GAEH+P,EAAIgB,KAAKnN,EAAQoL,GAAK,GAEJY,EACVA,EAAkB5Q,eAAeL,IACjCoR,EAAIiB,iBAAiBrS,EAAKiR,EAAkBjR,IAIhDwQ,EACAlD,EAAOpC,KAAKC,UAAUqF,GACfF,IACPhD,EAAOnO,OAAOqJ,KAAK8H,GAAMvL,KAAI,SAAA/E,GACzB,OAAWsK,mBAAmBtK,GAA9B,KAAwCsQ,EAAOhG,mBAAmBgG,EAAKtQ,IAAQ,OAChF0R,KAAK,MAGZN,EAAInN,QAAUA,EACdmN,EAAIkB,UAAY,WACZzP,EAAO,IAAIC,MAAJ,cAAyBmC,EAAO+F,cAAhC,IAAmDqF,EAAnD,oBAGXe,EAAImB,KAAKjF,MI3FgCkF,CAAQ,CAAE7M,MAAK0K,MAAKpL,SAAQ6K,UAASU,YAC3ElP,KAAK0L,ICcT,SAASyF,GAAT,GAAuM,IAArLpC,EAAqL,EAArLA,IAAKqC,EAAgL,EAAhLA,OAAgL,IAAxKC,gBAAwK,MAA7J/C,EAA6J,MAA1IgD,iBAA0I,MAA9H/B,KAA8H,EAA1GgC,EAA0G,EAA1GA,gBAA0G,IAAzFC,qBAAyF,MHxChL,IGwCgL,MAAzD/C,wBAAyD,SAEtMgD,EAA6F,GAC7FC,EAA4B,GAE1BC,EAAmC,GACnCC,EAAgC,GAChCC,EAAoC,GACpChE,EAAkC,GAExC,SAASiE,EAAMC,EAAmCC,EAAgBC,GAE9D,GAAK9F,KAAgBvM,OAAOsS,SAAYtS,OAAOsS,QAAQC,OAInD9D,EAAmB1M,QAAQoQ,GAAS1D,EAAmB1M,QAAQ0P,IAAnE,CAIA,IAAMrN,EAAO,CAAEgO,GAEfhO,EAAKpC,KAAKqQ,IAENA,EAAQjR,OAASiR,EAAQG,UACzBpO,EAAKpC,KAAK,OAAQqQ,EAAQjR,OAASiR,EAAQG,SAG/C,IACQxS,OAAOsS,QAAQH,IAAUnS,OAAOsS,QAAQH,GAAOvS,MAC/CI,OAAOsS,QAAQH,GAAOvS,MAAMI,OAAOsS,QAASlO,GACrCpE,OAAOsS,QAAQC,KAAOvS,OAAOsS,QAAQC,IAAI3S,OAChDI,OAAOsS,QAAQC,IAAI3S,MAAMI,OAAOsS,QAASlO,GAE/C,MAAO/D,MAKb,SAASoS,IACL,OAAO1R,EAAa+B,KAAI,WACpB,GAAKyJ,KAAevM,OAAO0E,SAASC,WAAaO,EAASqJ,OAIrDsD,EAAOnS,QAAWoS,EAASpS,QAAhC,CAL0B,IAS1B,IAAMgT,EAAO,GATa,MAUJV,EAVI,WAWtBtC,EAAgBgD,GAAMC,EADJX,EAAJ,IACgBU,IAXR,IAc1B,IAKIhR,EALEkN,EAAU,GAdU,MAeJX,EAfI,WAgBtByB,EAAgBd,GAAS+D,EADP1E,EAAJ,IACmBW,IA0CrC,OArCIO,IACAzN,EAAMgQ,EAAU,CACZ3N,OAAQ,OACRoL,MACAP,UACAU,KAAQ,CACJuC,SACAa,OACAZ,YAEJjD,qBACDnM,MAAMoJ,IAGT6F,GACAD,EAAU,CACN3N,OAAS,OACToL,IHlHS,uCGmHTP,QAAS,GACTU,KAAS,CACLsD,QAASjB,EACTE,OAASC,EAASjO,KAAI,SAACwO,GAEnB,UACIQ,WAAkBR,EAAQS,iBAAmB,QAC7CC,iBAAkBV,GACfA,OAIfxD,qBACDnM,MAAMoJ,GAGb+F,EAAS,GACTC,EAAW,GAEJ/Q,EAAaH,QAAQc,GAAKtB,KAAK0L,OAI9C,ITgb+B/H,EAAoCM,EAE/D1D,EACAoC,ESnbEuB,QTgb0G,IAA7CD,MAAiB,IAyB7EuE,GApBkB,WACjB7F,GACAE,aAAaF,GAGjB,IAAMiQ,EAAerS,EAAUA,GAAW,IAAII,EAY9C,OAVAgC,EAAUjB,YAAW,WACjBnB,EAAU,KACVoC,EAAU,KAEVhC,EAAa+B,IAAIiB,GAAQ3D,MACrB,SAAAoB,GAAYwR,EAAapS,QAAQY,MACjC,SAAAnB,GAAS2S,EAAarR,OAAOtB,QAElCgE,GAEI2O,IAGkCxK,EAzBdzE,EShbD0O,GTycR,uBS1btB,SAASF,EAAIJ,EAAmCC,EAAgBC,GAE5D,QAFuF,IAA3BA,MAAU,KAEjE9F,IACD,OAAO0G,EAGPzB,IACAY,EAAYZ,EAAP,IAAmBY,GAP2D,IAUvF,IAAMc,EAAuB,KACtBnH,EAAUsG,GADS,CAEtBc,UAAWvJ,KAAKgC,MAAMzL,aAZ6D,MAejE4R,EAfiE,WAgBnFrC,EAAgBwD,GAAYP,EADVZ,EAAJ,IACsBmB,IAMxC,OAnCJ,SAAiBf,EAAmCC,EAAgBC,GAEhER,EAAO7P,KAAK,CACRmQ,QACAC,QACAC,aAGqC,IAArC7D,EAAiBzM,QAAQoQ,IACzB7N,IAuBJ8O,CAAQjB,EAAOC,EAAOc,GACtBhB,EAAMC,EAAOC,EAAOc,GAEbD,EAGX,SAASI,EAAWC,EAAUX,GAE1B,OADAW,EAAStR,KAAK2Q,GACPM,EAyFP1G,KTyUD,SAAsBxI,EAAmBf,IAI5C,SAASuQ,IACKzR,YAAW,WACjBiC,IACAwP,MACDvQ,GAGPuQ,GSnVIC,CAAalP,EAAOsN,GAGF,iBAAX5R,SACPA,OAAOoQ,iBAAiB,gBAAgB,WACpCqC,OAGJzS,OAAOoQ,iBAAiB,UAAU,WAC9BqC,OAGJzS,OAAOoQ,iBAAiB,YAAY,WAChCqC,QAIR,IAAMQ,EAAS,CACXQ,MAzFJ,SAAerB,EAAOC,GAClB,OAAOE,EAAIrE,EAAUC,MAAOiE,EAAOC,IAyFnCqB,KAtFJ,SAActB,EAAOC,GACjB,OAAOE,EAAIrE,EAAUE,KAAMgE,EAAOC,IAsFlCsB,KAnFJ,SAAcvB,EAAOC,GACjB,OAAOE,EAAIrE,EAAUG,KAAM+D,EAAOC,IAmFlCjR,MAhFJ,SAAegR,EAAOC,GAClB,OAAOE,EAAIrE,EAAUI,MAAO8D,EAAOC,IAgFnCuB,MA7EJ,SAAevB,GACX,QADsC,IAA3BA,MAAU,KAChB9F,IACD,OAAO0G,EAF2B,IAKtC,IAAMY,EAA4B9H,EAAUsG,GALN,MAOhBJ,EAPgB,WAQlCvC,EAAgBmE,GAAiBlB,EADfV,EAAJ,IAC2B4B,IAM7C,OAHA3B,EAAMhE,EAAUC,MAAO,QAAS0F,GAChC/B,EAAS9P,KAAK6R,GAEPZ,GAgEP3O,QACAmO,iBACAqB,kBAhHJ,SAA2BnB,GACvB,OAAOU,EAAWtB,EAAiBY,IAgHnCoB,eA7GJ,SAAwBpB,GACpB,OAAOU,EAAWrB,EAAcW,IA6GhCqB,mBA1GJ,SAA4BrB,GACxB,OAAOU,EAAWpB,EAAkBU,IA0GpCsB,iBAvGJ,SAA0BtB,GACtB,OAAOU,EAAWpF,EAAgB0E,IAuGlCuB,aAnEJ,SAAsBC,GAElB,OADAzC,EAAYyC,EACLlB,GAkEPmB,UA/DJ,SAAmBC,GA6Bf,OA5BIA,EAAKlF,MACLA,EAAMkF,EAAKlF,KAGXkF,EAAK7C,SACLA,EAAS6C,EAAK7C,QAGd6C,EAAK5C,WACLA,EAAW4C,EAAK5C,UAGhB4C,EAAK3C,YACLA,EAAY2C,EAAK3C,WAGjB2C,EAAK1C,kBACLA,EAAkB0C,EAAK1C,iBAGvB0C,EAAKzC,gBACLA,EAAgByC,EAAKzC,eAGrByC,EAAKxF,mBACLA,EAAmBwF,EAAKxF,kBAGrBoE,IAqCX,OAAOA","file":"beaver-logger.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"beaver\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"beaver\"] = factory();\n\telse\n\t\troot[\"beaver\"] = factory();\n})((typeof self !== 'undefined' ? self : this), function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 0);\n","export default function _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}","/* @flow */\n\nexport function isPromise(item : mixed) : boolean {\n try {\n if (!item) {\n return false;\n }\n\n if (typeof Promise !== 'undefined' && item instanceof Promise) {\n return true;\n }\n\n if (typeof window !== 'undefined' && typeof window.Window === 'function' && item instanceof window.Window) {\n return false;\n }\n\n if (typeof window !== 'undefined' && typeof window.constructor === 'function' && item instanceof window.constructor) {\n return false;\n }\n\n const toString = ({}).toString;\n\n if (toString) {\n const name = toString.call(item);\n\n if (name === '[object Window]' || name === '[object global]' || name === '[object DOMWindow]') {\n return false;\n }\n }\n\n if (typeof item.then === 'function') {\n return true;\n }\n } catch (err) {\n return false;\n }\n\n return false;\n}\n","/* @flow */\n\nimport type { ZalgoPromise } from './promise';\n\nconst dispatchedErrors = [];\nconst possiblyUnhandledPromiseHandlers : Array<(mixed, promise? : ZalgoPromise) => void> = [];\n\nexport function dispatchPossiblyUnhandledError(err : mixed, promise : ZalgoPromise) {\n\n if (dispatchedErrors.indexOf(err) !== -1) {\n return;\n }\n\n dispatchedErrors.push(err);\n\n setTimeout(() => {\n if (__DEBUG__) {\n // $FlowFixMe\n throw new Error(`${ err.stack || err.toString() }\\n\\nFrom promise:\\n\\n${ promise.stack }`);\n }\n\n throw err;\n }, 1);\n\n for (let j = 0; j < possiblyUnhandledPromiseHandlers.length; j++) {\n // $FlowFixMe\n possiblyUnhandledPromiseHandlers[j](err, promise);\n }\n}\n\nexport function onPossiblyUnhandledException(handler : (mixed, promise? : ZalgoPromise) => void) : {| cancel : () => void |} {\n possiblyUnhandledPromiseHandlers.push(handler);\n\n return {\n cancel() {\n possiblyUnhandledPromiseHandlers.splice(possiblyUnhandledPromiseHandlers.indexOf(handler), 1);\n }\n };\n}\n","/* @flow */\n\nimport type { ZalgoPromise } from './promise';\n\nlet activeCount = 0;\nlet flushPromise;\n\nfunction flushActive() {\n if (!activeCount && flushPromise) {\n const promise = flushPromise;\n flushPromise = null;\n promise.resolve();\n }\n}\n\nexport function startActive() {\n activeCount += 1;\n}\n\nexport function endActive() {\n activeCount -= 1;\n flushActive();\n}\n\nexport function awaitActive(Zalgo : Class>) : ZalgoPromise { // eslint-disable-line no-undef\n const promise = flushPromise = flushPromise || new Zalgo();\n flushActive();\n return promise;\n}\n","/* @flow */\n/* eslint no-use-before-define: off */\n\nimport { isPromise } from './utils';\nimport { onPossiblyUnhandledException, dispatchPossiblyUnhandledError } from './exceptions';\nimport { startActive, endActive, awaitActive } from './flush';\n\nexport class ZalgoPromise {\n\n resolved : boolean;\n rejected : boolean;\n errorHandled : boolean;\n value : R;\n error : mixed;\n // eslint-disable-next-line flowtype/no-mutable-array\n handlers : Array<{|\n promise : ZalgoPromise<*>,\n onSuccess : void | (result : R) => mixed,\n onError : void | (error : mixed) => mixed\n |}>;\n dispatching : boolean;\n stack : string;\n\n constructor(handler : ?(resolve : (result : R) => void, reject : (error : mixed) => void) => void) {\n\n this.resolved = false;\n this.rejected = false;\n this.errorHandled = false;\n\n this.handlers = [];\n\n if (handler) {\n\n let result;\n let error;\n let resolved = false;\n let rejected = false;\n let isAsync = false;\n\n startActive();\n\n try {\n handler(res => {\n if (isAsync) {\n this.resolve(res);\n } else {\n resolved = true;\n result = res;\n }\n\n }, err => {\n if (isAsync) {\n this.reject(err);\n } else {\n rejected = true;\n error = err;\n }\n });\n\n } catch (err) {\n endActive();\n this.reject(err);\n return;\n }\n\n endActive();\n\n isAsync = true;\n\n if (resolved) {\n // $FlowFixMe\n this.resolve(result);\n } else if (rejected) {\n this.reject(error);\n }\n }\n\n if (__DEBUG__) {\n try {\n throw new Error(`ZalgoPromise`);\n } catch (err) {\n this.stack = err.stack;\n }\n }\n }\n\n resolve(result : R) : ZalgoPromise {\n if (this.resolved || this.rejected) {\n return this;\n }\n\n if (isPromise(result)) {\n throw new Error('Can not resolve promise with another promise');\n }\n\n this.resolved = true;\n this.value = result;\n this.dispatch();\n\n return this;\n }\n\n reject(error : mixed) : ZalgoPromise {\n if (this.resolved || this.rejected) {\n return this;\n }\n\n if (isPromise(error)) {\n throw new Error('Can not reject promise with another promise');\n }\n\n if (!error) {\n // $FlowFixMe\n const err = (error && typeof error.toString === 'function' ? error.toString() : Object.prototype.toString.call(error));\n error = new Error(`Expected reject to be called with Error, got ${ err }`);\n }\n\n this.rejected = true;\n this.error = error;\n\n if (!this.errorHandled) {\n setTimeout(() => {\n if (!this.errorHandled) {\n dispatchPossiblyUnhandledError(error, this);\n }\n }, 1);\n }\n\n this.dispatch();\n\n return this;\n }\n\n asyncReject(error : mixed) : ZalgoPromise {\n this.errorHandled = true;\n this.reject(error);\n return this;\n }\n\n dispatch() {\n\n const { dispatching, resolved, rejected, handlers } = this;\n\n if (dispatching) {\n return;\n }\n\n if (!resolved && !rejected) {\n return;\n }\n\n this.dispatching = true;\n startActive();\n\n const chain = (firstPromise : ZalgoPromise, secondPromise : ZalgoPromise) => {\n return firstPromise.then(res => {\n secondPromise.resolve(res);\n }, err => {\n secondPromise.reject(err);\n });\n };\n\n for (let i = 0; i < handlers.length; i++) {\n\n const { onSuccess, onError, promise } = handlers[i];\n\n let result;\n\n if (resolved) {\n\n try {\n result = onSuccess ? onSuccess(this.value) : this.value;\n } catch (err) {\n promise.reject(err);\n continue;\n }\n\n } else if (rejected) {\n\n if (!onError) {\n promise.reject(this.error);\n continue;\n }\n\n try {\n result = onError(this.error);\n } catch (err) {\n promise.reject(err);\n continue;\n }\n }\n\n if (result instanceof ZalgoPromise && (result.resolved || result.rejected)) {\n const promiseResult : ZalgoPromise<*> = result;\n\n if (promiseResult.resolved) {\n promise.resolve(promiseResult.value);\n } else {\n promise.reject(promiseResult.error);\n }\n\n promiseResult.errorHandled = true;\n\n } else if (isPromise(result)) {\n\n if (result instanceof ZalgoPromise && (result.resolved || result.rejected)) {\n if (result.resolved) {\n promise.resolve(result.value);\n } else {\n promise.reject(result.error);\n }\n\n } else {\n // $FlowFixMe\n chain(result, promise);\n }\n\n } else {\n\n promise.resolve(result);\n }\n }\n\n handlers.length = 0;\n this.dispatching = false;\n endActive();\n }\n\n then(onSuccess : void | (result : R) => (ZalgoPromise | Y), onError : void | (error : mixed) => (ZalgoPromise | Y)) : ZalgoPromise {\n\n if (onSuccess && typeof onSuccess !== 'function' && !onSuccess.call) {\n throw new Error('Promise.then expected a function for success handler');\n }\n\n if (onError && typeof onError !== 'function' && !onError.call) {\n throw new Error('Promise.then expected a function for error handler');\n }\n\n const promise = new ZalgoPromise();\n\n this.handlers.push({\n promise,\n onSuccess,\n onError\n });\n\n this.errorHandled = true;\n\n this.dispatch();\n\n return promise;\n }\n\n catch(onError : (error : mixed) => ZalgoPromise | Y) : ZalgoPromise {\n // $FlowFixMe incompatible-call\n const resultPromise : ZalgoPromise = this.then(undefined, onError);\n return resultPromise;\n }\n\n finally(onFinally : () => mixed) : ZalgoPromise {\n\n if (onFinally && typeof onFinally !== 'function' && !onFinally.call) {\n throw new Error('Promise.finally expected a function');\n }\n\n return this.then((result) => {\n return ZalgoPromise.try(onFinally)\n .then(() => {\n return result;\n });\n }, (err) => {\n return ZalgoPromise.try(onFinally)\n .then(() => {\n throw err;\n });\n });\n }\n\n timeout(time : number, err : ?Error) : ZalgoPromise {\n\n if (this.resolved || this.rejected) {\n return this;\n }\n\n const timeout = setTimeout(() => {\n\n if (this.resolved || this.rejected) {\n return;\n }\n\n this.reject(err || new Error(`Promise timed out after ${ time }ms`));\n\n }, time);\n\n return this.then(result => {\n clearTimeout(timeout);\n return result;\n });\n }\n\n // $FlowFixMe\n toPromise() : Promise {\n // $FlowFixMe\n if (typeof Promise === 'undefined') {\n throw new TypeError(`Could not find Promise`);\n }\n // $FlowFixMe\n return Promise.resolve(this); // eslint-disable-line compat/compat\n }\n\n lazy() : ZalgoPromise {\n this.errorHandled = true;\n return this;\n }\n\n static resolve(value : ZalgoPromise | Y) : ZalgoPromise {\n\n if (value instanceof ZalgoPromise) {\n // $FlowFixMe incompatible-type-arg\n const result : ZalgoPromise = value;\n return result;\n }\n\n if (isPromise(value)) {\n // $FlowFixMe\n return new ZalgoPromise((resolve, reject) => value.then(resolve, reject));\n }\n\n return new ZalgoPromise().resolve(value);\n }\n\n static reject(error : mixed) : ZalgoPromise {\n return new ZalgoPromise().reject(error);\n }\n\n static asyncReject(error : mixed) : ZalgoPromise {\n return new ZalgoPromise().asyncReject(error);\n }\n\n static all>(promises : X) : ZalgoPromise<$TupleMap(ZalgoPromise | Y) => Y>> { // eslint-disable-line no-undef\n\n const promise = new ZalgoPromise();\n let count = promises.length;\n // eslint-disable-next-line no-undef, unicorn/prefer-spread\n const results = ([] : $TupleMap(ZalgoPromise | Y) => Y>).slice();\n\n if (!count) {\n promise.resolve(results);\n return promise;\n }\n\n const chain = (i : number, firstPromise : ZalgoPromise, secondPromise : ZalgoPromise) => {\n return firstPromise.then(res => {\n results[i] = res;\n count -= 1;\n if (count === 0) {\n promise.resolve(results);\n }\n }, err => {\n secondPromise.reject(err);\n });\n };\n\n for (let i = 0; i < promises.length; i++) {\n const prom = promises[i];\n\n if (prom instanceof ZalgoPromise) {\n if (prom.resolved) {\n results[i] = prom.value;\n count -= 1;\n continue;\n }\n } else if (!isPromise(prom)) {\n results[i] = prom;\n count -= 1;\n continue;\n }\n\n chain(i, ZalgoPromise.resolve(prom), promise);\n }\n\n if (count === 0) {\n promise.resolve(results);\n }\n\n return promise;\n }\n\n static hash(promises : O) : ZalgoPromise<$ObjMap(ZalgoPromise | Y) => Y>> { // eslint-disable-line no-undef\n const result = {};\n const awaitPromises = [];\n\n for (const key in promises) {\n if (promises.hasOwnProperty(key)) {\n const value = promises[key];\n\n if (isPromise(value)) {\n awaitPromises.push(value.then(res => {\n result[key] = res;\n }));\n } else {\n result[key] = value;\n }\n }\n }\n\n return ZalgoPromise.all(awaitPromises).then(() => result);\n }\n\n static map(items : $ReadOnlyArray, method : (T) => (ZalgoPromise | X)) : ZalgoPromise<$ReadOnlyArray> {\n // $FlowFixMe\n return ZalgoPromise.all(items.map(method));\n }\n\n static onPossiblyUnhandledException(handler : (err : mixed) => void) : {| cancel : () => void |} {\n return onPossiblyUnhandledException(handler);\n }\n\n static try>(method : (...args : $ReadOnlyArray) => (ZalgoPromise | Y), context? : C, args? : A) : ZalgoPromise {\n\n if (method && typeof method !== 'function' && !method.call) {\n throw new Error('Promise.try expected a function');\n }\n\n let result : ZalgoPromise | Y;\n\n startActive();\n\n try {\n result = method.apply(context, args || []);\n } catch (err) {\n endActive();\n return ZalgoPromise.reject(err);\n }\n\n endActive();\n\n // $FlowFixMe incompatible-call\n const resultPromise = ZalgoPromise.resolve(result);\n\n return resultPromise;\n }\n\n static delay(delay : number) : ZalgoPromise {\n return new ZalgoPromise(resolve => {\n setTimeout(resolve, delay);\n });\n }\n\n static isPromise(value : mixed) : boolean {\n\n if (value && value instanceof ZalgoPromise) {\n return true;\n }\n\n return isPromise(value);\n }\n\n static flush() : ZalgoPromise {\n return awaitActive(ZalgoPromise);\n }\n}\n","/* @flow */\n/* eslint max-lines: 0 */\n\nimport { isRegex, noop } from './util';\nimport type { CrossDomainWindowType, SameDomainWindowType, DomainMatcher } from './types';\nimport { PROTOCOL, WILDCARD } from './constants';\n\nconst IE_WIN_ACCESS_ERROR = 'Call was rejected by callee.\\r\\n';\n\nexport function getActualProtocol(win : SameDomainWindowType = window) : ?string {\n return win.location.protocol;\n}\n\nexport function getProtocol(win : SameDomainWindowType = window) : ?string {\n if (win.mockDomain) {\n const protocol = win.mockDomain.split('//')[0];\n\n if (protocol) {\n return protocol;\n }\n }\n\n return getActualProtocol(win);\n}\n\nexport function isFileProtocol(win : SameDomainWindowType = window) : boolean {\n return getProtocol(win) === PROTOCOL.FILE;\n}\n\nexport function isAboutProtocol(win : SameDomainWindowType = window) : boolean {\n return getProtocol(win) === PROTOCOL.ABOUT;\n}\n\nexport function isMockProtocol(win : SameDomainWindowType = window) : boolean {\n return getProtocol(win) === PROTOCOL.MOCK;\n}\n\nexport function getParent(win? : CrossDomainWindowType = window) : ?CrossDomainWindowType {\n\n if (!win) {\n return;\n }\n\n try {\n if (win.parent && win.parent !== win) {\n return win.parent;\n }\n } catch (err) {\n // pass\n }\n}\n\nexport function getOpener(win? : CrossDomainWindowType = window) : ?CrossDomainWindowType {\n\n if (!win) {\n return;\n }\n\n // Make sure we're not actually an iframe which has had window.open() called on us\n if (getParent(win)) {\n return;\n }\n\n try {\n return win.opener;\n } catch (err) {\n // pass\n }\n}\n\nexport function canReadFromWindow(win : CrossDomainWindowType | SameDomainWindowType) : boolean {\n try {\n // $FlowFixMe\n noop(win && win.location && win.location.href);\n return true;\n } catch (err) {\n // pass\n }\n\n return false;\n}\n\nexport function getActualDomain(win? : SameDomainWindowType = window) : string {\n\n const location = win.location;\n\n if (!location) {\n throw new Error(`Can not read window location`);\n }\n\n const protocol = getActualProtocol(win);\n\n if (!protocol) {\n throw new Error(`Can not read window protocol`);\n }\n\n if (protocol === PROTOCOL.FILE) {\n return `${ PROTOCOL.FILE }//`;\n }\n\n if (protocol === PROTOCOL.ABOUT) {\n\n const parent = getParent(win);\n if (parent && canReadFromWindow(parent)) {\n // $FlowFixMe\n return getActualDomain(parent);\n }\n\n return `${ PROTOCOL.ABOUT }//`;\n }\n\n const host = location.host;\n\n if (!host) {\n throw new Error(`Can not read window host`);\n }\n\n return `${ protocol }//${ host }`;\n}\n\nexport function getDomain(win? : SameDomainWindowType = window) : string {\n\n const domain = getActualDomain(win);\n\n if (domain && win.mockDomain && win.mockDomain.indexOf(PROTOCOL.MOCK) === 0) {\n return win.mockDomain;\n }\n\n return domain;\n}\n\nexport function isBlankDomain(win : CrossDomainWindowType) : boolean {\n try {\n // $FlowFixMe\n if (!win.location.href) {\n return true;\n }\n\n if (win.location.href === 'about:blank') {\n return true;\n }\n } catch (err) {\n // pass\n }\n\n return false;\n}\n\nexport function isActuallySameDomain(win : CrossDomainWindowType) : boolean {\n\n try {\n if (win === window) {\n return true;\n }\n\n } catch (err) {\n // pass\n }\n\n try {\n const desc = Object.getOwnPropertyDescriptor(win, 'location');\n\n if (desc && desc.enumerable === false) {\n return false;\n }\n\n } catch (err) {\n // pass\n }\n\n try {\n // $FlowFixMe\n if (isAboutProtocol(win) && canReadFromWindow(win)) {\n return true;\n }\n } catch (err) {\n // pass\n }\n\n try {\n // $FlowFixMe\n if (isMockProtocol(win) && canReadFromWindow(win)) {\n return true;\n }\n } catch (err) {\n // pass\n }\n\n try {\n // $FlowFixMe\n if (getActualDomain(win) === getActualDomain(window)) {\n return true;\n }\n\n } catch (err) {\n // pass\n }\n\n return false;\n}\n\nexport function isSameDomain(win : CrossDomainWindowType | SameDomainWindowType) : boolean {\n\n if (!isActuallySameDomain(win)) {\n return false;\n }\n\n try {\n if (win === window) {\n return true;\n }\n \n // $FlowFixMe\n if (isAboutProtocol(win) && canReadFromWindow(win)) {\n return true;\n }\n\n // $FlowFixMe\n if (getDomain(window) === getDomain(win)) {\n return true;\n }\n\n } catch (err) {\n // pass\n }\n\n return false;\n}\n\n\nexport function assertSameDomain(win : CrossDomainWindowType | SameDomainWindowType) : SameDomainWindowType {\n if (!isSameDomain(win)) {\n throw new Error(`Expected window to be same domain`);\n }\n\n // $FlowFixMe\n return win;\n}\n\nexport function getParents(win : CrossDomainWindowType) : $ReadOnlyArray {\n\n const result = [];\n\n try {\n\n while (win.parent !== win) {\n result.push(win.parent);\n win = win.parent;\n }\n\n } catch (err) {\n // pass\n }\n\n return result;\n}\n\nexport function isAncestorParent(parent : CrossDomainWindowType, child : CrossDomainWindowType) : boolean {\n\n if (!parent || !child) {\n return false;\n }\n\n const childParent = getParent(child);\n\n if (childParent) {\n return childParent === parent;\n }\n\n if (getParents(child).indexOf(parent) !== -1) {\n return true;\n }\n\n return false;\n}\n\nexport function getFrames(win : CrossDomainWindowType) : $ReadOnlyArray {\n\n const result = [];\n\n let frames;\n\n try {\n frames = win.frames;\n } catch (err) {\n frames = win;\n }\n\n let len;\n\n try {\n len = frames.length;\n } catch (err) {\n // pass\n }\n\n if (len === 0) {\n return result;\n }\n\n if (len) {\n for (let i = 0; i < len; i++) {\n\n let frame;\n\n try {\n frame = frames[i];\n } catch (err) {\n continue;\n }\n\n result.push(frame);\n }\n\n return result;\n }\n\n for (let i = 0; i < 100; i++) {\n let frame;\n\n try {\n frame = frames[i];\n } catch (err) {\n return result;\n }\n\n if (!frame) {\n return result;\n }\n\n result.push(frame);\n }\n\n return result;\n}\n\n\nexport function getAllChildFrames(win : CrossDomainWindowType) : $ReadOnlyArray {\n\n const result = [];\n\n for (const frame of getFrames(win)) {\n result.push(frame);\n\n for (const childFrame of getAllChildFrames(frame)) {\n result.push(childFrame);\n }\n }\n\n return result;\n}\n\nexport function getTop(win? : CrossDomainWindowType = window) : ?CrossDomainWindowType {\n\n try {\n if (win.top) {\n return win.top;\n }\n } catch (err) {\n // pass\n }\n\n if (getParent(win) === win) {\n return win;\n }\n\n try {\n if (isAncestorParent(window, win) && window.top) {\n return window.top;\n }\n } catch (err) {\n // pass\n }\n\n try {\n if (isAncestorParent(win, window) && window.top) {\n return window.top;\n }\n } catch (err) {\n // pass\n }\n\n for (const frame of getAllChildFrames(win)) {\n try {\n if (frame.top) {\n return frame.top;\n }\n } catch (err) {\n // pass\n }\n\n if (getParent(frame) === frame) {\n return frame;\n }\n }\n}\n\nexport function getNextOpener(win? : CrossDomainWindowType = window) : ?CrossDomainWindowType {\n return getOpener(getTop(win) || win);\n}\n\nexport function getUltimateTop(win? : CrossDomainWindowType = window) : CrossDomainWindowType {\n const opener = getNextOpener(win);\n\n if (opener) {\n return getUltimateTop(opener);\n }\n\n return top;\n}\n\nexport function getAllFramesInWindow(win : CrossDomainWindowType) : $ReadOnlyArray {\n const top = getTop(win);\n\n if (!top) {\n throw new Error(`Can not determine top window`);\n }\n\n let result = [ ...getAllChildFrames(top), top ];\n\n // Win may be in shadow dom\n if (result.indexOf(win) === -1) {\n result = [ ...result, win, ...getAllChildFrames(win) ];\n }\n\n return result;\n}\n\nexport function getAllWindows(win? : CrossDomainWindowType = window) : $ReadOnlyArray {\n const frames = getAllFramesInWindow(win);\n const opener = getNextOpener(win);\n\n if (opener) {\n return [ ...getAllWindows(opener), ...frames ];\n } else {\n return frames;\n }\n}\n\nexport function isTop(win : CrossDomainWindowType) : boolean {\n return win === getTop(win);\n}\n\nexport function isFrameWindowClosed(frame : HTMLIFrameElement) : boolean {\n\n if (!frame.contentWindow) {\n return true;\n }\n\n if (!frame.parentNode) {\n return true;\n }\n\n const doc = frame.ownerDocument;\n\n if (doc && doc.documentElement && !doc.documentElement.contains(frame)) {\n let parent = frame;\n\n while (parent.parentNode && parent.parentNode !== parent) {\n parent = parent.parentNode;\n }\n\n // $FlowFixMe\n if (!parent.host || !doc.documentElement.contains(parent.host)) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction safeIndexOf(collection : $ReadOnlyArray, item : T) : number {\n for (let i = 0; i < collection.length; i++) {\n\n try {\n if (collection[i] === item) {\n return i;\n }\n } catch (err) {\n // pass\n }\n }\n\n return -1;\n}\n\nconst iframeWindows = [];\nconst iframeFrames = [];\n\nexport function isWindowClosed(win : CrossDomainWindowType, allowMock : boolean = true) : boolean {\n\n try {\n if (win === window) {\n return false;\n }\n } catch (err) {\n return true;\n }\n\n try {\n if (!win) {\n return true;\n }\n\n } catch (err) {\n return true;\n }\n\n try {\n if (win.closed) {\n return true;\n }\n\n } catch (err) {\n\n // I love you so much IE\n\n if (err && err.message === IE_WIN_ACCESS_ERROR) {\n return false;\n }\n\n return true;\n }\n\n\n if (allowMock && isSameDomain(win)) {\n try {\n // $FlowFixMe\n if (win.mockclosed) {\n return true;\n }\n } catch (err) {\n // pass\n }\n }\n\n // Mobile safari\n\n try {\n if (!win.parent || !win.top) {\n return true;\n }\n } catch (err) {\n // pass\n }\n\n // Yes, this actually happens in IE. win === win errors out when the window\n // is from an iframe, and the iframe was removed from the page.\n\n try {\n noop(win === win); // eslint-disable-line no-self-compare\n } catch (err) {\n return true;\n }\n\n // IE orphaned frame\n\n const iframeIndex = safeIndexOf(iframeWindows, win);\n\n if (iframeIndex !== -1) {\n const frame = iframeFrames[iframeIndex];\n\n if (frame && isFrameWindowClosed(frame)) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction cleanIframes() {\n for (let i = 0; i < iframeWindows.length; i++) {\n let closed = false;\n\n try {\n closed = iframeWindows[i].closed;\n } catch (err) {\n // pass\n }\n\n if (closed) {\n iframeFrames.splice(i, 1);\n iframeWindows.splice(i, 1);\n }\n }\n}\n\nexport function linkFrameWindow(frame : HTMLIFrameElement) {\n\n cleanIframes();\n\n if (frame && frame.contentWindow) {\n try {\n iframeWindows.push(frame.contentWindow);\n iframeFrames.push(frame);\n } catch (err) {\n // pass\n }\n }\n}\n\nexport function getUserAgent(win : ?SameDomainWindowType) : string {\n win = win || window;\n return win.navigator.mockUserAgent || win.navigator.userAgent;\n}\n\n\nexport function getFrameByName(win : CrossDomainWindowType, name : string) : ?CrossDomainWindowType {\n\n const winFrames = getFrames(win);\n\n for (const childFrame of winFrames) {\n try {\n // $FlowFixMe\n if (isSameDomain(childFrame) && childFrame.name === name && winFrames.indexOf(childFrame) !== -1) {\n return childFrame;\n }\n } catch (err) {\n // pass\n }\n }\n\n try {\n // $FlowFixMe\n if (winFrames.indexOf(win.frames[name]) !== -1) {\n // $FlowFixMe\n return win.frames[name];\n }\n } catch (err) {\n // pass\n }\n\n try {\n if (winFrames.indexOf(win[name]) !== -1) {\n return win[name];\n }\n } catch (err) {\n // pass\n }\n}\n\nexport function findChildFrameByName(win : CrossDomainWindowType, name : string) : ?CrossDomainWindowType {\n\n const frame = getFrameByName(win, name);\n\n if (frame) {\n return frame;\n }\n\n for (const childFrame of getFrames(win)) {\n const namedFrame = findChildFrameByName(childFrame, name);\n\n if (namedFrame) {\n return namedFrame;\n }\n }\n}\n\nexport function findFrameByName(win : CrossDomainWindowType, name : string) : ?CrossDomainWindowType {\n const frame = getFrameByName(win, name);\n\n if (frame) {\n return frame;\n }\n\n const top = getTop(win) || win;\n\n return findChildFrameByName(top, name);\n}\n\nexport function isParent(win : CrossDomainWindowType, frame : CrossDomainWindowType) : boolean {\n\n const frameParent = getParent(frame);\n\n if (frameParent) {\n return frameParent === win;\n }\n\n for (const childFrame of getFrames(win)) {\n if (childFrame === frame) {\n return true;\n }\n }\n\n return false;\n}\n\nexport function isOpener(parent : CrossDomainWindowType, child : CrossDomainWindowType) : boolean {\n\n return parent === getOpener(child);\n}\n\nexport function getAncestor(win? : CrossDomainWindowType = window) : ?CrossDomainWindowType {\n win = win || window;\n\n const opener = getOpener(win);\n\n if (opener) {\n return opener;\n }\n\n const parent = getParent(win);\n\n if (parent) {\n return parent;\n }\n}\n\nexport function getAncestors(win : CrossDomainWindowType) : $ReadOnlyArray {\n\n const results = [];\n\n let ancestor = win;\n\n while (ancestor) {\n ancestor = getAncestor(ancestor);\n if (ancestor) {\n results.push(ancestor);\n }\n }\n\n return results;\n}\n\n\nexport function isAncestor(parent : CrossDomainWindowType, child : CrossDomainWindowType) : boolean {\n\n const actualParent = getAncestor(child);\n\n if (actualParent) {\n if (actualParent === parent) {\n return true;\n }\n\n return false;\n }\n\n if (child === parent) {\n return false;\n }\n\n if (getTop(child) === child) {\n return false;\n }\n\n for (const frame of getFrames(parent)) {\n if (frame === child) {\n return true;\n }\n }\n\n return false;\n}\n\nexport function isPopup(win? : CrossDomainWindowType = window) : boolean {\n return Boolean(getOpener(win));\n}\n\nexport function isIframe(win? : CrossDomainWindowType = window) : boolean {\n return Boolean(getParent(win));\n}\n\nexport function isFullpage(win? : CrossDomainWindowType = window) : boolean {\n return Boolean(!isIframe(win) && !isPopup(win));\n}\n\nfunction anyMatch(collection1, collection2) : boolean {\n\n for (const item1 of collection1) {\n for (const item2 of collection2) {\n if (item1 === item2) {\n return true;\n }\n }\n }\n\n return false;\n}\n\nexport function getDistanceFromTop(win : CrossDomainWindowType = window) : number {\n let distance = 0;\n let parent = win;\n\n while (parent) {\n parent = getParent(parent);\n if (parent) {\n distance += 1;\n }\n }\n\n return distance;\n}\n\nexport function getNthParent(win : CrossDomainWindowType, n : number = 1) : ?CrossDomainWindowType {\n let parent = win;\n\n for (let i = 0; i < n; i++) {\n if (!parent) {\n return;\n }\n\n parent = getParent(parent);\n }\n\n return parent;\n}\n\nexport function getNthParentFromTop(win : CrossDomainWindowType, n : number = 1) : ?CrossDomainWindowType {\n return getNthParent(win, getDistanceFromTop(win) - n);\n}\n\nexport function isSameTopWindow(win1 : CrossDomainWindowType, win2 : CrossDomainWindowType) : boolean {\n\n const top1 = getTop(win1) || win1;\n const top2 = getTop(win2) || win2;\n\n try {\n if (top1 && top2) {\n if (top1 === top2) {\n return true;\n }\n\n return false;\n }\n } catch (err) {\n // pass\n }\n\n const allFrames1 = getAllFramesInWindow(win1);\n const allFrames2 = getAllFramesInWindow(win2);\n\n if (anyMatch(allFrames1, allFrames2)) {\n return true;\n }\n\n const opener1 = getOpener(top1);\n const opener2 = getOpener(top2);\n\n if (opener1 && anyMatch(getAllFramesInWindow(opener1), allFrames2)) {\n return false;\n }\n\n if (opener2 && anyMatch(getAllFramesInWindow(opener2), allFrames1)) {\n return false;\n }\n\n return false;\n}\n\nexport function matchDomain(pattern : DomainMatcher, origin : DomainMatcher) : boolean {\n\n if (typeof pattern === 'string') {\n\n if (typeof origin === 'string') {\n return pattern === WILDCARD || origin === pattern;\n }\n\n if (isRegex(origin)) {\n return false;\n }\n\n if (Array.isArray(origin)) {\n return false;\n }\n }\n\n if (isRegex(pattern)) {\n\n if (isRegex(origin)) {\n return pattern.toString() === origin.toString();\n }\n\n if (Array.isArray(origin)) {\n return false;\n }\n\n // $FlowFixMe\n return Boolean(origin.match(pattern));\n }\n\n if (Array.isArray(pattern)) {\n\n if (Array.isArray(origin)) {\n return JSON.stringify(pattern) === JSON.stringify(origin);\n }\n\n if (isRegex(origin)) {\n return false;\n }\n\n return pattern.some(subpattern => matchDomain(subpattern, origin));\n }\n\n return false;\n}\n\nexport function stringifyDomainPattern(pattern : DomainMatcher) : string {\n if (Array.isArray(pattern)) {\n return `(${ pattern.join(' | ') })`;\n } else if (isRegex(pattern)) {\n return `RegExp(${ pattern.toString() })`;\n } else {\n return pattern.toString();\n }\n}\n\nexport function getDomainFromUrl(url : string) : string {\n\n let domain;\n\n if (url.match(/^(https?|mock|file):\\/\\//)) {\n domain = url;\n } else {\n return getDomain();\n }\n\n domain = domain.split('/').slice(0, 3).join('/');\n\n return domain;\n}\n\nexport function onCloseWindow(win : CrossDomainWindowType, callback : Function, delay : number = 1000, maxtime : number = Infinity) : {| cancel : () => void |} {\n\n let timeout;\n\n const check = () => {\n\n if (isWindowClosed(win)) {\n\n if (timeout) {\n clearTimeout(timeout);\n }\n\n return callback();\n }\n\n if (maxtime <= 0) {\n clearTimeout(timeout);\n } else {\n maxtime -= delay;\n timeout = setTimeout(check, delay);\n }\n };\n\n check();\n\n return {\n cancel() {\n if (timeout) {\n clearTimeout(timeout);\n }\n }\n };\n}\n\n// eslint-disable-next-line complexity\nexport function isWindow(obj : Object) : boolean {\n\n try {\n if (obj === window) {\n return true;\n }\n } catch (err) {\n if (err && err.message === IE_WIN_ACCESS_ERROR) {\n return true;\n }\n }\n\n try {\n // $FlowFixMe method-unbinding\n if (Object.prototype.toString.call(obj) === '[object Window]') {\n return true;\n }\n } catch (err) {\n if (err && err.message === IE_WIN_ACCESS_ERROR) {\n return true;\n }\n }\n\n try {\n if (window.Window && obj instanceof window.Window) {\n return true;\n }\n } catch (err) {\n if (err && err.message === IE_WIN_ACCESS_ERROR) {\n return true;\n }\n }\n\n try {\n if (obj && obj.self === obj) {\n return true;\n }\n } catch (err) {\n if (err && err.message === IE_WIN_ACCESS_ERROR) {\n return true;\n }\n }\n\n try {\n if (obj && obj.parent === obj) {\n return true;\n }\n } catch (err) {\n if (err && err.message === IE_WIN_ACCESS_ERROR) {\n return true;\n }\n }\n\n try {\n if (obj && obj.top === obj) {\n return true;\n }\n } catch (err) {\n if (err && err.message === IE_WIN_ACCESS_ERROR) {\n return true;\n }\n }\n\n try {\n if (noop(obj === obj) === '__unlikely_value__') { // eslint-disable-line no-self-compare\n return false;\n }\n\n } catch (err) {\n return true;\n }\n\n try {\n if (obj && obj.__cross_domain_utils_window_check__ === '__unlikely_value__') {\n return false;\n }\n\n } catch (err) {\n return true;\n }\n\n try {\n if ('postMessage' in obj && 'self' in obj && 'location' in obj) {\n return true;\n }\n } catch (err) {\n // pass\n }\n\n return false;\n}\n\nexport function isBrowser() : boolean {\n return (typeof window !== 'undefined' && typeof window.location !== 'undefined');\n}\n\nexport function isCurrentDomain(domain : string) : boolean {\n if (!isBrowser()) {\n return false;\n }\n\n return (getDomain() === domain);\n}\n\nexport function isMockDomain(domain : string) : boolean {\n return domain.indexOf(PROTOCOL.MOCK) === 0;\n}\n\nexport function normalizeMockUrl(url : string) : string {\n if (!isMockDomain(getDomainFromUrl(url))) {\n return url;\n }\n\n if (!__TEST__) {\n throw new Error(`Mock urls not supported out of test mode`);\n }\n\n return url.replace(/^mock:\\/\\/[^/]+/, getActualDomain(window));\n}\n\nexport function getFrameForWindow(win : CrossDomainWindowType) : ?HTMLElement {\n if (isSameDomain(win)) {\n return assertSameDomain(win).frameElement;\n }\n\n for (const frame of document.querySelectorAll('iframe')) {\n if (frame && frame.contentWindow && frame.contentWindow === win) {\n return frame;\n }\n }\n}\n\nexport function closeWindow(win : CrossDomainWindowType) {\n if (isIframe(win)) {\n const frame = getFrameForWindow(win);\n if (frame && frame.parentElement) {\n frame.parentElement.removeChild(frame);\n return;\n }\n }\n\n try {\n win.close();\n } catch (err) {\n // pass\n }\n}\n","/* @flow */\n\nexport const PROTOCOL = {\n MOCK: ('mock:' : 'mock:'),\n FILE: ('file:' : 'file:'),\n ABOUT: ('about:' : 'about:')\n};\n\nexport const WILDCARD = '*';\n\nexport const WINDOW_TYPE = {\n IFRAME: ('iframe' : 'iframe'),\n POPUP: ('popup' : 'popup')\n};\n","/* @flow */\n\nexport function safeIndexOf(collection : $ReadOnlyArray, item : T) : number {\n for (let i = 0; i < collection.length; i++) {\n\n try {\n if (collection[i] === item) {\n return i;\n }\n } catch (err) {\n // pass\n }\n }\n\n return -1;\n}\n\n// eslint-disable-next-line no-unused-vars\nexport function noop(...args : $ReadOnlyArray) {\n // pass\n}\n","/* @flow */\n\nimport { isWindow, isWindowClosed } from '@krakenjs/cross-domain-utils/src';\n\nimport { hasNativeWeakMap } from './native';\nimport { noop, safeIndexOf } from './util';\n\nexport class CrossDomainSafeWeakMap {\n\n name : string;\n weakmap : ?WeakMap;\n // eslint-disable-next-line flowtype/no-mutable-array\n keys : Array;\n // eslint-disable-next-line flowtype/no-mutable-array\n values : Array;\n\n constructor() {\n // eslint-disable-next-line no-bitwise\n this.name = `__weakmap_${ Math.random() * 1e9 >>> 0 }__`;\n\n if (hasNativeWeakMap()) {\n try {\n this.weakmap = new WeakMap();\n } catch (err) {\n // pass\n }\n }\n\n this.keys = [];\n this.values = [];\n }\n\n _cleanupClosedWindows() {\n\n const weakmap = this.weakmap;\n const keys = this.keys;\n\n for (let i = 0; i < keys.length; i++) {\n const value = keys[i];\n\n if (isWindow(value) && isWindowClosed(value)) {\n\n if (weakmap) {\n try {\n weakmap.delete(value);\n } catch (err) {\n // pass\n }\n }\n\n keys.splice(i, 1);\n this.values.splice(i, 1);\n\n i -= 1;\n }\n }\n }\n\n isSafeToReadWrite(key : K) : boolean {\n\n if (isWindow(key)) {\n return false;\n }\n\n try {\n noop(key && key.self);\n noop(key && key[this.name]);\n } catch (err) {\n return false;\n }\n\n return true;\n }\n\n set(key : K, value : V) {\n\n if (!key) {\n throw new Error(`WeakMap expected key`);\n }\n\n const weakmap = this.weakmap;\n\n if (weakmap) {\n try {\n weakmap.set(key, value);\n } catch (err) {\n delete this.weakmap;\n }\n }\n\n if (this.isSafeToReadWrite(key)) {\n try {\n const name = this.name;\n const entry = key[name];\n\n if (entry && entry[0] === key) {\n entry[1] = value;\n } else {\n Object.defineProperty(key, name, {\n value: [ key, value ],\n writable: true\n });\n }\n\n return;\n\n } catch (err) {\n // pass\n }\n }\n\n this._cleanupClosedWindows();\n\n const keys = this.keys;\n const values = this.values;\n const index = safeIndexOf(keys, key);\n\n if (index === -1) {\n keys.push(key);\n values.push(value);\n } else {\n values[index] = value;\n }\n }\n\n get(key : K) : V | void {\n\n if (!key) {\n throw new Error(`WeakMap expected key`);\n }\n\n const weakmap = this.weakmap;\n\n if (weakmap) {\n try {\n if (weakmap.has(key)) {\n return weakmap.get(key);\n }\n \n } catch (err) {\n delete this.weakmap;\n }\n }\n\n if (this.isSafeToReadWrite(key)) {\n try {\n const entry = key[this.name];\n\n if (entry && entry[0] === key) {\n return entry[1];\n }\n\n return;\n } catch (err) {\n // pass\n }\n }\n\n this._cleanupClosedWindows();\n\n const keys = this.keys;\n const index = safeIndexOf(keys, key);\n\n if (index === -1) {\n return;\n }\n\n return this.values[index];\n }\n\n delete(key : K) {\n\n if (!key) {\n throw new Error(`WeakMap expected key`);\n }\n\n const weakmap = this.weakmap;\n\n if (weakmap) {\n try {\n weakmap.delete(key);\n } catch (err) {\n delete this.weakmap;\n }\n }\n\n if (this.isSafeToReadWrite(key)) {\n try {\n const entry = key[this.name];\n\n if (entry && entry[0] === key) {\n entry[0] = entry[1] = undefined;\n }\n } catch (err) {\n // pass\n }\n }\n\n this._cleanupClosedWindows();\n\n const keys = this.keys;\n const index = safeIndexOf(keys, key);\n\n if (index !== -1) {\n keys.splice(index, 1);\n this.values.splice(index, 1);\n }\n }\n\n has(key : K) : boolean {\n\n if (!key) {\n throw new Error(`WeakMap expected key`);\n }\n\n const weakmap = this.weakmap;\n\n if (weakmap) {\n try {\n if (weakmap.has(key)) {\n return true;\n }\n } catch (err) {\n delete this.weakmap;\n }\n }\n\n if (this.isSafeToReadWrite(key)) {\n try {\n const entry = key[this.name];\n\n if (entry && entry[0] === key) {\n return true;\n }\n\n return false;\n } catch (err) {\n // pass\n }\n }\n\n this._cleanupClosedWindows();\n\n const index = safeIndexOf(this.keys, key);\n return index !== -1;\n }\n\n getOrSet(key : K, getter : () => V) : V {\n if (this.has(key)) {\n // $FlowFixMe\n return this.get(key);\n }\n\n const value = getter();\n this.set(key, value);\n return value;\n }\n}\n","\n/* @flow */\n/* eslint max-lines: 0 */\n\nimport { ZalgoPromise } from '@krakenjs/zalgo-promise/src';\nimport { WeakMap } from '@krakenjs/cross-domain-safe-weakmap/src';\n\nimport type { CancelableType } from './types';\n\nexport function isElement(element : mixed) : boolean {\n let passed = false;\n\n try {\n if (element instanceof window.Element) {\n passed = true;\n } else if (element !== null && typeof element === 'object' && element.nodeType === 1 && typeof element.style === 'object' && typeof element.ownerDocument === 'object') {\n passed = true;\n }\n } catch (_) {\n // we don't have an element\n }\n\n return passed;\n}\n\nexport function getFunctionName (fn : T) : string {\n return fn.name || fn.__name__ || fn.displayName || 'anonymous';\n}\n\nexport function setFunctionName (fn : T, name : string) : T {\n try {\n delete fn.name;\n fn.name = name;\n } catch (err) {\n // pass\n }\n\n fn.__name__ = fn.displayName = name;\n return fn;\n}\n\nexport function base64encode(str : string) : string {\n if (typeof btoa === 'function') {\n return btoa(encodeURIComponent(str).replace(/%([0-9A-F]{2})/g, (m, p1) => {\n return String.fromCharCode(parseInt(p1, 16));\n })).replace(/[=]/g, '');\n }\n\n if (typeof Buffer !== 'undefined') {\n return Buffer.from(str, 'utf8').toString('base64').replace(/[=]/g, '');\n }\n\n throw new Error(`Can not find window.btoa or Buffer`);\n}\n\nexport function base64decode(str : string) : string {\n if (typeof atob === 'function') {\n // $FlowFixMe[method-unbinding]\n return decodeURIComponent(Array.prototype.map.call(atob(str), c => {\n // eslint-disable-next-line prefer-template\n return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);\n }).join(''));\n }\n\n if (typeof Buffer !== 'undefined') {\n return Buffer.from(str, 'base64').toString('utf8');\n }\n\n throw new Error(`Can not find window.atob or Buffer`);\n}\n\nexport function uniqueID() : string {\n\n const chars = '0123456789abcdef';\n\n const randomID = 'xxxxxxxxxx'.replace(/./g, () => {\n return chars.charAt(Math.floor(Math.random() * chars.length));\n });\n\n const timeID = base64encode(\n new Date().toISOString().slice(11, 19).replace('T', '.')\n ).replace(/[^a-zA-Z0-9]/g, '').toLowerCase();\n\n return `uid_${ randomID }_${ timeID }`;\n}\n\nexport function getGlobal() : Object {\n if (typeof window !== 'undefined') {\n return window;\n }\n if (typeof global !== 'undefined') {\n return global;\n }\n if (typeof __GLOBAL__ !== 'undefined') {\n return __GLOBAL__;\n }\n throw new Error(`No global found`);\n}\n\nlet objectIDs;\n\nexport function getObjectID(obj : Object) : string {\n\n objectIDs = objectIDs || new WeakMap();\n\n if (obj === null || obj === undefined || (typeof obj !== 'object' && typeof obj !== 'function')) {\n throw new Error(`Invalid object`);\n }\n\n let uid = objectIDs.get(obj);\n\n if (!uid) {\n uid = `${ typeof obj }:${ uniqueID() }`;\n objectIDs.set(obj, uid);\n }\n\n return uid;\n}\n\nfunction serializeArgs(args : $ReadOnlyArray) : string {\n try {\n // $FlowFixMe[method-unbinding]\n return JSON.stringify(Array.prototype.slice.call(args), (subkey, val) => {\n\n // Treat each distinct function as unique for purposes of memoization\n // e.g. even if someFunction.stringify() is the same, we may use a different memoize cache\n // if the actual function is different.\n if (typeof val === 'function') {\n return `memoize[${ getObjectID(val) }]`;\n }\n\n // By default JSON.stringify(domElement) returns '{}'. This ensures that stays true even for non-standard\n // elements (e.g. React-rendered dom elements) with custom properties\n if (isElement(val)) {\n return {};\n }\n\n return val;\n });\n } catch (err) {\n throw new Error(`Arguments not serializable -- can not be used to memoize`);\n }\n}\n\nexport function getEmptyObject() : {||} {\n // $FlowFixMe\n return {};\n}\n\ntype MemoizeOptions = {|\n name? : string,\n time? : number,\n thisNamespace? : boolean\n|};\n\nconst getDefaultMemoizeOptions = () : MemoizeOptions => {\n // $FlowFixMe\n return {};\n};\n\nexport type Memoized = F & {| reset : () => void |};\n\nlet memoizeGlobalIndex = 0;\nlet memoizeGlobalIndexValidFrom = 0;\n\nexport function memoize(method : F, options? : MemoizeOptions = getDefaultMemoizeOptions()) : Memoized {\n const { thisNamespace = false, time: cacheTime } = options;\n\n let simpleCache;\n let thisCache;\n\n let memoizeIndex = memoizeGlobalIndex;\n memoizeGlobalIndex += 1;\n\n const memoizedFunction = function memoizedFunction(...args) : mixed {\n if (memoizeIndex < memoizeGlobalIndexValidFrom) {\n simpleCache = null;\n thisCache = null;\n memoizeIndex = memoizeGlobalIndex;\n memoizeGlobalIndex += 1;\n }\n\n let cache;\n\n if (thisNamespace) {\n thisCache = thisCache || new WeakMap();\n cache = thisCache.getOrSet(this, getEmptyObject);\n } else {\n cache = simpleCache = simpleCache || {};\n }\n\n let cacheKey;\n\n try {\n cacheKey = serializeArgs(args);\n } catch {\n return method.apply(this, arguments);\n }\n\n let cacheResult = cache[cacheKey];\n\n if (cacheResult && cacheTime && (Date.now() - cacheResult.time) < cacheTime) {\n delete cache[cacheKey];\n cacheResult = null;\n }\n\n if (cacheResult) {\n return cacheResult.value;\n }\n\n const time = Date.now();\n const value = method.apply(this, arguments);\n\n cache[cacheKey] = { time, value };\n\n return value;\n };\n\n memoizedFunction.reset = () => {\n simpleCache = null;\n thisCache = null;\n };\n\n // $FlowFixMe\n const result : F = memoizedFunction;\n\n return setFunctionName(result, `${ options.name || getFunctionName(method) }::memoized`);\n}\n\nmemoize.clear = () => {\n memoizeGlobalIndexValidFrom = memoizeGlobalIndex;\n};\n\nexport function promiseIdentity(item : ZalgoPromise | T) : ZalgoPromise {\n // $FlowFixMe\n return ZalgoPromise.resolve(item);\n}\n\n// eslint-disable-next-line flowtype/no-weak-types\nexport function memoizePromise(method : (...args : $ReadOnlyArray) => ZalgoPromise) : ((...args : $ReadOnlyArray) => ZalgoPromise) {\n let cache = {};\n\n // eslint-disable-next-line flowtype/no-weak-types\n function memoizedPromiseFunction(...args : $ReadOnlyArray) : ZalgoPromise {\n const key : string = serializeArgs(args);\n\n if (cache.hasOwnProperty(key)) {\n return cache[key];\n }\n\n cache[key] = ZalgoPromise.try(() => method.apply(this, arguments))\n .finally(() => {\n delete cache[key];\n });\n\n return cache[key];\n }\n\n memoizedPromiseFunction.reset = () => {\n cache = {};\n };\n\n return setFunctionName(memoizedPromiseFunction, `${ getFunctionName(method) }::promiseMemoized`);\n}\n\ntype PromisifyOptions = {|\n name ? : string\n|};\n\nconst getDefaultPromisifyOptions = () : PromisifyOptions => {\n // $FlowFixMe\n return {};\n};\n\n// eslint-disable-next-line flowtype/no-weak-types\nexport function promisify(method : (...args : $ReadOnlyArray) => R, options : PromisifyOptions = getDefaultPromisifyOptions()) : ((...args : $ReadOnlyArray) => ZalgoPromise) {\n function promisifiedFunction() : ZalgoPromise {\n return ZalgoPromise.try(method, this, arguments);\n }\n\n if (options.name) {\n promisifiedFunction.displayName = `${ options.name }:promisified`;\n }\n\n return setFunctionName(promisifiedFunction, `${ getFunctionName(method) }::promisified`);\n}\n\n// eslint-disable-next-line flowtype/no-weak-types\nexport function inlineMemoize(method : (...args : $ReadOnlyArray) => R, logic : (...args : $ReadOnlyArray) => R, args : $ReadOnlyArray = []) : R {\n // $FlowFixMe\n const cache : {| [string] : R |} = method.__inline_memoize_cache__ = method.__inline_memoize_cache__ || {};\n const key = serializeArgs(args);\n\n if (cache.hasOwnProperty(key)) {\n return cache[key];\n }\n\n const result = cache[key] = logic(...args);\n\n return result;\n}\n\n// eslint-disable-next-line no-unused-vars\nexport function noop(...args : $ReadOnlyArray) {\n // pass\n}\n\nexport function once(method : Function) : Function {\n let called = false;\n\n const onceFunction = function() : mixed {\n if (!called) {\n called = true;\n return method.apply(this, arguments);\n }\n };\n\n return setFunctionName(onceFunction, `${ getFunctionName(method) }::once`);\n}\n\nexport function hashStr(str : string) : number {\n let hash = 0;\n for (let i = 0; i < str.length; i++) {\n hash += str[i].charCodeAt(0) * Math.pow((i % 10) + 1, 5);\n }\n return Math.floor(Math.pow(Math.sqrt(hash), 5));\n}\n\nexport function strHashStr(str : string) : string {\n let hash = '';\n\n for (let i = 0; i < str.length; i++) {\n let total = (str[i].charCodeAt(0) * i);\n\n if (str[i + 1]) {\n total += (str[i + 1].charCodeAt(0) * (i - 1));\n }\n\n hash += String.fromCharCode(97 + (Math.abs(total) % 26));\n }\n\n return hash;\n}\n\nexport function match(str : string, pattern : RegExp) : ?string {\n const regmatch = str.match(pattern);\n if (regmatch) {\n return regmatch[1];\n }\n}\n\nexport function awaitKey(obj : Object, key : string) : ZalgoPromise {\n return new ZalgoPromise(resolve => {\n\n let value = obj[key];\n\n if (value) {\n return resolve(value);\n }\n\n delete obj[key];\n\n Object.defineProperty(obj, key, {\n\n configurable: true,\n\n set(item) {\n value = item;\n\n if (value) {\n resolve(value);\n }\n },\n\n get() : T {\n return value;\n }\n });\n });\n}\n\nexport function stringifyError(err : mixed, level : number = 1) : string {\n\n if (level >= 3) {\n return 'stringifyError stack overflow';\n }\n\n try {\n if (!err) {\n // $FlowFixMe[method-unbinding]\n return ``;\n }\n\n if (typeof err === 'string') {\n return err;\n }\n\n if (err instanceof Error) {\n const stack = err && err.stack;\n const message = err && err.message;\n\n if (stack && message) {\n if (stack.indexOf(message) !== -1) {\n return stack;\n } else {\n return `${ message }\\n${ stack }`;\n }\n } else if (stack) {\n return stack;\n } else if (message) {\n return message;\n }\n }\n\n if (err && err.toString && typeof err.toString === 'function') {\n // $FlowFixMe\n return err.toString();\n }\n\n // $FlowFixMe[method-unbinding]\n return Object.prototype.toString.call(err);\n\n } catch (newErr) {\n return `Error while stringifying error: ${ stringifyError(newErr, level + 1) }`;\n }\n}\n\nexport function stringifyErrorMessage(err : mixed) : string {\n\n // $FlowFixMe[method-unbinding]\n const defaultMessage = ``;\n\n if (!err) {\n return defaultMessage;\n }\n\n if (err instanceof Error) {\n return err.message || defaultMessage;\n }\n\n if (typeof err.message === 'string') {\n return err.message || defaultMessage;\n }\n\n return defaultMessage;\n}\n\nexport function stringify(item : mixed) : string {\n if (typeof item === 'string') {\n return item;\n }\n\n if (item && item.toString && typeof item.toString === 'function') {\n // $FlowFixMe\n return item.toString();\n }\n\n // $FlowFixMe[method-unbinding]\n return Object.prototype.toString.call(item);\n}\n\nexport function domainMatches(hostname : string, domain : string) : boolean {\n hostname = hostname.split('://')[1];\n const index = hostname.indexOf(domain);\n return (index !== -1 && hostname.slice(index) === domain);\n}\n\nexport function patchMethod(obj : Object, name : string, handler : Function) {\n const original = obj[name];\n\n obj[name] = function patchedMethod() : mixed {\n return handler({\n context: this,\n // $FlowFixMe[method-unbinding]\n args: Array.prototype.slice.call(arguments),\n original,\n callOriginal: () => original.apply(this, arguments)\n });\n };\n}\n\nexport function extend(obj : T, source : Object) : T {\n if (!source) {\n return obj;\n }\n\n if (Object.assign) {\n return Object.assign(obj, source);\n }\n\n for (const key in source) {\n if (source.hasOwnProperty(key)) {\n obj[key] = source[key];\n }\n }\n\n return obj;\n}\n\nexport function values(obj : { [string] : T }) : $ReadOnlyArray {\n if (Object.values) {\n // $FlowFixMe\n return Object.values(obj);\n }\n\n const result : Array = [];\n for (const key in obj) {\n if (obj.hasOwnProperty(key)) {\n // $FlowFixMe[escaped-generic]\n result.push(obj[key]);\n }\n }\n\n // $FlowFixMe\n return result;\n}\n\n// eslint-disable-next-line no-undef\nexport const memoizedValues : ({ [string] : T }) => $ReadOnlyArray = memoize(values);\n\nexport function perc(pixels : number, percentage : number) : number {\n return Math.round((pixels * percentage) / 100);\n}\n\nexport function min(...args : $ReadOnlyArray) : number {\n return Math.min(...args);\n}\n\nexport function max(...args : $ReadOnlyArray) : number {\n return Math.max(...args);\n}\n\nexport function roundUp(num : number, nearest : number) : number {\n const remainder = num % nearest;\n return remainder\n ? (num - remainder) + nearest\n : num;\n}\n\nexport function regexMap(str : string, regexp : RegExp, handler : () => T) : $ReadOnlyArray {\n const results = [];\n\n // $FlowFixMe\n str.replace(regexp, function regexMapMatcher(item) {\n results.push(handler ? handler.apply(null, arguments) : item);\n });\n\n // $FlowFixMe\n return results;\n}\n\nexport function svgToBase64(svg : string) : string {\n return `data:image/svg+xml;base64,${ base64encode(svg) }`;\n}\n\nexport function objFilter(obj : { [string] : T }, filter? : (T, ?string) => mixed = Boolean) : { [string] : R } {\n const result = {};\n\n for (const key in obj) {\n if (!obj.hasOwnProperty(key) || !filter(obj[key], key)) {\n continue;\n }\n\n result[key] = obj[key];\n }\n\n return result;\n}\n\nexport function identity (item : T) : T {\n return item;\n}\n\nexport function regexTokenize(text : string, regexp : RegExp) : $ReadOnlyArray {\n const result = [];\n text.replace(regexp, token => {\n result.push(token);\n return '';\n });\n return result;\n}\n\nexport function promiseDebounce(method : () => ZalgoPromise | T, delay : number = 50) : () => ZalgoPromise {\n\n let promise;\n let timeout;\n\n const promiseDebounced = function() : ZalgoPromise {\n if (timeout) {\n clearTimeout(timeout);\n }\n\n const localPromise = promise = promise || new ZalgoPromise();\n\n timeout = setTimeout(() => {\n promise = null;\n timeout = null;\n\n ZalgoPromise.try(method).then(\n result => { localPromise.resolve(result); },\n err => { localPromise.reject(err); }\n );\n }, delay);\n\n return localPromise;\n };\n\n return setFunctionName(promiseDebounced, `${ getFunctionName(method) }::promiseDebounced`);\n}\n\nexport function safeInterval(method : Function, time : number) : {| cancel : () => void |} {\n\n let timeout;\n\n function loop() {\n timeout = setTimeout(() => {\n method();\n loop();\n }, time);\n }\n\n loop();\n\n return {\n cancel() {\n clearTimeout(timeout);\n }\n };\n}\n\nexport function isInteger(str : string) : boolean {\n return Boolean(str.match(/^[0-9]+$/));\n}\n\nexport function isFloat(str : string) : boolean {\n return Boolean(str.match(/^[0-9]+\\.[0-9]+$/));\n}\n\nexport function serializePrimitive(value : string | number | boolean) : string {\n return value.toString();\n}\n\nexport function deserializePrimitive(value : string) : string | number | boolean {\n if (value === 'true') {\n return true;\n } else if (value === 'false') {\n return false;\n } else if (isInteger(value)) {\n return parseInt(value, 10);\n } else if (isFloat(value)) {\n return parseFloat(value);\n } else {\n return value;\n }\n}\n\nexport function dotify(obj : Object, prefix : string = '', newobj : Object = {}) : { [string] : string } {\n prefix = prefix ? `${ prefix }.` : prefix;\n for (const key in obj) {\n if (!obj.hasOwnProperty(key) || obj[key] === undefined || obj[key] === null || typeof obj[key] === 'function') {\n continue;\n } else if (obj[key] && Array.isArray(obj[key]) && obj[key].length && obj[key].every(val => typeof val !== 'object')) {\n newobj[`${ prefix }${ key }[]`] = obj[key].join(',');\n } else if (obj[key] && typeof obj[key] === 'object') {\n newobj = dotify(obj[key], `${ prefix }${ key }`, newobj);\n } else {\n newobj[`${ prefix }${ key }`] = serializePrimitive(obj[key]);\n }\n }\n return newobj;\n}\n\nexport function undotify(obj : { [string] : string }) : Object {\n\n const result = {};\n\n for (let key in obj) {\n if (!obj.hasOwnProperty(key) || typeof obj[key] !== 'string') {\n continue;\n }\n\n let value = obj[key];\n\n if (key.match(/^.+\\[\\]$/)) {\n key = key.slice(0, -2);\n value = value.split(',').map(deserializePrimitive);\n } else {\n value = deserializePrimitive(value);\n }\n\n let keyResult = result;\n const parts = key.split('.');\n for (let i = 0; i < parts.length; i++) {\n const part = parts[i];\n const isLast = (i + 1 === parts.length);\n const isIndex = !isLast && isInteger(parts[i + 1]);\n\n if (part === 'constructor' || part === 'prototype' || part === '__proto__') {\n throw new Error(`Disallowed key: ${ part }`);\n }\n\n if (isLast) {\n // $FlowFixMe\n keyResult[part] = value;\n } else {\n // $FlowFixMe\n keyResult = keyResult[part] = keyResult[part] || (isIndex ? [] : {});\n }\n }\n }\n\n return result;\n}\n\nexport type EventEmitterType = {|\n on : (eventName : string, handler : Function) => CancelableType,\n once : (eventName : string, handler : Function) => CancelableType,\n trigger : (eventName : string, ...args : $ReadOnlyArray) => ZalgoPromise,\n triggerOnce : (eventName : string, ...args : $ReadOnlyArray) => ZalgoPromise,\n reset : () => void\n|};\n\nexport function eventEmitter() : EventEmitterType {\n const triggered = {};\n let handlers = {};\n\n const emitter = {\n\n on(eventName : string, handler : Function) : CancelableType {\n const handlerList = handlers[eventName] = handlers[eventName] || [];\n\n handlerList.push(handler);\n\n let cancelled = false;\n\n return {\n cancel() {\n if (!cancelled) {\n cancelled = true;\n handlerList.splice(handlerList.indexOf(handler), 1);\n }\n\n }\n };\n },\n\n once(eventName : string, handler : Function) : CancelableType {\n\n const listener = emitter.on(eventName, () => {\n listener.cancel();\n handler();\n });\n\n return listener;\n },\n\n trigger(eventName : string, ...args : $ReadOnlyArray) : ZalgoPromise {\n\n const handlerList = handlers[eventName];\n const promises = [];\n\n if (handlerList) {\n for (const handler of handlerList) {\n promises.push(ZalgoPromise.try(() => handler(...args)));\n }\n }\n\n return ZalgoPromise.all(promises).then(noop);\n },\n\n triggerOnce(eventName : string, ...args : $ReadOnlyArray) : ZalgoPromise {\n\n if (triggered[eventName]) {\n return ZalgoPromise.resolve();\n }\n\n triggered[eventName] = true;\n return emitter.trigger(eventName, ...args);\n },\n\n reset() {\n handlers = {};\n }\n };\n\n return emitter;\n}\n\nexport function camelToDasherize(string : string) : string {\n return string.replace(/([A-Z])/g, (g) => {\n return `-${ g.toLowerCase() }`;\n });\n}\n\nexport function dasherizeToCamel(string : string) : string {\n return string.replace(/-([a-z])/g, (g) => {\n return g[1].toUpperCase();\n });\n}\n\nexport function capitalizeFirstLetter(string : string) : string {\n return string.charAt(0).toUpperCase() + string.slice(1).toLowerCase();\n}\n\nexport function get(item : Object, path : string, def : mixed) : mixed {\n\n if (!path) {\n return def;\n }\n\n const pathParts = path.split('.');\n\n // Loop through each section of our key path\n\n for (let i = 0; i < pathParts.length; i++) {\n\n // If we have an object, we can get the key\n if (typeof item === 'object' && item !== null) {\n item = item[pathParts[i]];\n\n // Otherwise, we should return the default (undefined if not provided)\n } else {\n return def;\n }\n }\n\n // If our final result is undefined, we should return the default\n\n return item === undefined ? def : item;\n}\n\nexport function safeTimeout(method : Function, time : number) {\n\n const interval = safeInterval(() => {\n time -= 100;\n if (time <= 0) {\n interval.cancel();\n method();\n }\n }, 100);\n}\n\nexport function defineLazyProp(obj : Object | $ReadOnlyArray, key : string | number, getter : () => T) {\n if (Array.isArray(obj)) {\n if (typeof key !== 'number') {\n throw new TypeError(`Array key must be number`);\n }\n } else if (typeof obj === 'object' && obj !== null) {\n if (typeof key !== 'string') {\n throw new TypeError(`Object key must be string`);\n }\n }\n\n Object.defineProperty(obj, key, {\n configurable: true,\n enumerable: true,\n get: () => {\n // $FlowFixMe\n delete obj[key];\n const value = getter();\n // $FlowFixMe\n obj[key] = value;\n return value;\n },\n set: (value : T) => {\n // $FlowFixMe\n delete obj[key];\n // $FlowFixMe\n obj[key] = value;\n }\n });\n}\n\nexport function arrayFrom(item : Iterable) : $ReadOnlyArray { // eslint-disable-line no-undef\n // $FlowFixMe[method-unbinding]\n return Array.prototype.slice.call(item);\n}\n\nexport function isObject(item : mixed) : boolean {\n return (typeof item === 'object' && item !== null);\n}\n\nexport function isObjectObject(obj : mixed) : boolean {\n // $FlowFixMe[method-unbinding]\n return isObject(obj) && Object.prototype.toString.call(obj) === '[object Object]';\n}\n\nexport function isPlainObject(obj : mixed) : boolean {\n if (!isObjectObject(obj)) {\n return false;\n }\n\n // $FlowFixMe\n const constructor = obj.constructor;\n\n if (typeof constructor !== 'function') {\n return false;\n }\n\n const prototype = constructor.prototype;\n\n if (!isObjectObject(prototype)) {\n return false;\n }\n\n if (!prototype.hasOwnProperty('isPrototypeOf')) {\n return false;\n }\n\n return true;\n}\n\nexport function replaceObject | Object> (item : T, replacer : (mixed, string | number, string) => mixed, fullKey : string = '') : T {\n\n if (Array.isArray(item)) {\n const length = item.length;\n const result : Array = [];\n\n for (let i = 0; i < length; i++) {\n\n\n defineLazyProp(result, i, () => {\n const itemKey = fullKey ? `${ fullKey }.${ i }` : `${ i }`;\n const el = item[i];\n\n let child = replacer(el, i, itemKey);\n\n if (isPlainObject(child) || Array.isArray(child)) {\n // $FlowFixMe\n child = replaceObject(child, replacer, itemKey);\n }\n\n return child;\n });\n }\n\n // $FlowFixMe\n return result;\n } else if (isPlainObject(item)) {\n const result = {};\n\n for (const key in item) {\n if (!item.hasOwnProperty(key)) {\n continue;\n }\n\n defineLazyProp(result, key, () => {\n const itemKey = fullKey ? `${ fullKey }.${ key }` : `${ key }`;\n // $FlowFixMe\n const el = item[key];\n\n let child = replacer(el, key, itemKey);\n\n if (isPlainObject(child) || Array.isArray(child)) {\n // $FlowFixMe\n child = replaceObject(child, replacer, itemKey);\n }\n\n return child;\n });\n }\n\n // $FlowFixMe\n return result;\n } else {\n throw new Error(`Pass an object or array`);\n }\n}\n\n\nexport function copyProp(source : Object, target : Object, name : string, def : mixed) {\n if (source.hasOwnProperty(name)) {\n const descriptor = Object.getOwnPropertyDescriptor(source, name);\n // $FlowFixMe\n Object.defineProperty(target, name, descriptor);\n\n } else {\n target[name] = def;\n }\n}\n\ntype RegexResultType = {|\n text : string,\n groups : $ReadOnlyArray,\n start : number,\n end : number,\n length : number,\n replace : (text : string) => string\n|};\n\nexport function regex(pattern : string | RegExp, string : string, start : number = 0) : ?RegexResultType {\n\n if (typeof pattern === 'string') {\n // eslint-disable-next-line security/detect-non-literal-regexp\n pattern = new RegExp(pattern);\n }\n\n const result = string.slice(start).match(pattern);\n\n if (!result) {\n return;\n }\n\n // $FlowFixMe\n const index : number = result.index;\n const regmatch = result[0];\n\n return {\n text: regmatch,\n groups: result.slice(1),\n start: start + index,\n end: start + index + regmatch.length,\n length: regmatch.length,\n\n replace(text : string) : string {\n\n if (!regmatch) {\n return '';\n }\n\n return `${ regmatch.slice(0, start + index) }${ text }${ regmatch.slice(index + regmatch.length) }`;\n }\n };\n}\n\nexport function regexAll(pattern : string | RegExp, string : string) : $ReadOnlyArray {\n\n const matches = [];\n let start = 0;\n\n // eslint-disable-next-line no-constant-condition\n while (true) {\n const regmatch = regex(pattern, string, start);\n\n if (!regmatch) {\n break;\n }\n\n matches.push(regmatch);\n start = match.end;\n }\n\n return matches;\n}\n\nexport function isDefined(value : ?mixed) : boolean {\n return value !== null && value !== undefined;\n}\n\nexport function cycle(method : Function) : ZalgoPromise {\n return ZalgoPromise.try(method).then(() => cycle(method));\n}\n\nexport function debounce(method : (...args : $ReadOnlyArray) => T, time : number = 100) : (...args : $ReadOnlyArray) => void {\n\n let timeout;\n\n const debounceWrapper = function() {\n clearTimeout(timeout);\n\n timeout = setTimeout(() => {\n return method.apply(this, arguments);\n }, time);\n };\n\n return setFunctionName(debounceWrapper, `${ getFunctionName(method) }::debounced`);\n}\n\nexport function isRegex(item : mixed) : boolean {\n // $FlowFixMe[method-unbinding]\n return Object.prototype.toString.call(item) === '[object RegExp]';\n}\n\ntype FunctionProxy = (method : T) => T;\n\n// eslint-disable-next-line flowtype/no-weak-types\nexport const weakMapMemoize : FunctionProxy<*> = (method : (arg : any) => R) : ((...args : $ReadOnlyArray) => R) => {\n\n const weakmap = new WeakMap();\n\n // eslint-disable-next-line flowtype/no-weak-types\n return function weakmapMemoized(arg : any) : R {\n return weakmap.getOrSet(arg, () => method.call(this, arg));\n };\n};\n\ntype FunctionPromiseProxy) => ZalgoPromise> = (T) => T;\n\n// eslint-disable-next-line flowtype/no-weak-types\nexport const weakMapMemoizePromise : FunctionPromiseProxy<*, *> = (method : (arg : any) => ZalgoPromise) : ((...args : $ReadOnlyArray) => ZalgoPromise) => {\n\n const weakmap = new WeakMap();\n\n // eslint-disable-next-line flowtype/no-weak-types\n return function weakmapMemoizedPromise(arg : any) : ZalgoPromise {\n return weakmap.getOrSet(arg, () =>\n method.call(this, arg).finally(() => {\n weakmap.delete(arg);\n }));\n };\n};\n\nexport function getOrSet(obj : O, key : string, getter : () => T) : T {\n if (obj.hasOwnProperty(key)) {\n return obj[key];\n }\n\n const val = getter();\n obj[key] = val;\n return val;\n}\n\nexport type CleanupType = {|\n set : (string, T) => T, // eslint-disable-line no-undef\n register : (Function) => {| cancel : () => void |},\n all : (err? : mixed) => ZalgoPromise\n|};\n\nexport function cleanup(obj : Object) : CleanupType {\n\n const tasks = [];\n let cleaned = false;\n let cleanErr;\n\n const cleaner = {\n set(name : string, item : T) : T {\n if (!cleaned) {\n obj[name] = item;\n cleaner.register(() => {\n delete obj[name];\n });\n }\n return item;\n },\n\n register(method : Function) : {| cancel : () => void |} {\n const task = once(() => method(cleanErr));\n\n if (cleaned) {\n method(cleanErr);\n } else {\n tasks.push(task);\n }\n\n return {\n cancel: () => {\n const index = tasks.indexOf(task);\n if (index !== -1) {\n tasks.splice(index, 1);\n }\n }\n };\n },\n\n all(err? : mixed) : ZalgoPromise {\n cleanErr = err;\n\n const results = [];\n cleaned = true;\n\n while (tasks.length) {\n const task = tasks.shift();\n results.push(task());\n }\n\n return ZalgoPromise.all(results).then(noop);\n }\n };\n\n return cleaner;\n}\n\nexport function tryCatch(fn : () => T) : {| result : T, error : void |} | {| result : void, error : mixed |} {\n let result;\n let error;\n\n try {\n result = fn();\n } catch (err) {\n error = err;\n }\n\n // $FlowFixMe\n return { result, error };\n}\n\n// eslint-disable-next-line flowtype/no-mutable-array\nexport function removeFromArray>(arr : T, item : X) {\n const index = arr.indexOf(item);\n if (index !== -1) {\n arr.splice(index, 1);\n }\n}\n\nexport function assertExists(name : string, thing : void | null | T) : T {\n if (thing === null || typeof thing === 'undefined') {\n throw new Error(`Expected ${ name } to be present`);\n }\n\n return thing;\n}\n\nexport function unique(arr : $ReadOnlyArray) : $ReadOnlyArray {\n const result = {};\n for (const item of arr) {\n result[item] = true;\n }\n return Object.keys(result);\n}\n\nexport const constHas = (constant : T, value : X) : boolean => {\n return memoizedValues(constant).indexOf(value) !== -1;\n};\n\nexport function dedupeErrors(handler : (mixed) => T) : (mixed) => (T | void) {\n const seenErrors = [];\n const seenStringifiedErrors = {};\n\n return (err) => {\n if (seenErrors.indexOf(err) !== -1) {\n return;\n }\n\n seenErrors.push(err);\n\n const stringifiedError = stringifyError(err);\n if (seenStringifiedErrors[stringifiedError]) {\n return;\n }\n\n seenStringifiedErrors[stringifiedError] = true;\n return handler(err);\n };\n}\n\nexport class ExtendableError extends Error {\n constructor(message : string) {\n super(message);\n // eslint-disable-next-line unicorn/custom-error-definition\n this.name = this.constructor.name;\n if (typeof Error.captureStackTrace === 'function') {\n Error.captureStackTrace(this, this.constructor);\n } else {\n this.stack = (new Error(message)).stack;\n }\n }\n}\n","/* @flow */\n\nexport function hasNativeWeakMap() : boolean {\n\n if (typeof WeakMap === 'undefined') {\n return false;\n }\n\n if (typeof Object.freeze === 'undefined') {\n return false;\n }\n\n try {\n\n const testWeakMap = new WeakMap();\n const testKey = {};\n const testValue = '__testvalue__';\n\n Object.freeze(testKey);\n\n testWeakMap.set(testKey, testValue);\n\n if (testWeakMap.get(testKey) === testValue) {\n return true;\n }\n\n return false;\n\n } catch (err) {\n\n return false;\n }\n}\n","/* @flow */\n/* eslint max-lines: off */\nimport { ZalgoPromise } from '@krakenjs/zalgo-promise/src';\nimport { linkFrameWindow, isWindowClosed, assertSameDomain,\n type SameDomainWindowType, type CrossDomainWindowType } from '@krakenjs/cross-domain-utils/src';\nimport { WeakMap } from '@krakenjs/cross-domain-safe-weakmap/src';\n\nimport { isElement, inlineMemoize, memoize, noop, stringify, capitalizeFirstLetter,\n once, extend, safeInterval, uniqueID, arrayFrom, ExtendableError, strHashStr } from './util';\nimport { isDevice } from './device';\nimport { KEY_CODES, ATTRIBUTES, UID_HASH_LENGTH } from './constants';\nimport type { CancelableType } from './types';\n\ntype ElementRefType = string | HTMLElement;\n\nexport function getBody() : HTMLBodyElement {\n // eslint-disable-next-line compat/compat\n const body = document.body;\n\n if (!body) {\n throw new Error(`Body element not found`);\n }\n\n return body;\n}\n\nexport function isDocumentReady() : boolean {\n // eslint-disable-next-line compat/compat\n return Boolean(document.body) && (document.readyState === 'complete');\n}\n\nexport function isDocumentInteractive() : boolean {\n // eslint-disable-next-line compat/compat\n return Boolean(document.body) && (document.readyState === 'interactive');\n}\n\nexport function urlEncode(str : string) : string {\n return encodeURIComponent(str);\n}\n\nexport function waitForWindowReady() : ZalgoPromise {\n return inlineMemoize(waitForWindowReady, () : ZalgoPromise => {\n return new ZalgoPromise(resolve => {\n if (isDocumentReady()) {\n resolve();\n }\n\n window.addEventListener('load', () => resolve());\n });\n });\n}\n\ntype WaitForDocumentReady = () => ZalgoPromise;\n\nexport const waitForDocumentReady : WaitForDocumentReady = memoize(() => {\n return new ZalgoPromise(resolve => {\n\n if (isDocumentReady() || isDocumentInteractive()) {\n return resolve();\n }\n\n const interval = setInterval(() => {\n if (isDocumentReady() || isDocumentInteractive()) {\n clearInterval(interval);\n return resolve();\n }\n }, 10);\n });\n});\n\nexport function waitForDocumentBody() : ZalgoPromise {\n return ZalgoPromise.try(() => {\n if (document.body) {\n return document.body;\n }\n\n return waitForDocumentReady().then(() => {\n if (document.body) {\n return document.body;\n }\n\n throw new Error('Document ready but document.body not present');\n });\n });\n}\n\nexport function parseQuery(queryString : string) : Object {\n return inlineMemoize(parseQuery, () : Object => {\n const params = {};\n\n if (!queryString) {\n return params;\n }\n\n if (queryString.indexOf('=') === -1) {\n return params;\n }\n\n for (let pair of queryString.split('&')) {\n pair = pair.split('=');\n\n if (pair[0] && pair[1]) {\n params[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1]);\n }\n }\n\n return params;\n }, [ queryString ]);\n}\n\n\nexport function getQueryParam(name : string) : string {\n return parseQuery(window.location.search.slice(1))[name];\n}\n\nexport function urlWillRedirectPage(url : string) : boolean {\n\n if (url.indexOf('#') === -1) {\n return true;\n }\n\n if (url.indexOf('#') === 0) {\n return false;\n }\n\n if (url.split('#')[0] === window.location.href.split('#')[0]) {\n return false;\n }\n\n return true;\n}\n\nexport type Query = {\n [ string ] : boolean | string\n};\n\nexport function formatQuery(obj : Query = {}) : string {\n\n return Object.keys(obj).filter(key => {\n return typeof obj[key] === 'string' || typeof obj[key] === 'boolean';\n }).map(key => {\n const val = obj[key];\n\n if (typeof val !== 'string' && typeof val !== 'boolean') {\n throw new TypeError(`Invalid type for query`);\n }\n\n return `${ urlEncode(key) }=${ urlEncode(val.toString()) }`;\n }).join('&');\n}\n\nexport function extendQuery(originalQuery : string, props : Query = {}) : string {\n\n if (!props || !Object.keys(props).length) {\n return originalQuery;\n }\n\n return formatQuery({\n ...parseQuery(originalQuery),\n ...props\n });\n}\n\nexport function extendUrl(url : string, options : {| query? : Query, hash? : Query |}) : string {\n\n const query = options.query || {};\n const hash = options.hash || {};\n\n let originalUrl;\n let originalQuery;\n let originalHash;\n\n [ originalUrl, originalHash ] = url.split('#');\n [ originalUrl, originalQuery ] = originalUrl.split('?');\n\n const queryString = extendQuery(originalQuery, query);\n const hashString = extendQuery(originalHash, hash);\n\n if (queryString) {\n originalUrl = `${ originalUrl }?${ queryString }`;\n }\n\n if (hashString) {\n originalUrl = `${ originalUrl }#${ hashString }`;\n }\n\n return originalUrl;\n}\n\nexport function redirect(url : string, win : CrossDomainWindowType = window) : ZalgoPromise {\n return new ZalgoPromise(resolve => {\n win.location = url;\n if (!urlWillRedirectPage(url)) {\n resolve();\n }\n });\n}\n\nexport function hasMetaViewPort() : boolean {\n const meta = document.querySelector('meta[name=viewport]');\n\n if (isDevice() && window.screen.width < 660 && !meta) {\n return false;\n }\n\n return true;\n}\n\nexport function isElementVisible(el : HTMLElement) : boolean {\n return Boolean(el.offsetWidth || el.offsetHeight || el.getClientRects().length);\n}\n\nexport function getPerformance() : ?Performance {\n return inlineMemoize(getPerformance, () : ?Performance => {\n const performance = window.performance;\n\n if (\n performance &&\n performance.now &&\n performance.timing &&\n performance.timing.connectEnd &&\n performance.timing.navigationStart &&\n (Math.abs(performance.now() - Date.now()) > 1000) &&\n (performance.now() - (performance.timing.connectEnd - performance.timing.navigationStart)) > 0\n ) {\n return performance;\n }\n });\n}\n\nexport function enablePerformance() : boolean {\n return Boolean(getPerformance());\n}\n\nexport function getPageRenderTime() : ZalgoPromise {\n return waitForDocumentReady().then(() => {\n const performance = getPerformance();\n\n if (!performance) {\n return;\n }\n\n const timing = performance.timing;\n\n if (timing.connectEnd && timing.domInteractive) {\n return timing.domInteractive - timing.connectEnd;\n }\n });\n}\n\nexport function htmlEncode(html : string = '') : string {\n return html.toString()\n .replace(/&/g, '&')\n .replace(//g, '>')\n .replace(/\"/g, '"')\n .replace(/'/g, ''')\n .replace(/\\//g, '/');\n}\n\nexport function isBrowser() : boolean {\n return (typeof window !== 'undefined') && window.location !== undefined;\n}\n\nexport function querySelectorAll(selector : string, doc : HTMLElement = window.document) : $ReadOnlyArray {\n // $FlowFixMe[method-unbinding]\n return Array.prototype.slice.call(doc.querySelectorAll(selector));\n}\n\nexport function onClick(element : HTMLElement, handler : (Event) => void) {\n element.addEventListener('touchstart', noop);\n element.addEventListener('click', handler);\n element.addEventListener('keypress', (event : Event) => {\n // $FlowFixMe\n if (event.keyCode === KEY_CODES.ENTER || event.keyCode === KEY_CODES.SPACE) {\n return handler(event);\n }\n });\n}\n\nexport function getScript({ host = window.location.host, path, reverse = false } : {| host? : string, path : string, reverse? : boolean |}) : ?HTMLScriptElement {\n return inlineMemoize(getScript, () : ?HTMLScriptElement => {\n\n const url = `${ host }${ path }`;\n // $FlowFixMe[method-unbinding]\n const scripts = Array.prototype.slice.call(document.getElementsByTagName('script'));\n\n if (reverse) {\n scripts.reverse();\n }\n\n for (const script of scripts) {\n if (!script.src) {\n continue;\n }\n\n const src = script.src.replace(/^https?:\\/\\//, '').split('?')[0];\n\n if (src === url) {\n return script;\n }\n }\n }, [ path ]);\n}\n\nexport function isLocalStorageEnabled() : boolean {\n return inlineMemoize(isLocalStorageEnabled, () => {\n try {\n if (typeof window === 'undefined') {\n return false;\n }\n\n if (window.localStorage) {\n const value = Math.random().toString();\n window.localStorage.setItem('__test__localStorage__', value);\n const result = window.localStorage.getItem('__test__localStorage__');\n window.localStorage.removeItem('__test__localStorage__');\n if (value === result) {\n return true;\n }\n }\n } catch (err) {\n // pass\n }\n return false;\n });\n}\n\nexport function getBrowserLocales() : $ReadOnlyArray<{| country? : string, lang : string |}> {\n const nav = window.navigator;\n\n const locales = nav.languages\n ? [ ...nav.languages ]\n : [];\n\n if (nav.language) {\n locales.push(nav.language);\n }\n\n if (nav.userLanguage) {\n locales.push(nav.userLanguage);\n }\n\n return locales.map(locale => {\n\n if (locale && locale.match(/^[a-z]{2}[-_][A-Z]{2}$/)) {\n const [ lang, country ] = locale.split(/[-_]/);\n return { country, lang };\n }\n\n if (locale && locale.match(/^[a-z]{2}$/)) {\n return { lang: locale };\n }\n\n return null;\n\n }).filter(Boolean);\n}\n\n\nexport function appendChild(container : HTMLElement, child : HTMLElement | Text) {\n container.appendChild(child);\n}\n\nexport function getElementSafe(id : ElementRefType, doc : Document | HTMLElement = document) : ?HTMLElement {\n\n if (isElement(id)) {\n // $FlowFixMe\n return id;\n }\n\n if (typeof id === 'string') {\n return doc.querySelector(id);\n }\n}\n\nexport function getElement(id : ElementRefType, doc : Document | HTMLElement = document) : HTMLElement {\n\n const element = getElementSafe(id, doc);\n\n if (element) {\n return element;\n }\n\n throw new Error(`Can not find element: ${ stringify(id) }`);\n}\n\nexport function elementReady(id : ElementRefType) : ZalgoPromise {\n return new ZalgoPromise((resolve, reject) => {\n\n const name = stringify(id);\n let el = getElementSafe(id);\n\n if (el) {\n return resolve(el);\n }\n\n if (isDocumentReady()) {\n return reject(new Error(`Document is ready and element ${ name } does not exist`));\n }\n\n const interval = setInterval(() => {\n\n el = getElementSafe(id);\n\n if (el) {\n resolve(el);\n clearInterval(interval);\n return;\n }\n\n if (isDocumentReady()) {\n clearInterval(interval);\n return reject(new Error(`Document is ready and element ${ name } does not exist`));\n }\n }, 10);\n });\n}\n\n// eslint-disable-next-line unicorn/custom-error-definition\nexport class PopupOpenError extends ExtendableError {}\n\ntype PopupOptions = {|\n name? : string,\n width? : number,\n height? : number,\n top? : number,\n left? : number,\n status? : 0 | 1,\n resizable? : 0 | 1,\n toolbar? : 0 | 1,\n menubar? : 0 | 1,\n scrollbars? : 0 | 1,\n closeOnUnload? : 0 | 1\n|};\n\nexport function popup(url : string, options? : PopupOptions) : CrossDomainWindowType {\n\n // $FlowFixMe\n options = options || {};\n\n const { closeOnUnload = 1, name = '', width, height } = options;\n\n let top = 0;\n let left = 0;\n\n if (width) {\n if (window.outerWidth) {\n left = Math.round((window.outerWidth - width) / 2) + window.screenX;\n } else if (window.screen.width) {\n left = Math.round((window.screen.width - width) / 2);\n }\n }\n\n if (height) {\n if (window.outerHeight) {\n top = Math.round((window.outerHeight - height) / 2) + window.screenY;\n } else if (window.screen.height) {\n top = Math.round((window.screen.height - height) / 2);\n }\n }\n\n delete options.closeOnUnload;\n delete options.name;\n\n if (width && height) {\n // $FlowFixMe\n options = {\n top,\n left,\n width,\n height,\n status: 1,\n toolbar: 0,\n menubar: 0,\n resizable: 1,\n scrollbars: 1,\n ...options\n };\n }\n\n // eslint-disable-next-line array-callback-return\n const params = Object.keys(options).map(key => {\n // $FlowFixMe\n if (options[key] !== null && options[key] !== undefined) {\n return `${ key }=${ stringify(options[key]) }`;\n }\n }).filter(Boolean).join(',');\n\n let win;\n\n try {\n win = window.open(url, name, params);\n } catch (err) {\n throw new PopupOpenError(`Can not open popup window - ${ err.stack || err.message }`);\n }\n\n if (isWindowClosed(win)) {\n const err = new PopupOpenError(`Can not open popup window - blocked`);\n throw err;\n }\n\n if (closeOnUnload) {\n window.addEventListener('unload', () => win.close());\n }\n\n return win;\n}\n\n\nexport function writeToWindow(win : SameDomainWindowType, html : string) {\n try {\n win.document.open();\n win.document.write(html);\n win.document.close();\n } catch (err) {\n try {\n win.location = `javascript: document.open(); document.write(${ JSON.stringify(html) }); document.close();`;\n } catch (err2) {\n // pass\n }\n }\n}\n\nexport function writeElementToWindow(win : SameDomainWindowType, el : HTMLElement) {\n\n const tag = el.tagName.toLowerCase();\n\n if (tag !== 'html') {\n throw new Error(`Expected element to be html, got ${ tag }`);\n }\n\n const documentElement = win.document.documentElement;\n\n for (const child of arrayFrom(documentElement.children)) {\n documentElement.removeChild(child);\n }\n\n for (const child of arrayFrom(el.children)) {\n documentElement.appendChild(child);\n }\n}\n\nexport function setStyle(el : HTMLElement, styleText : string, doc : Document = window.document) {\n // $FlowFixMe\n if (el.styleSheet) {\n // $FlowFixMe\n el.styleSheet.cssText = styleText;\n } else {\n el.appendChild(doc.createTextNode(styleText));\n }\n}\n\nexport type ElementOptionsType = {|\n style? : { [ string ] : string },\n id? : string,\n class? : ?$ReadOnlyArray,\n attributes? : { [ string ] : string },\n styleSheet? : ?string,\n html? : ?string\n|};\n\nlet awaitFrameLoadPromises : WeakMap>;\n\nexport function awaitFrameLoad(frame : HTMLIFrameElement) : ZalgoPromise {\n awaitFrameLoadPromises = awaitFrameLoadPromises || new WeakMap();\n\n if (awaitFrameLoadPromises.has(frame)) {\n const promise = awaitFrameLoadPromises.get(frame);\n if (promise) {\n return promise;\n }\n }\n\n const promise = new ZalgoPromise((resolve, reject) => {\n frame.addEventListener('load', () => {\n linkFrameWindow(frame);\n resolve(frame);\n });\n\n frame.addEventListener('error', (err : Event) => {\n if (frame.contentWindow) {\n resolve(frame);\n } else {\n reject(err);\n }\n });\n });\n\n awaitFrameLoadPromises.set(frame, promise);\n\n return promise;\n}\n\nexport function awaitFrameWindow(frame : HTMLIFrameElement) : ZalgoPromise {\n return awaitFrameLoad(frame).then(loadedFrame => {\n\n if (!loadedFrame.contentWindow) {\n throw new Error(`Could not find window in iframe`);\n }\n\n return loadedFrame.contentWindow;\n });\n}\n\nconst getDefaultCreateElementOptions = () : ElementOptionsType => {\n // $FlowFixMe\n return {};\n};\n\nexport function createElement(tag : string = 'div', options : ElementOptionsType = getDefaultCreateElementOptions(), container : ?HTMLElement) : HTMLElement {\n\n tag = tag.toLowerCase();\n const element = document.createElement(tag);\n\n if (options.style) {\n extend(element.style, options.style);\n }\n\n if (options.class) {\n element.className = options.class.join(' ');\n }\n\n if (options.id) {\n element.setAttribute('id', options.id);\n }\n\n if (options.attributes) {\n for (const key of Object.keys(options.attributes)) {\n element.setAttribute(key, options.attributes[key]);\n }\n }\n\n if (options.styleSheet) {\n setStyle(element, options.styleSheet);\n }\n\n if (container) {\n appendChild(container, element);\n }\n\n if (options.html) {\n if (tag === 'iframe') {\n // $FlowFixMe\n if (!container || !element.contentWindow) {\n throw new Error(`Iframe html can not be written unless container provided and iframe in DOM`);\n }\n\n // $FlowFixMe\n writeToWindow(element.contentWindow, options.html);\n\n } else {\n element.innerHTML = options.html;\n }\n }\n\n return element;\n}\n\ntype StringMap = {|\n [ string ] : string\n|};\n\nexport type IframeElementOptionsType = {|\n style? : StringMap,\n class? : ?$ReadOnlyArray,\n attributes? : StringMap,\n styleSheet? : ?string,\n html? : ?string,\n url? : ?string\n|};\n\nconst getDefaultIframeOptions = () : IframeElementOptionsType => {\n // $FlowFixMe\n return {};\n};\n\nconst getDefaultStringMap = () : StringMap => {\n // $FlowFixMe\n return {};\n};\n\nexport function iframe(options : IframeElementOptionsType = getDefaultIframeOptions(), container : ?HTMLElement) : HTMLIFrameElement {\n\n const attributes = options.attributes || getDefaultStringMap();\n const style = options.style || getDefaultStringMap();\n\n // $FlowFixMe\n const newAttributes = {\n allowTransparency: 'true',\n ...attributes\n };\n\n // $FlowFixMe\n const newStyle = {\n backgroundColor: 'transparent',\n border: 'none',\n ...style\n };\n\n const frame = createElement('iframe', {\n attributes: newAttributes,\n style: newStyle,\n html: options.html,\n class: options.class\n });\n\n const isIE = window.navigator.userAgent.match(/MSIE|Edge/i);\n\n if (!frame.hasAttribute('id')) {\n frame.setAttribute('id', uniqueID());\n }\n\n // $FlowFixMe\n awaitFrameLoad(frame);\n\n if (container) {\n const el = getElement(container);\n el.appendChild(frame);\n }\n\n if (options.url || isIE) {\n frame.setAttribute('src', options.url || 'about:blank');\n }\n\n // $FlowFixMe\n return frame;\n}\n\nexport function addEventListener(obj : HTMLElement, event : string, handler : (event : Event) => void) : CancelableType {\n obj.addEventListener(event, handler);\n return {\n cancel() {\n obj.removeEventListener(event, handler);\n }\n };\n}\n\nexport function bindEvents(element : HTMLElement, eventNames : $ReadOnlyArray, handler : (event : Event) => void) : CancelableType {\n\n handler = once(handler);\n\n for (const eventName of eventNames) {\n element.addEventListener(eventName, handler);\n }\n\n return {\n cancel: once(() => {\n for (const eventName of eventNames) {\n element.removeEventListener(eventName, handler);\n }\n })\n };\n}\n\nconst VENDOR_PREFIXES = [ 'webkit', 'moz', 'ms', 'o' ];\n\nexport function setVendorCSS(element : HTMLElement, name : string, value : string) {\n\n // $FlowFixMe\n element.style[name] = value;\n\n const capitalizedName = capitalizeFirstLetter(name);\n\n for (const prefix of VENDOR_PREFIXES) {\n // $FlowFixMe\n element.style[`${ prefix }${ capitalizedName }`] = value;\n }\n}\n\nconst ANIMATION_START_EVENTS = [ 'animationstart', 'webkitAnimationStart', 'oAnimationStart', 'MSAnimationStart' ];\nconst ANIMATION_END_EVENTS = [ 'animationend', 'webkitAnimationEnd', 'oAnimationEnd', 'MSAnimationEnd' ];\n\nexport function animate(element : ElementRefType, name : string, clean : (Function) => void, timeout : number = 1000) : ZalgoPromise {\n return new ZalgoPromise((resolve, reject) => {\n\n const el = getElement(element);\n\n if (!el) {\n return resolve();\n }\n\n let hasStarted = false;\n\n // eslint-disable-next-line prefer-const\n let startTimeout;\n let endTimeout;\n // eslint-disable-next-line prefer-const\n let startEvent;\n // eslint-disable-next-line prefer-const\n let endEvent;\n\n function cleanUp() {\n clearTimeout(startTimeout);\n clearTimeout(endTimeout);\n startEvent.cancel();\n endEvent.cancel();\n }\n\n startEvent = bindEvents(el, ANIMATION_START_EVENTS, event => {\n\n // $FlowFixMe\n if (event.target !== el || event.animationName !== name) {\n return;\n }\n\n clearTimeout(startTimeout);\n\n event.stopPropagation();\n\n startEvent.cancel();\n hasStarted = true;\n\n endTimeout = setTimeout(() => {\n cleanUp();\n resolve();\n }, timeout);\n });\n\n endEvent = bindEvents(el, ANIMATION_END_EVENTS, event => {\n\n // $FlowFixMe\n if (event.target !== el || event.animationName !== name) {\n return;\n }\n\n cleanUp();\n\n // $FlowFixMe\n if (typeof event.animationName === 'string' && event.animationName !== name) {\n return reject(`Expected animation name to be ${ name }, found ${ event.animationName }`);\n }\n\n return resolve();\n });\n\n setVendorCSS(el, 'animationName', name);\n\n startTimeout = setTimeout(() => {\n if (!hasStarted) {\n cleanUp();\n return resolve();\n }\n }, 200);\n\n if (clean) {\n clean(cleanUp);\n }\n });\n}\n\nexport function makeElementVisible(element : HTMLElement) {\n element.style.setProperty('visibility', '');\n}\n\nexport function makeElementInvisible(element : HTMLElement) {\n element.style.setProperty('visibility', 'hidden', 'important');\n}\n\n\nexport function showElement(element : HTMLElement) {\n element.style.setProperty('display', '');\n}\n\nexport function hideElement(element : HTMLElement) {\n element.style.setProperty('display', 'none', 'important');\n}\n\nexport function destroyElement(element : HTMLElement) {\n if (element && element.parentNode) {\n element.parentNode.removeChild(element);\n }\n}\n\nexport function showAndAnimate(element : HTMLElement, name : string, clean : (Function) => void) : ZalgoPromise {\n const animation = animate(element, name, clean);\n showElement(element);\n return animation;\n}\n\nexport function animateAndHide(element : HTMLElement, name : string, clean : (Function) => void) : ZalgoPromise {\n return animate(element, name, clean).then(() => {\n hideElement(element);\n });\n}\n\nexport function addClass(element : HTMLElement, name : string) {\n element.classList.add(name);\n}\n\nexport function removeClass(element : HTMLElement, name : string) {\n element.classList.remove(name);\n}\n\nexport function isElementClosed(el : HTMLElement) : boolean {\n if (!el || !el.parentNode || !el.ownerDocument || !el.ownerDocument.documentElement || !el.ownerDocument.documentElement.contains(el)) {\n return true;\n }\n return false;\n}\n\nexport function watchElementForClose(element : HTMLElement, handler : () => mixed) : CancelableType {\n handler = once(handler);\n\n let cancelled = false;\n const mutationObservers = [];\n // eslint-disable-next-line prefer-const\n let interval;\n // eslint-disable-next-line prefer-const\n let sacrificialFrame;\n let sacrificialFrameWin;\n\n const cancel = () => {\n cancelled = true;\n for (const observer of mutationObservers) {\n observer.disconnect();\n }\n if (interval) {\n interval.cancel();\n }\n if (sacrificialFrameWin) {\n // eslint-disable-next-line no-use-before-define\n sacrificialFrameWin.removeEventListener('unload', elementClosed);\n }\n if (sacrificialFrame) {\n destroyElement(sacrificialFrame);\n }\n };\n\n const elementClosed = () => {\n if (!cancelled) {\n handler();\n cancel();\n }\n };\n\n if (isElementClosed(element)) {\n elementClosed();\n return { cancel };\n }\n\n // Strategy 1: Mutation observer\n\n if (window.MutationObserver) {\n let mutationElement = element.parentElement;\n while (mutationElement) {\n const mutationObserver = new window.MutationObserver(() => {\n if (isElementClosed(element)) {\n elementClosed();\n }\n });\n\n mutationObserver.observe(mutationElement, { childList: true });\n mutationObservers.push(mutationObserver);\n mutationElement = mutationElement.parentElement;\n }\n }\n\n // Strategy 2: Sacrificial iframe\n\n sacrificialFrame = document.createElement('iframe');\n sacrificialFrame.setAttribute('name', `__detect_close_${ uniqueID() }__`);\n sacrificialFrame.style.display = 'none';\n awaitFrameWindow(sacrificialFrame).then(frameWin => {\n sacrificialFrameWin = assertSameDomain(frameWin);\n sacrificialFrameWin.addEventListener('unload', elementClosed);\n });\n element.appendChild(sacrificialFrame);\n\n // Strategy 3: Poller\n\n const check = () => {\n if (isElementClosed(element)) {\n elementClosed();\n }\n };\n interval = safeInterval(check, 1000);\n\n return { cancel };\n}\n\nexport function fixScripts(el : HTMLElement, doc : Document = window.document) {\n for (const script of querySelectorAll('script', el)) {\n const parentNode = script.parentNode;\n\n if (!parentNode) {\n continue;\n }\n\n const newScript = doc.createElement('script');\n newScript.text = script.textContent;\n parentNode.replaceChild(newScript, script);\n }\n}\n\ntype OnResizeOptions = {|\n width? : boolean,\n height? : boolean,\n interval? : number,\n win? : SameDomainWindowType\n|};\n\nexport function onResize(el : HTMLElement, handler : ({| width : number, height : number |}) => void, { width = true, height = true, interval = 100, win = window } : OnResizeOptions = {}) : {| cancel : () => void |} {\n let currentWidth = el.offsetWidth;\n let currentHeight = el.offsetHeight;\n let canceled = false;\n\n handler({ width: currentWidth, height: currentHeight });\n\n const check = () => {\n if (canceled || !isElementVisible(el)) {\n return;\n }\n\n const newWidth = el.offsetWidth;\n const newHeight = el.offsetHeight;\n\n if ((width && newWidth !== currentWidth) || (height && newHeight !== currentHeight)) {\n handler({ width: newWidth, height: newHeight });\n }\n\n currentWidth = newWidth;\n currentHeight = newHeight;\n };\n\n let observer;\n let timeout;\n\n win.addEventListener('resize', check);\n\n if (typeof win.ResizeObserver !== 'undefined') {\n observer = new win.ResizeObserver(check);\n observer.observe(el);\n timeout = safeInterval(check, interval * 10);\n\n } else if (typeof win.MutationObserver !== 'undefined') {\n observer = new win.MutationObserver(check);\n observer.observe(el, {\n attributes: true,\n childList: true,\n subtree: true,\n characterData: false\n });\n timeout = safeInterval(check, interval * 10);\n } else {\n timeout = safeInterval(check, interval);\n }\n\n return {\n cancel: () => {\n canceled = true;\n observer.disconnect();\n window.removeEventListener('resize', check);\n timeout.cancel();\n }\n };\n}\n\nexport function getResourceLoadTime(url : string) : ?number {\n const performance = getPerformance();\n\n if (!performance) {\n return;\n }\n\n // $FlowFixMe[method-unbinding]\n if (typeof performance.getEntries !== 'function') {\n return;\n }\n\n const entries = performance.getEntries();\n\n for (let i = 0; i < entries.length; i++) {\n const entry = entries[i];\n\n if (entry && entry.name && entry.name.indexOf(url) === 0 && typeof entry.duration === 'number') {\n return Math.floor(entry.duration);\n }\n }\n}\n\nexport function isShadowElement(element : Node) : boolean {\n while (element.parentNode) {\n element = element.parentNode;\n }\n\n return element.toString() === '[object ShadowRoot]';\n}\n\nexport function getShadowRoot(element : Node) : ?Node {\n while (element.parentNode) {\n element = element.parentNode;\n }\n\n if (isShadowElement(element)) {\n return element;\n }\n}\n\nexport function getShadowHost(element : Node) : ?HTMLElement {\n const shadowRoot = getShadowRoot(element);\n\n // $FlowFixMe\n if (shadowRoot && shadowRoot.host) {\n // $FlowFixMe\n return shadowRoot.host;\n }\n}\n\n\nexport function insertShadowSlot(element : HTMLElement) : HTMLElement {\n const shadowHost = getShadowHost(element);\n\n if (!shadowHost) {\n throw new Error(`Element is not in shadow dom`);\n }\n\n const slotName = `shadow-slot-${ uniqueID() }`;\n const slot = document.createElement('slot');\n slot.setAttribute('name', slotName);\n element.appendChild(slot);\n\n const slotProvider = document.createElement('div');\n slotProvider.setAttribute('slot', slotName);\n shadowHost.appendChild(slotProvider);\n\n if (isShadowElement(shadowHost)) {\n return insertShadowSlot(slotProvider);\n }\n\n return slotProvider;\n}\n\nexport function preventClickFocus(el : HTMLElement) {\n const onFocus = (event : Event) => {\n el.removeEventListener('focus', onFocus);\n event.preventDefault();\n el.blur();\n return false;\n };\n\n el.addEventListener('mousedown', () => {\n el.addEventListener('focus', onFocus);\n setTimeout(() => {\n el.removeEventListener('focus', onFocus);\n }, 1);\n });\n}\n\nexport function getStackTrace() : string {\n try {\n throw new Error('_');\n }\n catch (err) {\n return err.stack || '';\n }\n}\n\nfunction inferCurrentScript() : ?HTMLScriptElement {\n try {\n const stack = getStackTrace();\n const stackDetails = (/.*at [^(]*\\((.*):(.+):(.+)\\)$/ig).exec(stack);\n const scriptLocation = stackDetails && stackDetails[1];\n\n if (!scriptLocation) {\n return;\n }\n\n // $FlowFixMe[method-unbinding]\n for (const script of Array.prototype.slice.call(document.getElementsByTagName('script')).reverse()) {\n if (script.src && script.src === scriptLocation) {\n return script;\n }\n }\n\n } catch (err) {\n // pass\n }\n}\n\n// eslint-disable-next-line compat/compat\nlet currentScript = typeof document !== 'undefined' ? document.currentScript : null;\n\ntype GetCurrentScript = () => HTMLScriptElement;\n\nexport const getCurrentScript : GetCurrentScript = memoize(() => {\n if (currentScript) {\n return currentScript;\n }\n\n currentScript = inferCurrentScript();\n\n if (currentScript) {\n return currentScript;\n }\n\n throw new Error('Can not determine current script');\n});\n\nconst currentUID = uniqueID();\n\ntype GetCurrentScriptUID = () => string;\n\nexport const getCurrentScriptUID : GetCurrentScriptUID = memoize(() => {\n let script;\n\n try {\n script = getCurrentScript();\n } catch (err) {\n return currentUID;\n }\n\n let uid = script.getAttribute(ATTRIBUTES.UID);\n\n if (uid && typeof uid === 'string') {\n return uid;\n }\n\n uid = script.getAttribute(`${ ATTRIBUTES.UID }-auto`);\n\n if (uid && typeof uid === 'string') {\n return uid;\n }\n\n if (script.src) {\n\n const { src, dataset } = script;\n const stringToHash = JSON.stringify({ src, dataset });\n const hashedString = strHashStr(stringToHash);\n const hashResult = hashedString.slice(hashedString.length - UID_HASH_LENGTH);\n\n uid = `uid_${ hashResult }`;\n } else {\n uid = uniqueID();\n }\n\n script.setAttribute(`${ ATTRIBUTES.UID }-auto`, uid);\n\n return uid;\n});\n\ntype SubmitFormOptions = {|\n url : string,\n target : string,\n body? : {| [string] : string | boolean |},\n method? : string\n|};\n\nexport function submitForm({ url, target, body, method = 'post' } : SubmitFormOptions) {\n const form = document.createElement('form');\n form.setAttribute('target', target);\n form.setAttribute('method', method);\n form.setAttribute('action', url);\n form.style.display = 'none';\n\n if (body) {\n for (const key of Object.keys(body)) {\n const input = document.createElement('input');\n input.setAttribute('name', key);\n input.setAttribute('value', body[key]?.toString());\n form.appendChild(input);\n }\n }\n\n getBody().appendChild(form);\n form.submit();\n getBody().removeChild(form);\n}\n","/* @flow */\n\nexport const KEY_CODES = {\n ENTER: 13,\n SPACE: 32\n};\n\nexport const ATTRIBUTES = {\n UID: 'data-uid'\n};\n\nexport const UID_HASH_LENGTH = 30;\n","/* @flow */\n\nimport { ZalgoPromise } from '@krakenjs/zalgo-promise/src';\nimport { type SameDomainWindowType } from '@krakenjs/cross-domain-utils/src';\n\ntype RequestOptionsType = {|\n url : string,\n method? : string,\n headers? : { [key : string] : string },\n json? : $ReadOnlyArray | Object,\n data? : { [key : string] : string },\n body? : string,\n win? : SameDomainWindowType,\n timeout? : number\n|};\n\ntype ResponseType = {|\n status : number,\n headers : { [string] : string },\n body : Object\n|};\n\nconst HEADERS = {\n CONTENT_TYPE: 'content-type',\n ACCEPT: 'accept'\n};\n\nconst headerBuilders = [];\n\nfunction parseHeaders(rawHeaders : string = '') : { [string] : string } {\n const result = {};\n for (const line of rawHeaders.trim().split('\\n')) {\n const [ key, ...values ] = line.split(':');\n result[key.toLowerCase()] = values.join(':').trim();\n }\n return result;\n}\n\nexport function request({ url, method = 'get', headers = {}, json, data, body, win = window, timeout = 0 } : RequestOptionsType) : ZalgoPromise {\n return new ZalgoPromise((resolve, reject) => {\n\n if ((json && data) || (json && body) || (data && json)) {\n throw new Error(`Only options.json or options.data or options.body should be passed`);\n }\n\n const normalizedHeaders = {};\n\n for (const key of Object.keys(headers)) {\n normalizedHeaders[key.toLowerCase()] = headers[key];\n }\n\n if (json) {\n normalizedHeaders[HEADERS.CONTENT_TYPE] = normalizedHeaders[HEADERS.CONTENT_TYPE] || 'application/json';\n } else if (data || body) {\n normalizedHeaders[HEADERS.CONTENT_TYPE] = normalizedHeaders[HEADERS.CONTENT_TYPE] || 'application/x-www-form-urlencoded; charset=utf-8';\n }\n\n normalizedHeaders[HEADERS.ACCEPT] = normalizedHeaders[HEADERS.ACCEPT] || 'application/json';\n\n for (const headerBuilder of headerBuilders) {\n const builtHeaders = headerBuilder();\n\n for (const key of Object.keys(builtHeaders)) {\n normalizedHeaders[key.toLowerCase()] = builtHeaders[key];\n }\n }\n\n const xhr = new win.XMLHttpRequest();\n\n xhr.addEventListener('load', function xhrLoad() : void {\n\n const responseHeaders = parseHeaders(this.getAllResponseHeaders());\n\n if (!this.status) {\n return reject(new Error(`Request to ${ method.toLowerCase() } ${ url } failed: no response status code.`));\n }\n\n const contentType = responseHeaders['content-type'];\n const isJSON = contentType && (contentType.indexOf('application/json') === 0 || contentType.indexOf('text/json') === 0);\n let responseBody = this.responseText;\n\n try {\n responseBody = JSON.parse(responseBody);\n } catch (err) {\n if (isJSON) {\n return reject(new Error(`Invalid json: ${ this.responseText }.`));\n }\n }\n\n const res = {\n status: this.status,\n headers: responseHeaders,\n body: responseBody\n };\n\n return resolve(res);\n\n }, false);\n\n xhr.addEventListener('error', (evt) => {\n reject(new Error(`Request to ${ method.toLowerCase() } ${ url } failed: ${ evt.toString() }.`));\n }, false);\n\n xhr.open(method, url, true);\n\n for (const key in normalizedHeaders) {\n if (normalizedHeaders.hasOwnProperty(key)) {\n xhr.setRequestHeader(key, normalizedHeaders[key]);\n }\n }\n\n if (json) {\n body = JSON.stringify(json);\n } else if (data) {\n body = Object.keys(data).map(key => {\n return `${ encodeURIComponent(key) }=${ data ? encodeURIComponent(data[key]) : '' }`;\n }).join('&');\n }\n\n xhr.timeout = timeout;\n xhr.ontimeout = function xhrTimeout() {\n reject(new Error(`Request to ${ method.toLowerCase() } ${ url } has timed out`));\n };\n\n xhr.send(body);\n });\n}\n\nexport function addHeaderBuilder(method : () => { [string] : string }) {\n headerBuilders.push(method);\n}\n","/* @flow */\n\nexport const LOG_LEVEL = {\n DEBUG: ('debug' : 'debug'),\n INFO: ('info' : 'info'),\n WARN: ('warn' : 'warn'),\n ERROR: ('error' : 'error')\n};\n\nexport const PROTOCOL = {\n FILE: 'file:'\n};\n","/* @flow */\n\nimport { LOG_LEVEL } from './constants';\n\nexport const AUTO_FLUSH_LEVEL = [ LOG_LEVEL.WARN, LOG_LEVEL.ERROR ];\n\nexport const LOG_LEVEL_PRIORITY = [ LOG_LEVEL.ERROR, LOG_LEVEL.WARN, LOG_LEVEL.INFO, LOG_LEVEL.DEBUG ];\n\nexport const FLUSH_INTERVAL = 60 * 1000;\n\nexport const DEFAULT_LOG_LEVEL : $Values = __DEBUG__ ? LOG_LEVEL.DEBUG : LOG_LEVEL.WARN;\n\nexport const AMPLITUDE_URL = 'https://api2.amplitude.com/2/httpapi';\n","/* @flow */\n\nimport { type SameDomainWindowType } from '@krakenjs/cross-domain-utils/src';\n\nimport { AMPLITUDE_URL } from './config';\nimport type { Payload } from './types';\n\ntype CanUseBeaconOptions = {|\n headers : { [string] : string },\n enableSendBeacon : boolean\n|};\n\nconst canUseSendBeacon = ({ headers, enableSendBeacon } : CanUseBeaconOptions) : boolean => {\n const hasHeaders = headers && Object.keys(headers).length;\n if (window && window.navigator.sendBeacon && !hasHeaders && enableSendBeacon && window.Blob) {\n return true;\n }\n\n return false;\n};\n\nconst isAmplitude = (url : string) : boolean => {\n if (url === AMPLITUDE_URL) {\n return true;\n }\n\n return false;\n};\n\ntype SendBeaconOptions = {|\n win : SameDomainWindowType,\n url : string,\n data : JSON,\n useBlob : boolean\n|};\n\nconst sendBeacon = ({ win = window, url, data, useBlob = true } : SendBeaconOptions) : boolean => {\n try {\n const json = JSON.stringify(data);\n\n if (!win.navigator.sendBeacon) {\n throw new Error(`No sendBeacon available`);\n }\n\n if (useBlob) {\n const blob = new Blob([ json ], { type: 'application/json' });\n return win.navigator.sendBeacon(url, blob);\n }\n \n return win.navigator.sendBeacon(url, json);\n } catch (e) {\n return false;\n }\n};\n\nconst extendIfDefined = (target : Payload, source : Payload) => {\n for (const key in source) {\n if (source.hasOwnProperty(key)) {\n target[key] = source[key];\n }\n }\n};\n\nexport { canUseSendBeacon, extendIfDefined, isAmplitude, sendBeacon };\n","/* @flow */\n\nimport { ZalgoPromise } from '@krakenjs/zalgo-promise/src';\nimport { request, noop } from '@krakenjs/belter/src';\nimport { isSameDomain, assertSameDomain, type CrossDomainWindowType } from '@krakenjs/cross-domain-utils/src';\n\nimport { canUseSendBeacon, isAmplitude, sendBeacon } from './util';\n\nexport type TransportOptions = {|\n url : string,\n method : string,\n headers : { [string] : string },\n json : Object,\n enableSendBeacon? : boolean\n|};\n\nexport type Transport = (TransportOptions) => ZalgoPromise;\n\nexport function getHTTPTransport(httpWin : CrossDomainWindowType = window) : Transport {\n const win = isSameDomain(httpWin) ? assertSameDomain(httpWin) : window;\n\n return ({ url, method, headers, json, enableSendBeacon = false } : TransportOptions) : ZalgoPromise => {\n return ZalgoPromise.try(() => {\n let beaconResult = false;\n\n if (canUseSendBeacon({ headers, enableSendBeacon })) {\n if (isAmplitude(url)) {\n beaconResult = sendBeacon({ win, url, data: json, useBlob: false });\n } else {\n beaconResult = sendBeacon({ win, url, data: json, useBlob: true });\n }\n }\n\n return beaconResult ? beaconResult : request({ win, url, method, headers, json });\n }).then(noop);\n };\n}\n","/* @flow */\n\nimport { ZalgoPromise } from '@krakenjs/zalgo-promise/src';\nimport { isBrowser, promiseDebounce, noop, safeInterval, objFilter } from '@krakenjs/belter/src';\n\nimport { DEFAULT_LOG_LEVEL, LOG_LEVEL_PRIORITY, AUTO_FLUSH_LEVEL, FLUSH_INTERVAL, AMPLITUDE_URL } from './config';\nimport { LOG_LEVEL, PROTOCOL } from './constants';\nimport { extendIfDefined } from './util';\nimport { type Transport, getHTTPTransport } from './http';\nimport type { Payload } from './types';\n\ntype LoggerOptions = {|\n url? : string,\n prefix? : string,\n logLevel? : $Values,\n transport? : Transport,\n flushInterval? : number,\n enableSendBeacon? : boolean,\n amplitudeApiKey? : string\n|};\n\ntype ClientPayload = Payload;\ntype Log = (name : string, payload? : ClientPayload) => LoggerType; // eslint-disable-line no-use-before-define\ntype Track = (payload : ClientPayload) => LoggerType; // eslint-disable-line no-use-before-define\n\ntype Builder = (Payload) => ClientPayload;\ntype AddBuilder = (Builder) => LoggerType; // eslint-disable-line no-use-before-define\n\nexport type LoggerType = {|\n debug : Log,\n info : Log,\n warn : Log,\n error : Log,\n\n track : Track,\n\n flush : () => ZalgoPromise,\n immediateFlush : () => ZalgoPromise,\n\n addPayloadBuilder : AddBuilder,\n addMetaBuilder : AddBuilder,\n addTrackingBuilder : AddBuilder,\n addHeaderBuilder : AddBuilder,\n\n setTransport : (Transport) => LoggerType,\n configure : (LoggerOptions) => LoggerType\n|};\n\nexport function Logger({ url, prefix, logLevel = DEFAULT_LOG_LEVEL, transport = getHTTPTransport(), amplitudeApiKey, flushInterval = FLUSH_INTERVAL, enableSendBeacon = false } : LoggerOptions) : LoggerType {\n\n let events : Array<{| level : $Values, event : string, payload : Payload |}> = [];\n let tracking : Array = [];\n\n const payloadBuilders : Array = [];\n const metaBuilders : Array = [];\n const trackingBuilders : Array = [];\n const headerBuilders : Array = [];\n\n function print(level : $Values, event : string, payload : Payload) {\n\n if (!isBrowser() || !window.console || !window.console.log) {\n return;\n }\n\n if (LOG_LEVEL_PRIORITY.indexOf(level) > LOG_LEVEL_PRIORITY.indexOf(logLevel)) {\n return;\n }\n\n const args = [ event ];\n\n args.push(payload);\n\n if (payload.error || payload.warning) {\n args.push('\\n\\n', payload.error || payload.warning);\n }\n\n try {\n if (window.console[level] && window.console[level].apply) {\n window.console[level].apply(window.console, args);\n } else if (window.console.log && window.console.log.apply) {\n window.console.log.apply(window.console, args);\n }\n } catch (err) {\n // pass\n }\n }\n\n function immediateFlush() : ZalgoPromise {\n return ZalgoPromise.try(() => {\n if (!isBrowser() || window.location.protocol === PROTOCOL.FILE) {\n return;\n }\n\n if (!events.length && !tracking.length) {\n return;\n }\n\n const meta = {};\n for (const builder of metaBuilders) {\n extendIfDefined(meta, builder(meta));\n }\n\n const headers = {};\n for (const builder of headerBuilders) {\n extendIfDefined(headers, builder(headers));\n }\n\n let res;\n\n if (url) {\n res = transport({\n method: 'POST',\n url,\n headers,\n json: {\n events,\n meta,\n tracking\n },\n enableSendBeacon\n }).catch(noop);\n }\n\n if (amplitudeApiKey) {\n transport({\n method: 'POST',\n url: AMPLITUDE_URL,\n headers: {},\n json: {\n api_key: amplitudeApiKey,\n events: tracking.map((payload : Payload) => {\n // $FlowFixMe\n return {\n event_type: payload.transition_name || 'event',\n event_properties: payload,\n ...payload\n };\n })\n },\n enableSendBeacon\n }).catch(noop);\n }\n\n events = [];\n tracking = [];\n\n return ZalgoPromise.resolve(res).then(noop);\n });\n }\n\n const flush = promiseDebounce(immediateFlush);\n\n function enqueue(level : $Values, event : string, payload : Payload) {\n\n events.push({\n level,\n event,\n payload\n });\n\n if (AUTO_FLUSH_LEVEL.indexOf(level) !== -1) {\n flush();\n }\n }\n\n function log(level : $Values, event : string, payload = {}) : LoggerType {\n\n if (!isBrowser()) {\n return logger; // eslint-disable-line no-use-before-define\n }\n\n if (prefix) {\n event = `${ prefix }_${ event }`;\n }\n\n const logPayload : Payload = {\n ...objFilter(payload),\n timestamp: Date.now().toString()\n };\n\n for (const builder of payloadBuilders) {\n extendIfDefined(logPayload, builder(logPayload));\n }\n\n enqueue(level, event, logPayload);\n print(level, event, logPayload);\n\n return logger; // eslint-disable-line no-use-before-define\n }\n\n function addBuilder(builders, builder) : LoggerType {\n builders.push(builder);\n return logger; // eslint-disable-line no-use-before-define\n }\n\n function addPayloadBuilder(builder) : LoggerType {\n return addBuilder(payloadBuilders, builder);\n }\n\n function addMetaBuilder(builder) : LoggerType {\n return addBuilder(metaBuilders, builder);\n }\n\n function addTrackingBuilder(builder) : LoggerType {\n return addBuilder(trackingBuilders, builder);\n }\n\n function addHeaderBuilder(builder) : LoggerType {\n return addBuilder(headerBuilders, builder);\n }\n\n function debug(event, payload) : LoggerType {\n return log(LOG_LEVEL.DEBUG, event, payload);\n }\n\n function info(event, payload) : LoggerType {\n return log(LOG_LEVEL.INFO, event, payload);\n }\n\n function warn(event, payload) : LoggerType {\n return log(LOG_LEVEL.WARN, event, payload);\n }\n\n function error(event, payload) : LoggerType {\n return log(LOG_LEVEL.ERROR, event, payload);\n }\n\n function track(payload = {}) : LoggerType {\n if (!isBrowser()) {\n return logger; // eslint-disable-line no-use-before-define\n }\n\n const trackingPayload : Payload = objFilter(payload);\n\n for (const builder of trackingBuilders) {\n extendIfDefined(trackingPayload, builder(trackingPayload));\n }\n\n print(LOG_LEVEL.DEBUG, 'track', trackingPayload);\n tracking.push(trackingPayload);\n\n return logger; // eslint-disable-line no-use-before-define\n }\n\n function setTransport(newTransport : Transport) : LoggerType {\n transport = newTransport;\n return logger; // eslint-disable-line no-use-before-define\n }\n\n function configure(opts : LoggerOptions) : LoggerType {\n if (opts.url) {\n url = opts.url;\n }\n\n if (opts.prefix) {\n prefix = opts.prefix;\n }\n\n if (opts.logLevel) {\n logLevel = opts.logLevel;\n }\n\n if (opts.transport) {\n transport = opts.transport;\n }\n\n if (opts.amplitudeApiKey) {\n amplitudeApiKey = opts.amplitudeApiKey;\n }\n\n if (opts.flushInterval) {\n flushInterval = opts.flushInterval;\n }\n\n if (opts.enableSendBeacon) {\n enableSendBeacon = opts.enableSendBeacon;\n }\n\n return logger; // eslint-disable-line no-use-before-define\n }\n\n if (isBrowser()) {\n safeInterval(flush, flushInterval);\n }\n\n if (typeof window === 'object') {\n window.addEventListener('beforeunload', () => {\n immediateFlush();\n });\n\n window.addEventListener('unload', () => {\n immediateFlush();\n });\n\n window.addEventListener('pagehide', () => {\n immediateFlush();\n });\n }\n\n const logger = {\n debug,\n info,\n warn,\n error,\n track,\n flush,\n immediateFlush,\n addPayloadBuilder,\n addMetaBuilder,\n addTrackingBuilder,\n addHeaderBuilder,\n setTransport,\n configure\n };\n\n return logger;\n}\n"],"sourceRoot":""} \ No newline at end of file diff --git a/dist/module/babel.config.js b/dist/module/babel.config.js deleted file mode 100644 index 0b91726..0000000 --- a/dist/module/babel.config.js +++ /dev/null @@ -1,6 +0,0 @@ -"use strict"; - -// eslint-disable-next-line import/no-commonjs -module.exports = { - extends: 'grumbler-scripts/config/.babelrc-browser' -}; \ No newline at end of file diff --git a/dist/module/declarations.js b/dist/module/declarations.js deleted file mode 100644 index 9a390c3..0000000 --- a/dist/module/declarations.js +++ /dev/null @@ -1 +0,0 @@ -"use strict"; \ No newline at end of file diff --git a/dist/module/http.js b/dist/module/http.js index 71c9cfd..6885f11 100644 --- a/dist/module/http.js +++ b/dist/module/http.js @@ -1,6 +1,6 @@ -import { ZalgoPromise } from 'zalgo-promise/src'; -import { request, noop } from 'belter/src'; -import { isSameDomain, assertSameDomain } from 'cross-domain-utils/src'; +import { ZalgoPromise } from '@krakenjs/zalgo-promise/src'; +import { request, noop } from '@krakenjs/belter/src'; +import { isSameDomain, assertSameDomain } from '@krakenjs/cross-domain-utils/src'; import { canUseSendBeacon, isAmplitude, sendBeacon } from './util'; export function getHTTPTransport(httpWin) { if (httpWin === void 0) { diff --git a/dist/module/logger.js b/dist/module/logger.js index a1e6818..b2494e4 100644 --- a/dist/module/logger.js +++ b/dist/module/logger.js @@ -1,6 +1,6 @@ import _extends from "@babel/runtime/helpers/esm/extends"; -import { ZalgoPromise } from 'zalgo-promise/src'; -import { isBrowser, promiseDebounce, noop, safeInterval, objFilter } from 'belter/src'; +import { ZalgoPromise } from '@krakenjs/zalgo-promise/src'; +import { isBrowser, promiseDebounce, noop, safeInterval, objFilter } from '@krakenjs/belter/src'; import { DEFAULT_LOG_LEVEL, LOG_LEVEL_PRIORITY, AUTO_FLUSH_LEVEL, FLUSH_INTERVAL, AMPLITUDE_URL } from './config'; import { LOG_LEVEL, PROTOCOL } from './constants'; import { extendIfDefined } from './util';