{"version":3,"sources":["webpack://_N_E/./node_modules/@ks/weblogger/dist/log.common.js"],"names":["_typeof","obj","Symbol","iterator","constructor","prototype","Object","defineProperty","exports","value","_extendStatics","d","b","setPrototypeOf","__proto__","Array","p","hasOwnProperty","__extends","__","this","create","_assign","assign","t","s","i","n","arguments","length","call","apply","__rest","e","indexOf","getOwnPropertySymbols","propertyIsEnumerable","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","step","next","rejected","result","done","then","__generator","body","f","y","g","_","label","sent","trys","ops","verb","v","op","TypeError","pop","push","__spreadArrays","il","r","k","a","j","jl","commonGlobal","globalThis","window","global","self","console","log","addEventListener","removeEventListener","setTimeout","setInterval","_WEBLOGGER_MOCKED_WINDOW_","document","cookie","querySelector","querySelectorAll","navigator","userAgent","screen","history","location","hostname","search","href","origin","localStorage","getItem","setItem","err","target","key","descriptor","toString","to","index","nextSource","nextKey","writable","configurable","Function","bind","oThis","aArgs","slice","fToBind","FNOP","fBound","currentThis","concat","searchElement","fromIndex","O","len","Math","abs","Infinity","max","keys","hasDontEnumBug","dontEnums","prop","_i","dontEnums_1","forEach","callback","T","kValue","commonjsGlobal","createCommonjsModule","fn","module","md5","$","safeAdd","x","lsw","md5cmn","q","num","cnt","md5ff","c","md5gg","md5hh","md5ii","binlMD5","olda","oldb","oldc","oldd","binl2rstr","input","output","length32","String","fromCharCode","rstr2binl","undefined","length8","charCodeAt","rstr2hex","hexTab","charAt","str2rstrUTF8","unescape","encodeURIComponent","rawMD5","rstrMD5","rawHMACMD5","data","hash","bkey","ipad","opad","rstrHMACMD5","string","raw","hexHMACMD5","hexMD5","parseCookieString","text","shouldDecode","options","cookies","decodeValue","decodeURIComponent","cookieParts","split","cookieName","cookieValue","cookieNameValue","match","substring","ex","cookiesMap","getCookie","name","useCaches","setCookie","encode","expires","path","domain","Date","toUTCString","secure","createCookieString","cookieUtils","nanoId","ts","random","randomer","join","resolveTopLevelDomain","ret","did","generateDID","setFullYear","getFullYear","Base","uuid","page","randomStr","getTime","GlobalConfig","proto","sessionId","isDebug","isBridge","updateConfig","NetworkPackageType","AdditionalSeqIdPackageChannel","Platform","Container","ElementStatus","PageShowAction","ActionStatus","ActionType","SubAction","Direction","TaskStatus","OperationType","PageType","ksOverseaAppList","ksAppList","addMonitor","evtTarget","evtName","attachEvent","removeMonitor","detachEvent","leftPad","str","ch","pad","isInApp","inApp","toLowerCase","fakeRaf","fakeCaf","clearTimeout","parseQueryString","queryString","queries_1","_a","stringifyQuery","paramsString","params","JSON","parse","queries","val","stringify","getStringBytes","dataStr","byteLen","Number","NaN","kpnFromUA","ua","rules","tmp","rule","name_1","exec","getDefaultKpn","kpnInCookie","kpnInUA","getUrlAndQueryFromUrl","url","queryIndex","lastIndexOf","getMappingPage","urlPackage","urlMap","parsed","res","mappingPage","cloneDeep","newObj","urlChangeEventId","supportsPushState$1","uaParser","undefined$1","FUNC_TYPE","OBJ_TYPE","STR_TYPE","MODEL","NAME","TYPE","VENDOR","VERSION","ARCHITECTURE","CONSOLE","MOBILE","TABLET","SMARTTV","WEARABLE","EMBEDDED","util","extend","regexes","extensions","mergedRegexes","has","str1","str2","lowerize","major","version","replace","trim","mapper","rgx","arrays","matches","regex","props","test","_str","map","maps","browser","oldSafari","oldEdge","os","windows","cpu","device","engine","UAParser","getResult","_ua","_rgxmap","getBrowser","_browser","getCPU","_cpu","architecture","getDevice","_device","vendor","model","type","getEngine","_engine","getOS","_os","getUA","setUA","BROWSER","MAJOR","CPU","DEVICE","ENGINE","OS","jQuery","Zepto","parser","get","set","uastring","uaInfo","getUAInfo","needCompatible","uaUtils","supportsPushState","devices","getResolution","resolution","ratio","devicePixelRatio","width","floor","min","height","getGPU","gpu","glRenderContext","createElement","getContext","debugRenderInfo","getExtension","getParameter","UNMASKED_RENDERER_WEBGL","getModel","devices_1","toLocaleLowerCase","TaskOperations","EventTypes","networkType","unknown","UNKNOWN_NETWORK","none","NOT_CONNECTED","wifi","WIFI","MOBILE_4G","MOBILE_3G","MOBILE_2G","ClientCommon","_yoda","runtimeIdMap","genId","Storage","id","getLocalStorageItem","setLocalStorageItem","BASE","device_id","global_id","union_id","user_id","session_id","product","channel","version_name","package_name","product_name","network_type","container","H5","service_name","sub_biz","need_encrypt","safety_id","experiment","h5_extra_attr","initPackageKeys","validator","Product","TimePackageSyncStatus","yodaResolve","yodaAlready","initYoda","err_1","ready","register","namespace","isSupportBridge","isSupport","canUse","tool","canIUse","KSwitchSampling","yodaUtils","getWebviewLoadPerf","webview","sendRadarLog","setClientLog","network","connection","mozConnection","webkitConnection","effectiveType","platform","UNKNOWN_PLATFORM","ANDROID_PHONE_H5","OUTSIDE_ANDROID_H5","IPHONE_H5","OUTSIDE_IOS_H5","PC_WEB","GLOBAL","ReactNative","NativeModules","isReactNative","REACT_NATIVE","WEB","mergeOptions","getOSVersion","getDefaultUserId","isV2","transformCommonPackage","base","config","initPackage","identity_package","network_package","app_package","initPackageKeys_1","baseKey","subKey","baseValue","error","CommonPackage","logConfig","language","version_code","device_package","os_version","sdk_version","checkMustProps","lastDotIndex","mixinOptions","DefaultH5ExtraAttr","app_version_name","setAdditionalSeqIdPackage","eventType","event","additional_seq_id_package","NORMAL","channel_seq_id","CHANNEL_INCREMENT_ID_KEY","custom_type","custom_seq_id","V2_INCREMENT_ID_KEY","increaseH5SeqId","isCustom","setH5ClientTimestamp","seq_id","client_timestamp","valueOf","increaseHTTPSeqId","http_seq_id","setChannel","queryStringRes","queryChannel","getVersionName","getChannel","toJSON","setBridgeInfo","info","bridge_info","getH5ExtraAttr","update","_this","commonPackage","newValue","isArray","innerPackageKeys_1","innerKey","initYodaDeviceInfo","system","getDeviceInfo","mod","initYodaAppInfo","getAppInfo","userId","appver","host_product","sdk_name","commonHideStyle","sendData$1","iframe","appendChild","contentWindow","style","cssText","createIframe","form","enctype","method","action","createForm","appendDataToForm","submit","onload","removeChild","enableBeacon","sendData","timeout","format","fd","sendBeacon","send","formData","FormData","append","transToFormData","xhr","XMLHttpRequest","open","status","response","ontimeout","onerror","send$1","forceUseBeacon","ClientEvent$1","ClientEvent","devHost","dataTrackHost","testHost","isDataTrack","host","xhrGet","getReportUrl","viewHost","reportHost","loggerUrl","Hosts","v2","production","round","development","v3","Apis","radar","getUrl","env","drained","BatchLog","logQueue","errorQueue","radarUrl","flush","sendLogs","drain","flushErrorLogs","updateBase","updateUrls","logger","webloggerSwitch","sessionStorage","loggerSessionId","loggerHost","handshakeApi","getCookieReportUrl","getWebPageReportUrl","loggerEnv","getLoggerReportUrl","init","getCommonPackageJSON","buildLogPackage","logs","buildV2Package","buildV3Package","common","sendPackage","errHandler","sender","immediate","getEventType","common_package","batchWaitTimer","wait","sendRadar","radarPackage","logPackage","unshift","merged","currentLog","destory","compensateTimer","ShowType","TaskEventType","PageCategory","ElementType","ShowActionType","ResultPackageDomain","ClickType","firstLoad","enterTime","ShowEvent","_b","currentUrlPackage","referUrlPackage","_c","beginTime","contentPackage","actionType","auto","commonInfo","UNKNOWN_STATUS","SUCCESS","UNKNOWN_ACTION_TYPE","CLICK","url_package","refer_url_package","sub_action","PAGE_ENTER","actionPB","ENTER","first_load","stay_length","LEAVE","PAGE_LEAVE","RESUME","PAGE_RESUME","PAGE_PAUSE","showType","PAGE_AUTO","PAGE_CUSTOM","PAGE","show_event","time_cost","ELEMENT","element_package","TaskEvent","taskType","operationDirection","click_event","direction","UNKNOWN2","task_event","action2","USER_OPERATION","operation_type","operation_direction","CustomStatEvent","extra","VideoStatEvent","video_stat_event","GMT","timeZoneGMTOffset","getTimezoneOffset","ReportEvent","client_increment_id","event_id","time_zone","genIncrementId","isCustomStatEvent","stat_package","event_package","custom_event","logFactory","eventId","page2","customData","custom_stat_event","UrlPackage","pageType","identity","page_type","NATIVE","MINA","UNKNOWN_PAGE_TYPE","getRealUrlPackage","query","EventEmitter","events","on","eventName","off","arr","item","splice","deleteArray","emit","args","pluginIndex","isWillClosed","Weblog$1","_super","Weblog","yoda","SampledPageMap","plugins","beforeUnload","plugin","getSessionId","baseOption","maxBatchLength","sampleRate","sampleRateFn","sampled","initConfig","initUrlPackage","commomPackage","addPlugins","initBuildInPlugins","io","enumerable","isInYoda","kswitchData","pathname","getKswitchData","getPageSampled","option","updateCurrentUrlPackage","referer","referUrl","referType","referrer","currentUrl","matchedOverAll","level","radar_1","radarConfigs","curLevel","radar_2","overwrite","overall","sort","r1","r2","updateReferUrlPackage","updateCommonPackage","addPluginInstance","pluginInstance","weblog","plug","pluginOptions","Error","unplug","destroy","unplugAll","generateLog","factory","toUpperCase","generateLogName","getCommonProps","params_1","type_1","pageParams","PV","urlPage","SHOW","action_1","CUSTOM","eventId_1","taskParams","status_1","immediately","isSendSampled","collect","sendImmediately","BasePlugin","_GLOBAL_KS_WEBLOGGER_","defaultOptions$1","updateInterval","crashThreshold","CrashMonitor","monitorId","historyMoniorInfo","stop","clearInterval","updateIntervalId","removeItem","historyMoniorString","start","checkHistoryCrash","now","time","performance","memory","monitorInfo","limit","jsHeapSizeLimit","total","totalJSHeapSize","used","usedJSHeapSize","defaultOptions","interval","decimals","FPSMonitor","count","fps","loop","fpsTick","fpsTickId","requestAnimationFrame","mozRequestAnimationFrame","webkitRequestAnimationFrame","raf","loopBeginTime","loopId","loopEndTime","calculate","handle","cancelAnimationFrame","mozCancelAnimationFrame","webkitCancelAnimationFrame","caf","toFixed","perf","performanceTiming","timing","warn","message","getEntriesByType","perfMap","dnsLookup","end","tcpConnection","resourceLoad","jsCost","custom","getEntries","entries","pageTimeInfo","firstJSTimeInfo","filter","initiatorType","domComplete","fetchStart","documentContentLoaded","load","timeToFirstByte","firstScreen","endPoint","whiteScreen","TimingMonitor","perfInfo","costMap","mark","reduce","Plugin","optionKey","PluginPlaceholder","radarOptions","sampling","samplingControl","autoRegister","navigationTiming","redirectStart","navigationStart","RADAR_KEY","LEGACY_RADAR_KEY","ERROR_KEY","KEY","domPerfMap","redirect","dns","dns_start","tcp","tcp_start","redirect_count","redirectCount","ssl","secureConnectionStart","connectEnd","ssl_start","ttfb","trans","dom_parse","dom_parse_start","blank","fb","dom_ready","resource","fp","firstPaintInfo","ceil","startTime","duration","js_cost","tti","protocol","nextHopProtocol","dom_num","all","apiPerfMap","fetch_start","cachedSkip","size","encodedBodySize","noThrottle","file","res_type","cached","transferSize","domainLookupStart","resPerfMap","DEFAULT_IGNORE_LIST","webviewPerfMap","to_webview_page_start","to_webview_page_show","to_webview_pre_create","to_webview_created","to_webview_start_load","to_webview_did_start_load","to_webview_did_end_load","to_navigation_start","to_fetch_start","to_connect_start","to_dom_ready","to_total","to_fmp","loadTimestamp","navigation_start_time","fetch_start_time","dns_start_time","dns_end_time","connect_start_time","ssl_start_time","request_start_time","response_start_time","response_end_time","dom_interactive_time","dom_loading_time","dom_ready_time","load_event_time","fmp_time","delta","isFinal","PerformanceObserver","supportedEntryTypes","includes","observe","buffered","o","persisted","u","timeStamp","visibilityState","isUnloading","capture","once","l","disconnect","m","passive","reProtocol","isInURLWhiteList","ignoreList","domainPath","some","whiteURL","radarCost","radarPoint","costName","endTime","chromeMetric","chromeMetricConfig","collectFn","processingStart","takeRecords","perfMetrics","onFirstInputDelay","entryType","cancelable","hadRecentInput","radarWarnLog","debug","getUAList","uaList","getWebViewType","Yoda","WebViewType","WebView","formatLoadTime","entry","composedPath","ele","tagName","className","getAttribute","KWAI_KPN","RadarRoot","opts","kpn","queueConfig","batchTimer","startedLoadReport","radarSessionId","isInKwai","isUsingBridge","isUsingLegacy","isUsingDetachedReport","isSupportedYodaConcat","customDimension","lastRadarLogId","computedSamplingAgain","realSampledList","observeResource","reportPerformance","asyncReportTiming","observeChromeMetrics","entryTypes","chromeMetricCallback","opt","logCollect","collectChromeMetrics","metric","asyncMetricCollectDone","radarCostResult","costItem","beforeFlush","commonLogData","project_id","projectId","radar_session_id","sended","httpReportFirst","addRadarStatEvent","serviceName","subBiz","needEncrypt","realtime","h5ExtraAttr","queue","isKSwitchSampled","rand","use","ctx","usedPlugin","created","upadteUrlPackage","computedRealSampled","KSwitchSampled","allSample","theSample","yodaCollectErrorDataDestroy","loadEventEnd","Utils","throttle","detail","startPoint","isNaN","msg","EVENT","dimension","event_type","src","webViewType","yoda_version","when","onPerfReport","value_1","allPerf","subDimension","logData","samplingList_1","radarLoadSampling","radarApiSampling","apiSampling","radarErrorSampling","errorSampling","radarResourceSampling","resourceSampling","radarCustomSampling","customSampling","radarEventSampling","eventSampling","decorateLog","kv","dispatchEvent","CustomEvent","needPush","loadLog","squashData","commomParams","removeStashedLog","sendImmediate","commonLog","formatYodaRadarData","empytLoadData","logId","RadarPlugin","Navigation","logSended","saveWebviewEntry","hasReportBase","record","fmp","webviewPerf","loadTimeout","reportOnUnload","reportFirstScreen","check4Tab","sepDimension","LOAD","getWebviewLoadData","userStart","pageStart","timeData","renderTime","webviewEntry","webviewTiming","loadTime","radarFmp","loadReport","delay","play_clicked","play_idr","play_first_screen","Resource","onResError","isScriptError","RES","failed","res_path","lineno","xhook_1","AFTER","BEFORE","COMMON_EVENTS","FIRE","NativeFetch","NativeFormData","NativeXMLHttp","OFF","ON","UPLOAD_EVENTS","WINDOW","XHookFetchRequest","XHookFormData","XHookHttpRequest","XMLHTTP","convertHeaders","depricatedProp","fakeEvent","mergeObjects","msie","nullify","proxyEvents","useragent","xhook","_base","__indexOf","WorkerGlobalScope","parseInt","_len","dst","_error","clone","_has","msieEventObject","createEventObject","Event","nodeStyle","emitter","listeners","legacylistener","_ref","shift","fire","_fire","handler","enable","disable","headers","h","dest","header","RegExp","$1","$2","checked","files","currentState","emitFinal","emitReadyState","facade","hasError","hasErrorHandler","readBody","readHead","request","setReadyState","transiting","writeBody","writeHead","statusText","getAllResponseHeaders","responseType","xml","responseXML","responseText","finalUrl","responseURL","async","hooks","_process","hook","onreadystatechange","addWithCredentials","withCredentials","user","pass","headerNames","modk","_process2","_j","_len1","_ref1","_k","_len2","_ref2","_ref3","upload","setRequestHeader","userResponse","head","progress","abort","lName","getResponseHeader","overrideMimeType","UNSENT","OPENED","HEADERS_RECEIVED","LOADING","DONE","readyState","afterHooks","beforeHooks","originalOptions","Request","getRequest","_processAfter","processBefore","Headers","Response","param","amd","interceptors","interceptor","fetch","reversedInterceptors","array","promise","requestError","responseError","unregister","validXhook","APIMonitor","logList","perfList","beforeHook","api","requestURLCompletion","afterHook","req","rest","infoStatus","customizeRadarStatus","contentLength","getResponseSize","responseData","judgedResponse","isResponseError","API","mergeAPIPerf","list","listItem","itemAPI","listItemAPI","perfSize","NATIVE_FORM_DATA","before","after","fetchIntercept","clear","attach","importScripts","ErrorMonitor","errorTimeInterval","logInfo","error_type","SCRIPT","error_cons_type","reason","stack","filename","line","col","colno","isSameErrorAndReport","onPromiseError","VIDEO","file_1","ERROR","getSameErrorIndex","MORE_REPORTED","CUSTOM_DIM_KEY","Radar","radarIgnoreList","customReported","validOption","unuseResourcePlugin","unuseAPIPlugin","unuseErrorPlugin","metric_value","metric_name","reportTimePoint","perfNow","extra_info","webview_type","headlessTestReport","playClicked","playIDR","playBlock","playError","setDimensions","paramKey","RadarPlaceHolder","willunload","AutoPV","oldPushState","pushState","oldReplaceState","replaceState","visibilityChange","state","autoPVFilter","proxyPushState","title","urlChange","proxyReplaceState","autoPV","crash","Factory","default"],"mappings":"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","file":"static/chunks/3f9a5787.77afaa68a55c268008d7.js","sourcesContent":["'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function (obj) {\n return typeof obj;\n };\n } else {\n _typeof = function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\n/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\n\n/* global Reflect, Promise */\nvar _extendStatics = function extendStatics(d, b) {\n _extendStatics = Object.setPrototypeOf || {\n __proto__: []\n } instanceof Array && function (d, b) {\n d.__proto__ = b;\n } || function (d, b) {\n for (var p in b) {\n if (b.hasOwnProperty(p)) d[p] = b[p];\n }\n };\n\n return _extendStatics(d, b);\n};\n\nfunction __extends(d, b) {\n _extendStatics(d, b);\n\n function __() {\n this.constructor = d;\n }\n\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nvar _assign = function __assign() {\n _assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n\n for (var p in s) {\n if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n }\n\n return t;\n };\n\n return _assign.apply(this, arguments);\n};\nfunction __rest(s, e) {\n var t = {};\n\n for (var p in s) {\n if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n }\n\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n}\nfunction __awaiter(thisArg, _arguments, P, generator) {\n function adopt(value) {\n return value instanceof P ? value : new P(function (resolve) {\n resolve(value);\n });\n }\n\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) {\n try {\n step(generator.next(value));\n } catch (e) {\n reject(e);\n }\n }\n\n function rejected(value) {\n try {\n step(generator[\"throw\"](value));\n } catch (e) {\n reject(e);\n }\n }\n\n function step(result) {\n result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);\n }\n\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n}\nfunction __generator(thisArg, body) {\n var _ = {\n label: 0,\n sent: function sent() {\n if (t[0] & 1) throw t[1];\n return t[1];\n },\n trys: [],\n ops: []\n },\n f,\n y,\n t,\n g;\n return g = {\n next: verb(0),\n \"throw\": verb(1),\n \"return\": verb(2)\n }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function () {\n return this;\n }), g;\n\n function verb(n) {\n return function (v) {\n return step([n, v]);\n };\n }\n\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n\n while (_) {\n try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n\n switch (op[0]) {\n case 0:\n case 1:\n t = op;\n break;\n\n case 4:\n _.label++;\n return {\n value: op[1],\n done: false\n };\n\n case 5:\n _.label++;\n y = op[1];\n op = [0];\n continue;\n\n case 7:\n op = _.ops.pop();\n\n _.trys.pop();\n\n continue;\n\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {\n _ = 0;\n continue;\n }\n\n if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {\n _.label = op[1];\n break;\n }\n\n if (op[0] === 6 && _.label < t[1]) {\n _.label = t[1];\n t = op;\n break;\n }\n\n if (t && _.label < t[2]) {\n _.label = t[2];\n\n _.ops.push(op);\n\n break;\n }\n\n if (t[2]) _.ops.pop();\n\n _.trys.pop();\n\n continue;\n }\n\n op = body.call(thisArg, _);\n } catch (e) {\n op = [6, e];\n y = 0;\n } finally {\n f = t = 0;\n }\n }\n\n if (op[0] & 5) throw op[1];\n return {\n value: op[0] ? op[1] : void 0,\n done: true\n };\n }\n}\nfunction __spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) {\n s += arguments[i].length;\n }\n\n for (var r = Array(s), k = 0, i = 0; i < il; i++) {\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) {\n r[k] = a[j];\n }\n }\n\n return r;\n}\n\n/**\r\n * 兼容 SSR、react native、worker 等非浏览器场景\r\n */\r\nvar commonGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\r\n(function () {\r\n if (typeof commonGlobal.window === 'undefined') {\r\n console.log('weblogger is running in non-browser env');\r\n commonGlobal.window = {\r\n addEventListener: function () { },\r\n removeEventListener: function () { },\r\n setTimeout: function () { },\r\n setInterval: function () { },\r\n _WEBLOGGER_MOCKED_WINDOW_: true,\r\n global: commonGlobal\r\n };\r\n }\r\n if (typeof commonGlobal.document === 'undefined') {\r\n commonGlobal.document = commonGlobal.window.document || {\r\n cookie: '',\r\n addEventListener: function () { },\r\n removeEventListener: function () { },\r\n querySelector: function () { },\r\n querySelectorAll: function () { },\r\n };\r\n if (typeof commonGlobal.window.document === 'undefined') {\r\n commonGlobal.window.document = commonGlobal.document;\r\n }\r\n }\r\n if (typeof commonGlobal.navigator === 'undefined') {\r\n commonGlobal.navigator = commonGlobal.window.navigator || {\r\n userAgent: ''\r\n };\r\n if (typeof commonGlobal.window.navigator === 'undefined') {\r\n commonGlobal.window.navigator = commonGlobal.navigator;\r\n }\r\n }\r\n if (typeof commonGlobal.screen === 'undefined') {\r\n commonGlobal.screen = commonGlobal.window.screen || {};\r\n if (typeof commonGlobal.window.screen === 'undefined') {\r\n commonGlobal.window.screen = commonGlobal.screen;\r\n }\r\n }\r\n if (typeof commonGlobal.history === 'undefined') {\r\n commonGlobal.history = commonGlobal.window.history || {};\r\n if (typeof commonGlobal.window.history === 'undefined') {\r\n commonGlobal.window.history = commonGlobal.history;\r\n }\r\n }\r\n if (typeof commonGlobal.location === 'undefined') {\r\n commonGlobal.location = commonGlobal.window.location || {\r\n hostname: '',\r\n search: '',\r\n href: '',\r\n origin: ''\r\n };\r\n if (typeof commonGlobal.window.location === 'undefined') {\r\n commonGlobal.window.location = commonGlobal.location;\r\n }\r\n }\r\n try {\r\n if (typeof commonGlobal.localStorage === 'undefined') {\r\n commonGlobal.localStorage = commonGlobal.window.localStorage || {\r\n getItem: function () { },\r\n setItem: function () { }\r\n };\r\n if (typeof commonGlobal.window.localStorage === 'undefined') {\r\n commonGlobal.window.localStorage = commonGlobal.localStorage;\r\n }\r\n }\r\n }\r\n catch (err) { }\r\n})();\n\n/**\r\n * Object.defineProperty 容错暂时处理\r\n */\r\nif (!Object.defineProperty) {\r\n Object.defineProperty = function (target, key, descriptor) {\r\n target[key] = Object.prototype.toString.call(descriptor) === '[object Object]'\r\n && descriptor.hasOwnProperty('value')\r\n ? descriptor.value\r\n : descriptor;\r\n };\r\n}\r\n/**\r\n * Object.assign polyfill\r\n */\r\nif (!Object.assign) {\r\n // Must be writable: true, enumerable: false, configurable: true\r\n Object.defineProperty(Object, 'assign', {\r\n value: function (target) {\r\n if (target === null) { // TypeError if undefined or null\r\n throw new TypeError('Cannot convert undefined or null to object');\r\n }\r\n var to = Object(target);\r\n for (var index = 1; index < arguments.length; index++) {\r\n var nextSource = arguments[index];\r\n if (nextSource !== null) { // Skip over if undefined or null\r\n for (var nextKey in nextSource) {\r\n // Avoid bugs when hasOwnProperty is shadowed\r\n if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) {\r\n to[nextKey] = nextSource[nextKey];\r\n }\r\n }\r\n }\r\n }\r\n return to;\r\n },\r\n writable: true,\r\n configurable: true,\r\n });\r\n}\r\n/**\r\n * bind polyfill\r\n */\r\nif (!Function.prototype.bind) {\r\n Function.prototype.bind = function (oThis) {\r\n if (typeof this !== 'function') {\r\n // closest thing possible to the ECMAScript 5\r\n // internal IsCallable function\r\n throw new TypeError('Function.prototype.bind - what is trying to be bound is not callable');\r\n }\r\n var aArgs = Array.prototype.slice.call(arguments, 1);\r\n /* tslint:disable no-this-assignment */\r\n var fToBind = this;\r\n /* tslint:enable */\r\n var FNOP = /** @class */ (function () {\r\n function FNOP() {\r\n }\r\n return FNOP;\r\n }());\r\n var fBound = function () {\r\n var currentThis = this instanceof FNOP\r\n ? this\r\n : oThis;\r\n // this instanceof FNOP === true时,说明返回的fBound被当做new的构造函数调用\r\n return fToBind.apply(currentThis, \r\n // 获取调用时(fBound)的传参.bind 返回的函数入参往往是这么传递的\r\n aArgs.concat(Array.prototype.slice.call(arguments)));\r\n };\r\n // 维护原型关系\r\n if (this.prototype) {\r\n // Function.prototype doesn't have a prototype property\r\n FNOP.prototype = this.prototype;\r\n }\r\n // 下行的代码使fBound.prototype是FNOP的实例,因此\r\n // 返回的fBound若作为new的构造函数,new生成的新对象作为this传入fBound,新对象的__proto__就是FNOP的实例\r\n fBound.prototype = new FNOP();\r\n return fBound;\r\n };\r\n}\r\n/**\r\n * indexOf polyfill\r\n */\r\n// Production steps of ECMA-262, Edition 5, 15.4.4.14\r\n// Reference: http://es5.github.io/#x15.4.4.14\r\nif (!Array.prototype.indexOf) {\r\n Array.prototype.indexOf = function (searchElement, fromIndex) {\r\n var k;\r\n // 1. Let O be the result of calling ToObject passing\r\n // the this value as the argument.\r\n if (this == null) {\r\n throw new TypeError('\"this\" is null or not defined');\r\n }\r\n var O = Object(this);\r\n // 2. Let lenValue be the result of calling the Get\r\n // internal method of O with the argument \"length\".\r\n // 3. Let len be ToUint32(lenValue).\r\n var len = O.length >>> 0;\r\n // 4. If len is 0, return -1.\r\n if (len === 0) {\r\n return -1;\r\n }\r\n // 5. If argument fromIndex was passed let n be\r\n // ToInteger(fromIndex); else let n be 0.\r\n var n = +fromIndex || 0;\r\n if (Math.abs(n) === Infinity) {\r\n n = 0;\r\n }\r\n // 6. If n >= len, return -1.\r\n if (n >= len) {\r\n return -1;\r\n }\r\n // 7. If n >= 0, then Let k be n.\r\n // 8. Else, n<0, Let k be len - abs(n).\r\n // If k is less than 0, then let k be 0.\r\n k = Math.max(n >= 0 ? n : len - Math.abs(n), 0);\r\n // 9. Repeat, while k < len\r\n while (k < len) {\r\n // a. Let Pk be ToString(k).\r\n // This is implicit for LHS operands of the in operator\r\n // b. Let kPresent be the result of calling the\r\n // HasProperty internal method of O with argument Pk.\r\n // This step can be combined with c\r\n // c. If kPresent is true, then\r\n // i. Let elementK be the result of calling the Get\r\n // internal method of O with the argument ToString(k).\r\n // ii. Let same be the result of applying the\r\n // Strict Equality Comparison Algorithm to\r\n // searchElement and elementK.\r\n // iii. If same is true, return k.\r\n if (k in O && O[k] === searchElement) {\r\n return k;\r\n }\r\n k++;\r\n }\r\n return -1;\r\n };\r\n}\r\nif (!Object.keys) {\r\n Object.keys = (function () {\r\n var hasOwnProperty = Object.prototype.hasOwnProperty;\r\n var hasDontEnumBug = !({ toString: null }).propertyIsEnumerable('toString');\r\n var dontEnums = [\r\n 'toString',\r\n 'toLocaleString',\r\n 'valueOf',\r\n 'hasOwnProperty',\r\n 'isPrototypeOf',\r\n 'propertyIsEnumerable',\r\n 'constructor',\r\n ];\r\n return function (obj) {\r\n if (typeof obj !== 'object' && typeof obj !== 'function' || obj === null) {\r\n throw new TypeError('Object.keys called on non-object');\r\n }\r\n var result = [];\r\n for (var prop in obj) {\r\n if (hasOwnProperty.call(obj, prop))\r\n result.push(prop);\r\n }\r\n if (hasDontEnumBug) {\r\n for (var _i = 0, dontEnums_1 = dontEnums; _i < dontEnums_1.length; _i++) {\r\n var key = dontEnums_1[_i];\r\n if (hasOwnProperty.call(obj, key)) {\r\n result.push(key);\r\n }\r\n }\r\n }\r\n return result;\r\n };\r\n })();\r\n}\r\n// Production steps of ECMA-262, Edition 5, 15.4.4.18\r\n// Reference: http://es5.github.io/#x15.4.4.18\r\nif (!Array.prototype.forEach) {\r\n Array.prototype.forEach = function (callback, thisArg) {\r\n var T;\r\n var k;\r\n if (this == null) {\r\n throw new TypeError(' this is null or not defined');\r\n }\r\n // 1. Let O be the result of calling toObject() passing the\r\n // |this| value as the argument.\r\n var O = Object(this);\r\n // 2. Let lenValue be the result of calling the Get() internal\r\n // method of O with the argument \"length\".\r\n // 3. Let len be toUint32(lenValue).\r\n var len = O.length >>> 0;\r\n // 4. If isCallable(callback) is false, throw a TypeError exception.\r\n // See: http://es5.github.com/#x9.11\r\n if (typeof callback !== 'function') {\r\n throw new TypeError(callback + ' is not a function');\r\n }\r\n // 5. If thisArg was supplied, let T be thisArg; else let\r\n // T be undefined.\r\n if (arguments.length > 1) {\r\n T = thisArg;\r\n }\r\n // 6. Let k be 0\r\n k = 0;\r\n // 7. Repeat, while k < len\r\n while (k < len) {\r\n var kValue = void 0;\r\n // a. Let Pk be ToString(k).\r\n // This is implicit for LHS operands of the in operator\r\n // b. Let kPresent be the result of calling the HasProperty\r\n // internal method of O with argument Pk.\r\n // This step can be combined with c\r\n // c. If kPresent is true, then\r\n if (k in O) {\r\n // i. Let kValue be the result of calling the Get internal\r\n // method of O with argument Pk.\r\n kValue = O[k];\r\n // ii. Call the Call internal method of callback with T as\r\n // the this value and argument list containing kValue, k, and O.\r\n callback.call(T, kValue, k, O);\r\n }\r\n // d. Increase k by 1.\r\n k++;\r\n }\r\n // 8. return undefined\r\n };\r\n}\n\nvar commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n\nfunction createCommonjsModule(fn, module) {\n\treturn module = { exports: {} }, fn(module, module.exports), module.exports;\n}\n\nvar md5 = createCommonjsModule(function (module) {\n\n (function ($) {\n /**\n * Add integers, wrapping at 2^32.\n * This uses 16-bit operations internally to work around bugs in interpreters.\n *\n * @param {number} x First integer\n * @param {number} y Second integer\n * @returns {number} Sum\n */\n\n function safeAdd(x, y) {\n var lsw = (x & 0xffff) + (y & 0xffff);\n var msw = (x >> 16) + (y >> 16) + (lsw >> 16);\n return msw << 16 | lsw & 0xffff;\n }\n /**\n * Bitwise rotate a 32-bit number to the left.\n *\n * @param {number} num 32-bit number\n * @param {number} cnt Rotation count\n * @returns {number} Rotated number\n */\n\n\n function bitRotateLeft(num, cnt) {\n return num << cnt | num >>> 32 - cnt;\n }\n /**\n * Basic operation the algorithm uses.\n *\n * @param {number} q q\n * @param {number} a a\n * @param {number} b b\n * @param {number} x x\n * @param {number} s s\n * @param {number} t t\n * @returns {number} Result\n */\n\n\n function md5cmn(q, a, b, x, s, t) {\n return safeAdd(bitRotateLeft(safeAdd(safeAdd(a, q), safeAdd(x, t)), s), b);\n }\n /**\n * Basic operation the algorithm uses.\n *\n * @param {number} a a\n * @param {number} b b\n * @param {number} c c\n * @param {number} d d\n * @param {number} x x\n * @param {number} s s\n * @param {number} t t\n * @returns {number} Result\n */\n\n\n function md5ff(a, b, c, d, x, s, t) {\n return md5cmn(b & c | ~b & d, a, b, x, s, t);\n }\n /**\n * Basic operation the algorithm uses.\n *\n * @param {number} a a\n * @param {number} b b\n * @param {number} c c\n * @param {number} d d\n * @param {number} x x\n * @param {number} s s\n * @param {number} t t\n * @returns {number} Result\n */\n\n\n function md5gg(a, b, c, d, x, s, t) {\n return md5cmn(b & d | c & ~d, a, b, x, s, t);\n }\n /**\n * Basic operation the algorithm uses.\n *\n * @param {number} a a\n * @param {number} b b\n * @param {number} c c\n * @param {number} d d\n * @param {number} x x\n * @param {number} s s\n * @param {number} t t\n * @returns {number} Result\n */\n\n\n function md5hh(a, b, c, d, x, s, t) {\n return md5cmn(b ^ c ^ d, a, b, x, s, t);\n }\n /**\n * Basic operation the algorithm uses.\n *\n * @param {number} a a\n * @param {number} b b\n * @param {number} c c\n * @param {number} d d\n * @param {number} x x\n * @param {number} s s\n * @param {number} t t\n * @returns {number} Result\n */\n\n\n function md5ii(a, b, c, d, x, s, t) {\n return md5cmn(c ^ (b | ~d), a, b, x, s, t);\n }\n /**\n * Calculate the MD5 of an array of little-endian words, and a bit length.\n *\n * @param {Array} x Array of little-endian words\n * @param {number} len Bit length\n * @returns {Array} MD5 Array\n */\n\n\n function binlMD5(x, len) {\n /* append padding */\n x[len >> 5] |= 0x80 << len % 32;\n x[(len + 64 >>> 9 << 4) + 14] = len;\n var i;\n var olda;\n var oldb;\n var oldc;\n var oldd;\n var a = 1732584193;\n var b = -271733879;\n var c = -1732584194;\n var d = 271733878;\n\n for (i = 0; i < x.length; i += 16) {\n olda = a;\n oldb = b;\n oldc = c;\n oldd = d;\n a = md5ff(a, b, c, d, x[i], 7, -680876936);\n d = md5ff(d, a, b, c, x[i + 1], 12, -389564586);\n c = md5ff(c, d, a, b, x[i + 2], 17, 606105819);\n b = md5ff(b, c, d, a, x[i + 3], 22, -1044525330);\n a = md5ff(a, b, c, d, x[i + 4], 7, -176418897);\n d = md5ff(d, a, b, c, x[i + 5], 12, 1200080426);\n c = md5ff(c, d, a, b, x[i + 6], 17, -1473231341);\n b = md5ff(b, c, d, a, x[i + 7], 22, -45705983);\n a = md5ff(a, b, c, d, x[i + 8], 7, 1770035416);\n d = md5ff(d, a, b, c, x[i + 9], 12, -1958414417);\n c = md5ff(c, d, a, b, x[i + 10], 17, -42063);\n b = md5ff(b, c, d, a, x[i + 11], 22, -1990404162);\n a = md5ff(a, b, c, d, x[i + 12], 7, 1804603682);\n d = md5ff(d, a, b, c, x[i + 13], 12, -40341101);\n c = md5ff(c, d, a, b, x[i + 14], 17, -1502002290);\n b = md5ff(b, c, d, a, x[i + 15], 22, 1236535329);\n a = md5gg(a, b, c, d, x[i + 1], 5, -165796510);\n d = md5gg(d, a, b, c, x[i + 6], 9, -1069501632);\n c = md5gg(c, d, a, b, x[i + 11], 14, 643717713);\n b = md5gg(b, c, d, a, x[i], 20, -373897302);\n a = md5gg(a, b, c, d, x[i + 5], 5, -701558691);\n d = md5gg(d, a, b, c, x[i + 10], 9, 38016083);\n c = md5gg(c, d, a, b, x[i + 15], 14, -660478335);\n b = md5gg(b, c, d, a, x[i + 4], 20, -405537848);\n a = md5gg(a, b, c, d, x[i + 9], 5, 568446438);\n d = md5gg(d, a, b, c, x[i + 14], 9, -1019803690);\n c = md5gg(c, d, a, b, x[i + 3], 14, -187363961);\n b = md5gg(b, c, d, a, x[i + 8], 20, 1163531501);\n a = md5gg(a, b, c, d, x[i + 13], 5, -1444681467);\n d = md5gg(d, a, b, c, x[i + 2], 9, -51403784);\n c = md5gg(c, d, a, b, x[i + 7], 14, 1735328473);\n b = md5gg(b, c, d, a, x[i + 12], 20, -1926607734);\n a = md5hh(a, b, c, d, x[i + 5], 4, -378558);\n d = md5hh(d, a, b, c, x[i + 8], 11, -2022574463);\n c = md5hh(c, d, a, b, x[i + 11], 16, 1839030562);\n b = md5hh(b, c, d, a, x[i + 14], 23, -35309556);\n a = md5hh(a, b, c, d, x[i + 1], 4, -1530992060);\n d = md5hh(d, a, b, c, x[i + 4], 11, 1272893353);\n c = md5hh(c, d, a, b, x[i + 7], 16, -155497632);\n b = md5hh(b, c, d, a, x[i + 10], 23, -1094730640);\n a = md5hh(a, b, c, d, x[i + 13], 4, 681279174);\n d = md5hh(d, a, b, c, x[i], 11, -358537222);\n c = md5hh(c, d, a, b, x[i + 3], 16, -722521979);\n b = md5hh(b, c, d, a, x[i + 6], 23, 76029189);\n a = md5hh(a, b, c, d, x[i + 9], 4, -640364487);\n d = md5hh(d, a, b, c, x[i + 12], 11, -421815835);\n c = md5hh(c, d, a, b, x[i + 15], 16, 530742520);\n b = md5hh(b, c, d, a, x[i + 2], 23, -995338651);\n a = md5ii(a, b, c, d, x[i], 6, -198630844);\n d = md5ii(d, a, b, c, x[i + 7], 10, 1126891415);\n c = md5ii(c, d, a, b, x[i + 14], 15, -1416354905);\n b = md5ii(b, c, d, a, x[i + 5], 21, -57434055);\n a = md5ii(a, b, c, d, x[i + 12], 6, 1700485571);\n d = md5ii(d, a, b, c, x[i + 3], 10, -1894986606);\n c = md5ii(c, d, a, b, x[i + 10], 15, -1051523);\n b = md5ii(b, c, d, a, x[i + 1], 21, -2054922799);\n a = md5ii(a, b, c, d, x[i + 8], 6, 1873313359);\n d = md5ii(d, a, b, c, x[i + 15], 10, -30611744);\n c = md5ii(c, d, a, b, x[i + 6], 15, -1560198380);\n b = md5ii(b, c, d, a, x[i + 13], 21, 1309151649);\n a = md5ii(a, b, c, d, x[i + 4], 6, -145523070);\n d = md5ii(d, a, b, c, x[i + 11], 10, -1120210379);\n c = md5ii(c, d, a, b, x[i + 2], 15, 718787259);\n b = md5ii(b, c, d, a, x[i + 9], 21, -343485551);\n a = safeAdd(a, olda);\n b = safeAdd(b, oldb);\n c = safeAdd(c, oldc);\n d = safeAdd(d, oldd);\n }\n\n return [a, b, c, d];\n }\n /**\n * Convert an array of little-endian words to a string\n *\n * @param {Array} input MD5 Array\n * @returns {string} MD5 string\n */\n\n\n function binl2rstr(input) {\n var i;\n var output = '';\n var length32 = input.length * 32;\n\n for (i = 0; i < length32; i += 8) {\n output += String.fromCharCode(input[i >> 5] >>> i % 32 & 0xff);\n }\n\n return output;\n }\n /**\n * Convert a raw string to an array of little-endian words\n * Characters >255 have their high-byte silently ignored.\n *\n * @param {string} input Raw input string\n * @returns {Array} Array of little-endian words\n */\n\n\n function rstr2binl(input) {\n var i;\n var output = [];\n output[(input.length >> 2) - 1] = undefined;\n\n for (i = 0; i < output.length; i += 1) {\n output[i] = 0;\n }\n\n var length8 = input.length * 8;\n\n for (i = 0; i < length8; i += 8) {\n output[i >> 5] |= (input.charCodeAt(i / 8) & 0xff) << i % 32;\n }\n\n return output;\n }\n /**\n * Calculate the MD5 of a raw string\n *\n * @param {string} s Input string\n * @returns {string} Raw MD5 string\n */\n\n\n function rstrMD5(s) {\n return binl2rstr(binlMD5(rstr2binl(s), s.length * 8));\n }\n /**\n * Calculates the HMAC-MD5 of a key and some data (raw strings)\n *\n * @param {string} key HMAC key\n * @param {string} data Raw input string\n * @returns {string} Raw MD5 string\n */\n\n\n function rstrHMACMD5(key, data) {\n var i;\n var bkey = rstr2binl(key);\n var ipad = [];\n var opad = [];\n var hash;\n ipad[15] = opad[15] = undefined;\n\n if (bkey.length > 16) {\n bkey = binlMD5(bkey, key.length * 8);\n }\n\n for (i = 0; i < 16; i += 1) {\n ipad[i] = bkey[i] ^ 0x36363636;\n opad[i] = bkey[i] ^ 0x5c5c5c5c;\n }\n\n hash = binlMD5(ipad.concat(rstr2binl(data)), 512 + data.length * 8);\n return binl2rstr(binlMD5(opad.concat(hash), 512 + 128));\n }\n /**\n * Convert a raw string to a hex string\n *\n * @param {string} input Raw input string\n * @returns {string} Hex encoded string\n */\n\n\n function rstr2hex(input) {\n var hexTab = '0123456789abcdef';\n var output = '';\n var x;\n var i;\n\n for (i = 0; i < input.length; i += 1) {\n x = input.charCodeAt(i);\n output += hexTab.charAt(x >>> 4 & 0x0f) + hexTab.charAt(x & 0x0f);\n }\n\n return output;\n }\n /**\n * Encode a string as UTF-8\n *\n * @param {string} input Input string\n * @returns {string} UTF8 string\n */\n\n\n function str2rstrUTF8(input) {\n return unescape(encodeURIComponent(input));\n }\n /**\n * Encodes input string as raw MD5 string\n *\n * @param {string} s Input string\n * @returns {string} Raw MD5 string\n */\n\n\n function rawMD5(s) {\n return rstrMD5(str2rstrUTF8(s));\n }\n /**\n * Encodes input string as Hex encoded string\n *\n * @param {string} s Input string\n * @returns {string} Hex encoded string\n */\n\n\n function hexMD5(s) {\n return rstr2hex(rawMD5(s));\n }\n /**\n * Calculates the raw HMAC-MD5 for the given key and data\n *\n * @param {string} k HMAC key\n * @param {string} d Input string\n * @returns {string} Raw MD5 string\n */\n\n\n function rawHMACMD5(k, d) {\n return rstrHMACMD5(str2rstrUTF8(k), str2rstrUTF8(d));\n }\n /**\n * Calculates the Hex encoded HMAC-MD5 for the given key and data\n *\n * @param {string} k HMAC key\n * @param {string} d Input string\n * @returns {string} Raw MD5 string\n */\n\n\n function hexHMACMD5(k, d) {\n return rstr2hex(rawHMACMD5(k, d));\n }\n /**\n * Calculates MD5 value for a given string.\n * If a key is provided, calculates the HMAC-MD5 value.\n * Returns a Hex encoded string unless the raw argument is given.\n *\n * @param {string} string Input string\n * @param {string} [key] HMAC key\n * @param {boolean} [raw] Raw output switch\n * @returns {string} MD5 output\n */\n\n\n function md5(string, key, raw) {\n if (!key) {\n if (!raw) {\n return hexMD5(string);\n }\n\n return rawMD5(string);\n }\n\n if (!raw) {\n return hexHMACMD5(key, string);\n }\n\n return rawHMACMD5(key, string);\n }\n\n if (module.exports) {\n module.exports = md5;\n } else {\n $.md5 = md5;\n }\n })(commonjsGlobal);\n});\n\n/**\r\n * @file webLogger工具函数\r\n * @author \r\n * @author 天翔Skyline(skyline0705@gmail.com)\r\n */\r\n/**\r\n * 创建一个cookie字符串,可被赋值给document.cookie.\r\n * @param {string} name cookie名称.\r\n * @param {string} value cookie值.\r\n * @param {boolean} encode 是否对值进行编码.\r\n * @param {Object} options (Optional) 配置项.\r\n * @return {string} 返回 cookie 字符串.\r\n */\r\nfunction createCookieString(name, value, encode, options) {\r\n if (options === void 0) { options = {}; }\r\n var text = encodeURIComponent(name) + \"=\" + (encode ? encodeURIComponent(value) : value);\r\n var expires = options.expires;\r\n var path = options.path || '/';\r\n var domain = options.domain || '';\r\n if (expires instanceof Date) {\r\n text += \"; expires=\" + expires.toUTCString();\r\n }\r\n if (typeof expires === 'number') {\r\n text += \"; max-age==\" + expires;\r\n }\r\n if (path !== '') {\r\n text += \"; path=\" + path;\r\n }\r\n if (domain !== '') {\r\n text += \"; domain=\" + domain;\r\n }\r\n if (options.secure === true) {\r\n text += '; secure';\r\n }\r\n return text;\r\n}\r\n/**\r\n * 将cookie序列化成对象.\r\n * @param {string} text cookie值.\r\n * @param {boolean=} shouldDecode cookie是否需要被解码. 默认为true.\r\n * @param {object=} options 如何读取cookie的配置.\r\n * @return {object} 可访问cookie的序列化结果\r\n */\r\nfunction parseCookieString(text, shouldDecode, options) {\r\n var cookies = {};\r\n if (text.length > 0) {\r\n var decodeValue = !shouldDecode\r\n ? function (s) {\r\n return s;\r\n }\r\n : decodeURIComponent;\r\n var cookieParts = text.split(/;\\s/g);\r\n var cookieName = null;\r\n var cookieValue = null;\r\n var cookieNameValue = null;\r\n for (var i = 0, len = cookieParts.length; i < len; i++) {\r\n cookieNameValue = cookieParts[i].match(/([^=]+)=/i);\r\n if (cookieNameValue !== null) {\r\n try {\r\n cookieName = decodeURIComponent(cookieNameValue[1]);\r\n cookieValue = decodeValue(cookieParts[i].substring(cookieNameValue[1].length + 1));\r\n }\r\n catch (ex) {\r\n // 忽略\r\n }\r\n }\r\n else {\r\n // cookie 中没有 \"=\", 当成布尔值\r\n cookieName = decodeURIComponent(cookieParts[i]);\r\n cookieValue = '';\r\n }\r\n if (cookieName !== null) {\r\n // 默认后面的cookie覆盖前面的\r\n cookies[cookieName] = cookieValue;\r\n }\r\n }\r\n }\r\n return cookies;\r\n}\r\nvar cookiesMap = {};\r\n/**\r\n * 获取cookie值.\r\n * @param {string} name cookie名称.\r\n * @param {object=} options 配置项\r\n * raw: 是否进行编码,true则是未编码\r\n * @return {*} 不存在返回null.\r\n */\r\nfunction getCookie(name, options, useCaches) {\r\n if (options === void 0) { options = {}; }\r\n if (useCaches === void 0) { useCaches = false; }\r\n try {\r\n if (typeof document === 'undefined' || !document.cookie) {\r\n return null;\r\n }\r\n if (useCaches && name in cookiesMap) {\r\n return cookiesMap[name];\r\n }\r\n var cookies = parseCookieString(document.cookie, !options.raw, options);\r\n cookiesMap = cookies;\r\n var cookie = cookies[name];\r\n if (cookie === void 0) {\r\n return null;\r\n }\r\n return cookie;\r\n }\r\n catch (err) {\r\n return null;\r\n }\r\n}\r\n/**\r\n * 给定的键值设置cookie\r\n * @param {string} name 名称.\r\n * @param {*} value cookie值.\r\n * @param {object=} options (Optional) 配置项:\r\n * path 路径\r\n * domain 域名\r\n * expires 过期时间,一个Date对象\r\n * secure 是否安全cookie\r\n * raw (true/false). Setting raw to true indicates that the cookie should not be URI encoded before being set.\r\n */\r\nfunction setCookie(name, value, options) {\r\n if (options === void 0) { options = {}; }\r\n try {\r\n document.cookie = createCookieString(name, value, !options.raw, options);\r\n return true;\r\n }\r\n catch (err) {\r\n return false;\r\n }\r\n}\r\nvar cookieUtils = {\r\n getCookie: getCookie,\r\n setCookie: setCookie,\r\n parseCookieString: parseCookieString\r\n};\n\n/**\r\n * 生成nano id\r\n * @return {string} 16长度的字符串\r\n */\r\nfunction nanoId() {\r\n var ts = ((Math.random() * 1e9) >>> 0);\r\n var randomer = [];\r\n var seed = '0123456789ABCDEF';\r\n for (var i = 0; i < 7; i++) {\r\n randomer.push(seed.charAt(Math.random() * 16));\r\n }\r\n return ts + randomer.join('');\r\n}\r\n/**\r\n * 提取顶级域名\r\n * @param {?string=} hostname\r\n * @return {string} 返回顶级域名\r\n */\r\nfunction resolveTopLevelDomain(hostname) {\r\n if (hostname === void 0) { hostname = typeof location !== 'undefined' ? location.hostname : ''; }\r\n if (!hostname) {\r\n return '';\r\n }\r\n var ret = hostname.split('.');\r\n var len = ret.length;\r\n return (len <= 2 ? '' : \".\" + ret[len - 2] + \".\" + ret[len - 1]);\r\n}\r\nvar didKey = 'did';\r\nvar did = '';\r\n/**\r\n * 生成did\r\n * @return {string}\r\n */\r\nfunction generateDID() {\r\n if (did)\r\n return did;\r\n try {\r\n // 兼容一下原下发的did逻辑,如果能从did获取,那么就走did\r\n // 如果不能,那就通过log sdk自行维护的_did来搞\r\n did = getCookie(didKey) || getCookie('_did');\r\n if (!did) {\r\n did = \"web_\" + nanoId();\r\n var expires = new Date();\r\n expires.setFullYear(expires.getFullYear() + 1);\r\n setCookie('_did', did, {\r\n expires: expires,\r\n domain: resolveTopLevelDomain(),\r\n path: '/',\r\n });\r\n }\r\n return did;\r\n }\r\n catch (err) {\r\n return '';\r\n }\r\n}\r\n/**\r\n * 生成唯一UUID\r\n */\r\nvar uuid = function (page) {\r\n var randomStr = page + new Date().getTime() + generateDID() + nanoId();\r\n var hash = md5(randomStr);\r\n return hash;\r\n};\n\nvar GlobalConfig = {\r\n proto: 'v3',\r\n sessionId: '',\r\n isDebug: false,\r\n isBridge: false,\r\n get isV2() { return GlobalConfig.proto === 'v2'; },\r\n};\r\nvar updateConfig = function (key, value) {\r\n GlobalConfig[key] = value;\r\n};\n\n/**\r\n * v2、v3 PB 相同部分\r\n */\r\nvar Base;\r\n(function (Base) {\r\n (function (NetworkPackageType) {\r\n NetworkPackageType[NetworkPackageType[\"UNKNOWN_NETWORK\"] = 0] = \"UNKNOWN_NETWORK\";\r\n NetworkPackageType[NetworkPackageType[\"NOT_CONNECTED\"] = 1] = \"NOT_CONNECTED\";\r\n NetworkPackageType[NetworkPackageType[\"WIFI\"] = 2] = \"WIFI\";\r\n NetworkPackageType[NetworkPackageType[\"MOBILE_4G\"] = 3] = \"MOBILE_4G\";\r\n NetworkPackageType[NetworkPackageType[\"MOBILE_3G\"] = 4] = \"MOBILE_3G\";\r\n NetworkPackageType[NetworkPackageType[\"MOBILE_2G\"] = 5] = \"MOBILE_2G\";\r\n NetworkPackageType[NetworkPackageType[\"MOBILE_UNKNOWN\"] = 6] = \"MOBILE_UNKNOWN\";\r\n NetworkPackageType[NetworkPackageType[\"MOBILE_5G\"] = 7] = \"MOBILE_5G\";\r\n })(Base.NetworkPackageType || (Base.NetworkPackageType = {}));\r\n (function (AdditionalSeqIdPackageChannel) {\r\n AdditionalSeqIdPackageChannel[AdditionalSeqIdPackageChannel[\"UNKNOWN1\"] = 0] = \"UNKNOWN1\";\r\n AdditionalSeqIdPackageChannel[AdditionalSeqIdPackageChannel[\"REALTIME\"] = 1] = \"REALTIME\";\r\n AdditionalSeqIdPackageChannel[AdditionalSeqIdPackageChannel[\"HIGH_FREQ\"] = 2] = \"HIGH_FREQ\";\r\n AdditionalSeqIdPackageChannel[AdditionalSeqIdPackageChannel[\"NORMAL\"] = 3] = \"NORMAL\";\r\n })(Base.AdditionalSeqIdPackageChannel || (Base.AdditionalSeqIdPackageChannel = {}));\r\n (function (Platform) {\r\n Platform[Platform[\"UNKNOWN_PLATFORM\"] = 0] = \"UNKNOWN_PLATFORM\";\r\n Platform[Platform[\"ANDROID_PHONE\"] = 1] = \"ANDROID_PHONE\";\r\n Platform[Platform[\"ANDROID_PAD\"] = 2] = \"ANDROID_PAD\";\r\n Platform[Platform[\"IPHONE\"] = 3] = \"IPHONE\";\r\n Platform[Platform[\"IPAD\"] = 4] = \"IPAD\";\r\n Platform[Platform[\"WINDOWS_PC\"] = 5] = \"WINDOWS_PC\";\r\n // 注: 同上\r\n Platform[Platform[\"ANDROID_PHONE_H5\"] = 6] = \"ANDROID_PHONE_H5\";\r\n Platform[Platform[\"IPHONE_H5\"] = 7] = \"IPHONE_H5\";\r\n Platform[Platform[\"OUTSIDE_ANDROID_H5\"] = 8] = \"OUTSIDE_ANDROID_H5\";\r\n Platform[Platform[\"OUTSIDE_IOS_H5\"] = 9] = \"OUTSIDE_IOS_H5\";\r\n Platform[Platform[\"PC_WEB\"] = 10] = \"PC_WEB\";\r\n })(Base.Platform || (Base.Platform = {}));\r\n (function (Container) {\r\n Container[\"NATIVE\"] = \"NATIVE\";\r\n Container[\"REACT_NATIVE\"] = \"REACT_NATIVE\";\r\n Container[\"H5\"] = \"H5\";\r\n Container[\"MP_WECHAT\"] = \"MP_WECHAT\";\r\n Container[\"MP_ALIPAY\"] = \"MP_ALIPAY\";\r\n Container[\"MP_BAIDU\"] = \"MP_BAIDU\";\r\n Container[\"WEB\"] = \"WEB\";\r\n })(Base.Container || (Base.Container = {}));\r\n (function (PageType) {\r\n PageType[PageType[\"UNKNOWN_PAGE_TYPE\"] = 0] = \"UNKNOWN_PAGE_TYPE\";\r\n PageType[PageType[\"NATIVE\"] = 1] = \"NATIVE\";\r\n PageType[PageType[\"H5\"] = 2] = \"H5\";\r\n PageType[PageType[\"MINA\"] = 3] = \"MINA\";\r\n })(Base.PageType || (Base.PageType = {}));\r\n (function (ElementStatus) {\r\n ElementStatus[ElementStatus[\"UNKNOWN_STATUS\"] = 0] = \"UNKNOWN_STATUS\";\r\n ElementStatus[ElementStatus[\"CHECKED\"] = 1] = \"CHECKED\";\r\n ElementStatus[ElementStatus[\"UNCHECKED\"] = 2] = \"UNCHECKED\";\r\n })(Base.ElementStatus || (Base.ElementStatus = {}));\r\n (function (PageShowAction) {\r\n PageShowAction[PageShowAction[\"UNKNOWN_ACTION\"] = 0] = \"UNKNOWN_ACTION\";\r\n PageShowAction[PageShowAction[\"ENTER\"] = 1] = \"ENTER\";\r\n PageShowAction[PageShowAction[\"LEAVE\"] = 2] = \"LEAVE\";\r\n PageShowAction[PageShowAction[\"RESUME\"] = 3] = \"RESUME\";\r\n })(Base.PageShowAction || (Base.PageShowAction = {}));\r\n (function (ActionStatus) {\r\n ActionStatus[ActionStatus[\"UNKNOWN_STATUS\"] = 0] = \"UNKNOWN_STATUS\";\r\n ActionStatus[ActionStatus[\"SUCCESS\"] = 1] = \"SUCCESS\";\r\n ActionStatus[ActionStatus[\"FAIL\"] = 2] = \"FAIL\";\r\n })(Base.ActionStatus || (Base.ActionStatus = {}));\r\n (function (ActionType) {\r\n ActionType[ActionType[\"UNKNOWN_ACTION_TYPE\"] = 0] = \"UNKNOWN_ACTION_TYPE\";\r\n ActionType[ActionType[\"CLICK\"] = 1] = \"CLICK\";\r\n ActionType[ActionType[\"LEFT_PULL\"] = 2] = \"LEFT_PULL\";\r\n ActionType[ActionType[\"RIGHT_PULL\"] = 3] = \"RIGHT_PULL\";\r\n ActionType[ActionType[\"UP_PULL\"] = 4] = \"UP_PULL\";\r\n ActionType[ActionType[\"DOWN_PULL\"] = 5] = \"DOWN_PULL\";\r\n })(Base.ActionType || (Base.ActionType = {}));\r\n (function (SubAction) {\r\n SubAction[SubAction[\"UNKNOWN_SUB_ACTION\"] = 0] = \"UNKNOWN_SUB_ACTION\";\r\n SubAction[SubAction[\"PAGE_ENTER\"] = 1] = \"PAGE_ENTER\";\r\n SubAction[SubAction[\"PAGE_LEAVE\"] = 2] = \"PAGE_LEAVE\";\r\n SubAction[SubAction[\"PAGE_RESUME\"] = 3] = \"PAGE_RESUME\";\r\n SubAction[SubAction[\"PAGE_PAUSE\"] = 4] = \"PAGE_PAUSE\";\r\n })(Base.SubAction || (Base.SubAction = {}));\r\n (function (Direction) {\r\n Direction[Direction[\"UNKNOWN2\"] = 0] = \"UNKNOWN2\";\r\n Direction[Direction[\"UP\"] = 1] = \"UP\";\r\n Direction[Direction[\"DOWN\"] = 2] = \"DOWN\";\r\n Direction[Direction[\"LEFT\"] = 3] = \"LEFT\";\r\n Direction[Direction[\"RIGHT\"] = 4] = \"RIGHT\";\r\n })(Base.Direction || (Base.Direction = {}));\r\n (function (TaskStatus) {\r\n TaskStatus[TaskStatus[\"UNKNOWN_STATUS\"] = 0] = \"UNKNOWN_STATUS\";\r\n TaskStatus[TaskStatus[\"START\"] = 1] = \"START\";\r\n TaskStatus[TaskStatus[\"RETRY\"] = 2] = \"RETRY\";\r\n TaskStatus[TaskStatus[\"PAUSE\"] = 3] = \"PAUSE\";\r\n TaskStatus[TaskStatus[\"RESUME\"] = 4] = \"RESUME\";\r\n TaskStatus[TaskStatus[\"PENDING\"] = 5] = \"PENDING\";\r\n TaskStatus[TaskStatus[\"PROCESSING\"] = 6] = \"PROCESSING\";\r\n TaskStatus[TaskStatus[\"SUCCESS\"] = 7] = \"SUCCESS\";\r\n TaskStatus[TaskStatus[\"FAIL\"] = 8] = \"FAIL\";\r\n TaskStatus[TaskStatus[\"CANCEL\"] = 9] = \"CANCEL\";\r\n TaskStatus[TaskStatus[\"FINISH\"] = 10] = \"FINISH\";\r\n })(Base.TaskStatus || (Base.TaskStatus = {}));\r\n (function (OperationType) {\r\n OperationType[OperationType[\"UNKNOWN_OPERATION\"] = 0] = \"UNKNOWN_OPERATION\";\r\n OperationType[OperationType[\"CLICK\"] = 1] = \"CLICK\";\r\n OperationType[OperationType[\"DOUBLE_CLICK\"] = 2] = \"DOUBLE_CLICK\";\r\n OperationType[OperationType[\"TRIPLE_CLICK\"] = 3] = \"TRIPLE_CLICK\";\r\n OperationType[OperationType[\"LONG_PRESS\"] = 4] = \"LONG_PRESS\";\r\n OperationType[OperationType[\"PULL\"] = 5] = \"PULL\";\r\n OperationType[OperationType[\"DRAG\"] = 6] = \"DRAG\";\r\n OperationType[OperationType[\"SCALE\"] = 7] = \"SCALE\";\r\n OperationType[OperationType[\"PULL_DOWN\"] = 8] = \"PULL_DOWN\";\r\n OperationType[OperationType[\"PULL_UP\"] = 9] = \"PULL_UP\";\r\n OperationType[OperationType[\"RIGHT_CLICK\"] = 10] = \"RIGHT_CLICK\";\r\n OperationType[OperationType[\"AUTO\"] = 10] = \"AUTO\";\r\n })(Base.OperationType || (Base.OperationType = {}));\r\n})(Base || (Base = {}));\n\n/**\r\n * 快手系应用UA标示\r\n */\r\n// TODO 海外 APP List 要求不区分大小写判断\r\nvar ksOverseaAppList = ['UVideo', 'Vstatus', 'Kwaigo', 'MvMaster'];\r\n// TODO这么加没个完了,后面想办法搞成自行传入吧\r\nvar ksAppList = [\r\n 'Kwai',\r\n 'Kwai_Lite',\r\n 'Kwai_Pro',\r\n 'livemate',\r\n 'ksthanos',\r\n 'ksNebula',\r\n 'ksnebula',\r\n 'kwaiying',\r\n 'pearl',\r\n 'kinder',\r\n 'm2u',\r\n 'LOLita',\r\n 'XFunCore',\r\n 'ACVideoCore',\r\n 'ZIKZAK',\r\n].concat(ksOverseaAppList);\n\n/**\r\n * @file webLogger工具函数\r\n * @author \r\n * @author 天翔Skyline(skyline0705@gmail.com)\r\n */\r\n/**\r\n * 获取 localStorage 缓存\r\n */\r\nfunction getLocalStorageItem(key) {\r\n try {\r\n if (window && window.localStorage) {\r\n var value = window.localStorage.getItem(key);\r\n if (value) {\r\n try {\r\n return JSON.parse(value);\r\n }\r\n catch (err) {\r\n return value;\r\n }\r\n }\r\n }\r\n }\r\n catch (err) {\r\n return null;\r\n }\r\n return null;\r\n}\r\n/**\r\n * 设置 localStorage 缓存\r\n */\r\nfunction setLocalStorageItem(key, value) {\r\n try {\r\n if (window && window.localStorage) {\r\n window.localStorage.setItem(key, JSON.stringify(value));\r\n return true;\r\n }\r\n }\r\n catch (err) {\r\n return false;\r\n }\r\n return false;\r\n}\r\n/**\r\n * 从目标arr中删除item\r\n * @param {*} arr 目标数组\r\n * @param {*} item item\r\n */\r\nfunction deleteArray(arr, item) {\r\n var index = arr.indexOf(item);\r\n if (index > -1) {\r\n arr.splice(index, 1);\r\n }\r\n}\r\n/**\r\n * 事件监听兼容处理\r\n * @param {*} evtTarget 事件监听目标\r\n * @param {*} evtName 事件名\r\n * @param {*} callback 回调函数\r\n * @param {*} options 相关参数设置\r\n */\r\nfunction addMonitor(evtTarget, evtName, callback, options) {\r\n if ('attachEvent' in evtTarget) {\r\n return evtTarget.attachEvent('on' + evtName, callback);\r\n }\r\n return evtTarget.addEventListener(evtName, callback, options);\r\n}\r\n/**\r\n * 事件监听解绑兼容处理\r\n * @param {*} evtTarget 事件监听目标\r\n * @param {*} evtName 事件名\r\n * @param {*} callback 事件回调\r\n */\r\nfunction removeMonitor(evtTarget, evtName, callback, options) {\r\n if ('attachEvent' in evtTarget) {\r\n return evtTarget.detachEvent('on' + evtName, callback);\r\n }\r\n return evtTarget.removeEventListener(evtName, callback, options);\r\n}\r\nfunction leftPad(str, len, ch) {\r\n if (ch === void 0) { ch = ' '; }\r\n len = len - str.length;\r\n if (len <= 0) {\r\n return str;\r\n }\r\n var pad = '';\r\n while (len) {\r\n if (len & 1) {\r\n pad += ch;\r\n }\r\n len >>= 1;\r\n ch += ch;\r\n }\r\n return pad + str;\r\n}\r\n/**\r\n * 是否是快手系APP\r\n */\r\nvar isInApp = (function () {\r\n // 防止SSR出问题,所以需要给出方法而不是直接属性\r\n var inApp = null;\r\n return function () {\r\n try {\r\n if (inApp === null) {\r\n for (var i = 0; i < ksAppList.length; i++) {\r\n var isOversea = ksOverseaAppList.indexOf(ksAppList[i]) > -1;\r\n if (isOversea) {\r\n if (window.navigator.userAgent.toLowerCase().indexOf(ksAppList[i].toLowerCase()) > -1) {\r\n inApp = true;\r\n break;\r\n }\r\n }\r\n else {\r\n if (window.navigator.userAgent.indexOf(ksAppList[i]) > -1) {\r\n inApp = true;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n return inApp;\r\n }\r\n catch (err) {\r\n return false;\r\n }\r\n };\r\n})();\r\nfunction fakeRaf(callback) {\r\n return setTimeout(callback, 1000 / 16);\r\n}\r\nvar fakeCaf = clearTimeout;\r\nvar raf = function (callback) {\r\n var fn = window.requestAnimationFrame\r\n || window.mozRequestAnimationFrame\r\n || window.webkitRequestAnimationFrame\r\n || fakeRaf;\r\n return fn.call(this, callback);\r\n};\r\nvar caf = function (handle) {\r\n var fn = window.cancelAnimationFrame\r\n || window.mozCancelAnimationFrame\r\n || window.webkitCancelAnimationFrame\r\n || fakeCaf;\r\n return fn.call(this, handle);\r\n};\r\nfunction parseQueryString(queryString) {\r\n var result = {};\r\n var queries = queryString.split('&');\r\n for (var _i = 0, queries_1 = queries; _i < queries_1.length; _i++) {\r\n var query = queries_1[_i];\r\n var _a = query.split('='), key = _a[0], value = _a[1];\r\n if (!(key in result)) {\r\n result[key] = value;\r\n continue;\r\n }\r\n if (result[key] instanceof Array) {\r\n result[key].push(value);\r\n continue;\r\n }\r\n result[key] = [result[key], value];\r\n }\r\n return result;\r\n}\r\nfunction stringifyQuery(paramsString) {\r\n var params = typeof paramsString === 'string' ? JSON.parse(paramsString) : paramsString;\r\n var queries = [];\r\n Object.keys(params).forEach(function (key) {\r\n if (params[key] instanceof Array) {\r\n for (var _i = 0, _a = params[key]; _i < _a.length; _i++) {\r\n var val = _a[_i];\r\n queries.push(key + \"=\" + val);\r\n }\r\n }\r\n else if (typeof params[key] === 'object' && params[key] !== null) {\r\n queries.push(key + \"=\" + JSON.stringify(params[key]));\r\n }\r\n else {\r\n queries.push(key + \"=\" + params[key]);\r\n }\r\n });\r\n return queries.join('&');\r\n}\r\n// 参考:https://codereview.stackexchange.com/questions/37512/count-byte-length-of-string\r\nfunction getStringBytes(data) {\r\n var dataStr = '';\r\n // Force string type\r\n if (typeof data === 'string') {\r\n dataStr = data;\r\n }\r\n else {\r\n try {\r\n dataStr = JSON.stringify(data);\r\n }\r\n catch (e) {\r\n dataStr = String(data);\r\n }\r\n }\r\n var byteLen = 0;\r\n for (var i = 0; i < dataStr.length; i++) {\r\n var c = dataStr.charCodeAt(i);\r\n byteLen += c < (1 << 7) ? 1 :\r\n c < (1 << 11) ? 2 :\r\n c < (1 << 16) ? 3 :\r\n c < (1 << 21) ? 4 :\r\n c < (1 << 26) ? 5 :\r\n c < (1 << 31) ? 6 : Number.NaN;\r\n }\r\n return byteLen;\r\n}\r\n/**\r\n * http://git.corp.kuaishou.com/ks-frontend/modules/web-util/blob/master/src/device.js\r\n */\r\nvar kpnFromUA = (function () {\r\n return function () {\r\n if (typeof window === 'undefined')\r\n return '';\r\n var ua = window.navigator.userAgent;\r\n // 注意顺序很重要\r\n var rules = [\r\n [/ wxwork\\//, 'workWechat'],\r\n [/ MicroMessenger\\//, 'wechat'],\r\n [/ Kwai\\//, 'KUAISHOU'],\r\n [/ ksthanos\\//, 'THANOS'],\r\n [/ ksNebula\\//i, 'NEBULA'],\r\n [/ QQ\\//, 'qq'],\r\n [/__weibo__([^_]+)/, 'weibo'],\r\n [/ livemate\\//, 'livemate'],\r\n [/ baiduboxapp\\//, 'baidu'],\r\n [/ MQQBrowser\\//, 'qqBrowser'],\r\n [/\\(MSIE ([^;]+);/, 'ie'],\r\n ];\r\n for (var i = 0; i < rules.length; i++) {\r\n var tmp = rules[i];\r\n var rule = tmp[0];\r\n var name_1 = tmp[1];\r\n var rRes = rule.exec(ua);\r\n if (rRes) {\r\n return name_1;\r\n }\r\n }\r\n return '';\r\n };\r\n})();\r\n/**\r\n * 获取默认的 KPN\r\n */\r\nfunction getDefaultKpn() {\r\n var kpnInCookie = getCookie('kpn');\r\n var kpnInUA = kpnFromUA();\r\n return kpnInCookie || kpnInUA || '';\r\n}\r\nfunction getUrlAndQueryFromUrl(url) {\r\n if (url === void 0) { url = location.href; }\r\n var queryIndex = url.lastIndexOf('?');\r\n if (queryIndex === -1) {\r\n return {\r\n page: url\r\n };\r\n }\r\n var page = url.slice(0, queryIndex);\r\n var queryString = url.slice(queryIndex + 1);\r\n return {\r\n page: page,\r\n params: parseQueryString(queryString),\r\n };\r\n}\r\nvar getMappingPage = function (urlPackage, urlMap) {\r\n var url = urlPackage.url, page = urlPackage.page, params = urlPackage.params;\r\n if (!page && typeof url === 'string') {\r\n var parsed = getUrlAndQueryFromUrl(url);\r\n page = parsed.page;\r\n params = parsed.params;\r\n }\r\n if (typeof urlMap === 'function') {\r\n try {\r\n var res = urlMap({ url: url, page: page, params: params });\r\n if (typeof res === 'string') {\r\n page = res;\r\n }\r\n else if (typeof res === 'object') {\r\n if (res.page) {\r\n page = res.page;\r\n }\r\n if (res.params) {\r\n params = res.params;\r\n }\r\n }\r\n }\r\n catch (err) { }\r\n }\r\n else if (typeof urlMap === 'object') {\r\n var mappingPage = '';\r\n for (var key in urlMap) {\r\n if ((url || page || '').indexOf(key) > -1) {\r\n mappingPage = urlMap[key];\r\n break;\r\n }\r\n }\r\n if (mappingPage) {\r\n page = mappingPage;\r\n }\r\n }\r\n return {\r\n page: page,\r\n params: params\r\n };\r\n};\r\nfunction cloneDeep(obj) {\r\n if (typeof obj !== 'object')\r\n return {};\r\n var newObj = obj instanceof Array ? [] : {};\r\n for (var key in obj) {\r\n if (obj.hasOwnProperty(key)) {\r\n // @ts-ignore\r\n newObj[key] = typeof obj[key] === 'object' ? cloneDeep(obj[key]) : obj[key];\r\n }\r\n }\r\n return newObj;\r\n}\r\nfunction supportsPushState$1() {\r\n var ua = window.navigator.userAgent;\r\n if ((ua.indexOf('Android 2.') !== -1 || ua.indexOf('Android 4.0') !== -1)\r\n && ua.indexOf('Mobile Safari') !== -1\r\n && ua.indexOf('Chrome') === -1\r\n && ua.indexOf('Windows Phone') === -1) {\r\n return false;\r\n }\r\n return typeof window !== 'undefined' && window.history && 'pushState' in window.history;\r\n}\r\nvar urlChangeEventId = supportsPushState$1() ? 'popstate' : 'hashchange';\r\nfunction pageUrlWarnForV2(page) {\r\n // 对于上报到v2,page为url的埋点,给予警告\r\n if (page && /^(https?:)?\\/\\//.test(page)) {\r\n console.error(\"\\u8BF7\\u6CE8\\u610F\\u9875\\u9762\" + page + \"\\u57CB\\u70B9\\u4E0A\\u62A5\\u4E3Aurl\\uFF0C\\u89C4\\u8303\\u4E0A\\u62A5\\u5E94\\u4E3A\\u57CB\\u70B9\\u5E73\\u53F0\\u6CE8\\u518C\\u7684\\u9875\\u9762\\u6807\\u8BC6\\uFF0C\\u8BF7\\u53CA\\u65F6\\u5904\\u7406\\u30022021\\u5E746\\u670820\\u65E5\\u6570\\u4ED3\\u4F1A\\u5BF9\\u8FD9\\u90E8\\u5206\\u6570\\u636E\\u8FDB\\u884C\\u8FC7\\u6EE4\\uFF0C\\u5F71\\u54CD\\u6D88\\u8D39\");\r\n }\r\n}\n\nvar uaParser = createCommonjsModule(function (module, exports) {\n /*!@license\n * UAParser.js v0.7.28\n * Lightweight JavaScript-based User-Agent string parser\n * https://github.com/faisalman/ua-parser-js\n *\n * Copyright © 2012-2021 Faisal Salman \n * Licensed under MIT License\n */\n (function (window, undefined$1) {\n // Constants\n /////////////\n\n var LIBVERSION = '0.7.28',\n EMPTY = '',\n UNKNOWN = '?',\n FUNC_TYPE = 'function',\n UNDEF_TYPE = 'undefined',\n OBJ_TYPE = 'object',\n STR_TYPE = 'string',\n MAJOR = 'major',\n // deprecated\n MODEL = 'model',\n NAME = 'name',\n TYPE = 'type',\n VENDOR = 'vendor',\n VERSION = 'version',\n ARCHITECTURE = 'architecture',\n CONSOLE = 'console',\n MOBILE = 'mobile',\n TABLET = 'tablet',\n SMARTTV = 'smarttv',\n WEARABLE = 'wearable',\n EMBEDDED = 'embedded',\n UA_MAX_LENGTH = 255; ///////////\n // Helper\n //////////\n\n var util = {\n extend: function extend(regexes, extensions) {\n var mergedRegexes = {};\n\n for (var i in regexes) {\n if (extensions[i] && extensions[i].length % 2 === 0) {\n mergedRegexes[i] = extensions[i].concat(regexes[i]);\n } else {\n mergedRegexes[i] = regexes[i];\n }\n }\n\n return mergedRegexes;\n },\n has: function has(str1, str2) {\n return _typeof(str1) === STR_TYPE ? str2.toLowerCase().indexOf(str1.toLowerCase()) !== -1 : false;\n },\n lowerize: function lowerize(str) {\n return str.toLowerCase();\n },\n major: function major(version) {\n return _typeof(version) === STR_TYPE ? version.replace(/[^\\d\\.]/g, '').split(\".\")[0] : undefined$1;\n },\n trim: function trim(str, len) {\n str = str.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, '');\n return _typeof(len) === UNDEF_TYPE ? str : str.substring(0, UA_MAX_LENGTH);\n }\n }; ///////////////\n // Map helper\n //////////////\n\n var mapper = {\n rgx: function rgx(ua, arrays) {\n var i = 0,\n j,\n k,\n p,\n q,\n matches,\n match; // loop through all regexes maps\n\n while (i < arrays.length && !matches) {\n var regex = arrays[i],\n // even sequence (0,2,4,..)\n props = arrays[i + 1]; // odd sequence (1,3,5,..)\n\n j = k = 0; // try matching uastring with regexes\n\n while (j < regex.length && !matches) {\n matches = regex[j++].exec(ua);\n\n if (!!matches) {\n for (p = 0; p < props.length; p++) {\n match = matches[++k];\n q = props[p]; // check if given property is actually array\n\n if (_typeof(q) === OBJ_TYPE && q.length > 0) {\n if (q.length == 2) {\n if (_typeof(q[1]) == FUNC_TYPE) {\n // assign modified match\n this[q[0]] = q[1].call(this, match);\n } else {\n // assign given value, ignore regex match\n this[q[0]] = q[1];\n }\n } else if (q.length == 3) {\n // check whether function or regex\n if (_typeof(q[1]) === FUNC_TYPE && !(q[1].exec && q[1].test)) {\n // call function (usually string mapper)\n this[q[0]] = match ? q[1].call(this, match, q[2]) : undefined$1;\n } else {\n // sanitize match using given regex\n this[q[0]] = match ? match.replace(q[1], q[2]) : undefined$1;\n }\n } else if (q.length == 4) {\n this[q[0]] = match ? q[3].call(this, match.replace(q[1], q[2])) : undefined$1;\n }\n } else {\n this[q] = match ? match : undefined$1;\n }\n }\n }\n }\n\n i += 2;\n }\n },\n str: function str(_str, map) {\n for (var i in map) {\n // check if array\n if (_typeof(map[i]) === OBJ_TYPE && map[i].length > 0) {\n for (var j = 0; j < map[i].length; j++) {\n if (util.has(map[i][j], _str)) {\n return i === UNKNOWN ? undefined$1 : i;\n }\n }\n } else if (util.has(map[i], _str)) {\n return i === UNKNOWN ? undefined$1 : i;\n }\n }\n\n return _str;\n }\n }; ///////////////\n // String map\n //////////////\n\n var maps = {\n browser: {\n // Safari < 3.0\n oldSafari: {\n version: {\n '1.0': '/8',\n '1.2': '/1',\n '1.3': '/3',\n '2.0': '/412',\n '2.0.2': '/416',\n '2.0.3': '/417',\n '2.0.4': '/419',\n '?': '/'\n }\n },\n oldEdge: {\n version: {\n '0.1': '12.',\n '21': '13.',\n '31': '14.',\n '39': '15.',\n '41': '16.',\n '42': '17.',\n '44': '18.'\n }\n }\n },\n os: {\n windows: {\n version: {\n 'ME': '4.90',\n 'NT 3.11': 'NT3.51',\n 'NT 4.0': 'NT4.0',\n '2000': 'NT 5.0',\n 'XP': ['NT 5.1', 'NT 5.2'],\n 'Vista': 'NT 6.0',\n '7': 'NT 6.1',\n '8': 'NT 6.2',\n '8.1': 'NT 6.3',\n '10': ['NT 6.4', 'NT 10.0'],\n 'RT': 'ARM'\n }\n }\n }\n }; //////////////\n // Regex map\n /////////////\n\n var regexes = {\n browser: [[/\\b(?:crmo|crios)\\/([\\w\\.]+)/i // Chrome for Android/iOS\n ], [VERSION, [NAME, 'Chrome']], [/edg(?:e|ios|a)?\\/([\\w\\.]+)/i // Microsoft Edge\n ], [VERSION, [NAME, 'Edge']], [// breaking change (reserved for next major release):\n ///edge\\/([\\w\\.]+)/i // Old Edge (Trident)\n //], [[VERSION, mapper.str, maps.browser.oldEdge.version], [NAME, 'Edge']], [\n // Presto based\n /(opera\\smini)\\/([\\w\\.-]+)/i, // Opera Mini\n /(opera\\s[mobiletab]{3,6})\\b.+version\\/([\\w\\.-]+)/i, // Opera Mobi/Tablet\n /(opera)(?:.+version\\/|[\\/\\s]+)([\\w\\.]+)/i // Opera\n ], [NAME, VERSION], [/opios[\\/\\s]+([\\w\\.]+)/i // Opera mini on iphone >= 8.0\n ], [VERSION, [NAME, 'Opera Mini']], [/\\sopr\\/([\\w\\.]+)/i // Opera Webkit\n ], [VERSION, [NAME, 'Opera']], [// Mixed\n /(kindle)\\/([\\w\\.]+)/i, // Kindle\n /(lunascape|maxthon|netfront|jasmine|blazer)[\\/\\s]?([\\w\\.]*)/i, // Lunascape/Maxthon/Netfront/Jasmine/Blazer\n // Trident based\n /(avant\\s|iemobile|slim)(?:browser)?[\\/\\s]?([\\w\\.]*)/i, // Avant/IEMobile/SlimBrowser\n /(ba?idubrowser)[\\/\\s]?([\\w\\.]+)/i, // Baidu Browser\n /(?:ms|\\()(ie)\\s([\\w\\.]+)/i, // Internet Explorer\n // Webkit/KHTML based\n /(flock|rockmelt|midori|epiphany|silk|skyfire|ovibrowser|bolt|iron|vivaldi|iridium|phantomjs|bowser|quark|qupzilla|falkon)\\/([\\w\\.-]+)/i, // Flock/RockMelt/Midori/Epiphany/Silk/Skyfire/Bolt/Iron/Iridium/PhantomJS/Bowser/QupZilla/Falkon\n /(rekonq|puffin|brave|whale|qqbrowserlite|qq)\\/([\\w\\.]+)/i, // Rekonq/Puffin/Brave/Whale/QQBrowserLite/QQ, aka ShouQ\n /(weibo)__([\\d\\.]+)/i // Weibo\n ], [NAME, VERSION], [/(?:[\\s\\/]uc?\\s?browser|(?:juc.+)ucweb)[\\/\\s]?([\\w\\.]+)/i // UCBrowser\n ], [VERSION, [NAME, 'UCBrowser']], [/(?:windowswechat)?\\sqbcore\\/([\\w\\.]+)\\b.*(?:windowswechat)?/i // WeChat Desktop for Windows Built-in Browser\n ], [VERSION, [NAME, 'WeChat(Win) Desktop']], [/micromessenger\\/([\\w\\.]+)/i // WeChat\n ], [VERSION, [NAME, 'WeChat']], [/konqueror\\/([\\w\\.]+)/i // Konqueror\n ], [VERSION, [NAME, 'Konqueror']], [/trident.+rv[:\\s]([\\w\\.]{1,9})\\b.+like\\sgecko/i // IE11\n ], [VERSION, [NAME, 'IE']], [/yabrowser\\/([\\w\\.]+)/i // Yandex\n ], [VERSION, [NAME, 'Yandex']], [/(avast|avg)\\/([\\w\\.]+)/i // Avast/AVG Secure Browser\n ], [[NAME, /(.+)/, '$1 Secure Browser'], VERSION], [/focus\\/([\\w\\.]+)/i // Firefox Focus\n ], [VERSION, [NAME, 'Firefox Focus']], [/opt\\/([\\w\\.]+)/i // Opera Touch\n ], [VERSION, [NAME, 'Opera Touch']], [/coc_coc_browser\\/([\\w\\.]+)/i // Coc Coc Browser\n ], [VERSION, [NAME, 'Coc Coc']], [/dolfin\\/([\\w\\.]+)/i // Dolphin\n ], [VERSION, [NAME, 'Dolphin']], [/coast\\/([\\w\\.]+)/i // Opera Coast\n ], [VERSION, [NAME, 'Opera Coast']], [/xiaomi\\/miuibrowser\\/([\\w\\.]+)/i // MIUI Browser\n ], [VERSION, [NAME, 'MIUI Browser']], [/fxios\\/([\\w\\.-]+)/i // Firefox for iOS\n ], [VERSION, [NAME, 'Firefox']], [/(qihu|qhbrowser|qihoobrowser|360browser)/i // 360\n ], [[NAME, '360 Browser']], [/(oculus|samsung|sailfish)browser\\/([\\w\\.]+)/i], [[NAME, /(.+)/, '$1 Browser'], VERSION], [// Oculus/Samsung/Sailfish Browser\n /(comodo_dragon)\\/([\\w\\.]+)/i // Comodo Dragon\n ], [[NAME, /_/g, ' '], VERSION], [/\\s(electron)\\/([\\w\\.]+)\\ssafari/i, // Electron-based App\n /(tesla)(?:\\sqtcarbrowser|\\/(20[12]\\d\\.[\\w\\.-]+))/i, // Tesla\n /m?(qqbrowser|baiduboxapp|2345Explorer)[\\/\\s]?([\\w\\.]+)/i // QQBrowser/Baidu App/2345 Browser\n ], [NAME, VERSION], [/(MetaSr)[\\/\\s]?([\\w\\.]+)/i, // SouGouBrowser\n /(LBBROWSER)/i // LieBao Browser\n ], [NAME], [// WebView\n /;fbav\\/([\\w\\.]+);/i // Facebook App for iOS & Android with version\n ], [VERSION, [NAME, 'Facebook']], [/FBAN\\/FBIOS|FB_IAB\\/FB4A/i // Facebook App for iOS & Android without version\n ], [[NAME, 'Facebook']], [/safari\\s(line)\\/([\\w\\.]+)/i, // Line App for iOS\n /\\b(line)\\/([\\w\\.]+)\\/iab/i, // Line App for Android\n /(chromium|instagram)[\\/\\s]([\\w\\.-]+)/i // Chromium/Instagram\n ], [NAME, VERSION], [/\\bgsa\\/([\\w\\.]+)\\s.*safari\\//i // Google Search Appliance on iOS\n ], [VERSION, [NAME, 'GSA']], [/headlesschrome(?:\\/([\\w\\.]+)|\\s)/i // Chrome Headless\n ], [VERSION, [NAME, 'Chrome Headless']], [/\\swv\\).+(chrome)\\/([\\w\\.]+)/i // Chrome WebView\n ], [[NAME, 'Chrome WebView'], VERSION], [/droid.+\\sversion\\/([\\w\\.]+)\\b.+(?:mobile\\ssafari|safari)/i // Android Browser\n ], [VERSION, [NAME, 'Android Browser']], [/(chrome|omniweb|arora|[tizenoka]{5}\\s?browser)\\/v?([\\w\\.]+)/i // Chrome/OmniWeb/Arora/Tizen/Nokia\n ], [NAME, VERSION], [/version\\/([\\w\\.]+)\\s.*mobile\\/\\w+\\s(safari)/i // Mobile Safari\n ], [VERSION, [NAME, 'Mobile Safari']], [/version\\/([\\w\\.]+)\\s.*(mobile\\s?safari|safari)/i // Safari & Safari Mobile\n ], [VERSION, NAME], [/webkit.+?(mobile\\s?safari|safari)(\\/[\\w\\.]+)/i // Safari < 3.0\n ], [NAME, [VERSION, mapper.str, maps.browser.oldSafari.version]], [/(webkit|khtml)\\/([\\w\\.]+)/i], [NAME, VERSION], [// Gecko based\n /(navigator|netscape)\\/([\\w\\.-]+)/i // Netscape\n ], [[NAME, 'Netscape'], VERSION], [/ile\\svr;\\srv:([\\w\\.]+)\\).+firefox/i // Firefox Reality\n ], [VERSION, [NAME, 'Firefox Reality']], [/ekiohf.+(flow)\\/([\\w\\.]+)/i, // Flow\n /(swiftfox)/i, // Swiftfox\n /(icedragon|iceweasel|camino|chimera|fennec|maemo\\sbrowser|minimo|conkeror)[\\/\\s]?([\\w\\.\\+]+)/i, // IceDragon/Iceweasel/Camino/Chimera/Fennec/Maemo/Minimo/Conkeror\n /(firefox|seamonkey|k-meleon|icecat|iceape|firebird|phoenix|palemoon|basilisk|waterfox)\\/([\\w\\.-]+)$/i, // Firefox/SeaMonkey/K-Meleon/IceCat/IceApe/Firebird/Phoenix\n /(firefox)\\/([\\w\\.]+)\\s[\\w\\s\\-]+\\/[\\w\\.]+$/i, // Other Firefox-based\n /(mozilla)\\/([\\w\\.]+)\\s.+rv\\:.+gecko\\/\\d+/i, // Mozilla\n // Other\n /(polaris|lynx|dillo|icab|doris|amaya|w3m|netsurf|sleipnir)[\\/\\s]?([\\w\\.]+)/i, // Polaris/Lynx/Dillo/iCab/Doris/Amaya/w3m/NetSurf/Sleipnir\n /(links)\\s\\(([\\w\\.]+)/i, // Links\n /(gobrowser)\\/?([\\w\\.]*)/i, // GoBrowser\n /(ice\\s?browser)\\/v?([\\w\\._]+)/i, // ICE Browser\n /(mosaic)[\\/\\s]([\\w\\.]+)/i // Mosaic\n ], [NAME, VERSION]],\n cpu: [[/(?:(amd|x(?:(?:86|64)[_-])?|wow|win)64)[;\\)]/i // AMD64 (x64)\n ], [[ARCHITECTURE, 'amd64']], [/(ia32(?=;))/i // IA32 (quicktime)\n ], [[ARCHITECTURE, util.lowerize]], [/((?:i[346]|x)86)[;\\)]/i // IA32 (x86)\n ], [[ARCHITECTURE, 'ia32']], [/\\b(aarch64|armv?8e?l?)\\b/i // ARM64\n ], [[ARCHITECTURE, 'arm64']], [/\\b(arm(?:v[67])?ht?n?[fl]p?)\\b/i // ARMHF\n ], [[ARCHITECTURE, 'armhf']], [// PocketPC mistakenly identified as PowerPC\n /windows\\s(ce|mobile);\\sppc;/i], [[ARCHITECTURE, 'arm']], [/((?:ppc|powerpc)(?:64)?)(?:\\smac|;|\\))/i // PowerPC\n ], [[ARCHITECTURE, /ower/, '', util.lowerize]], [/(sun4\\w)[;\\)]/i // SPARC\n ], [[ARCHITECTURE, 'sparc']], [/((?:avr32|ia64(?=;))|68k(?=\\))|\\barm(?:64|(?=v(?:[1-7]|[5-7]1)l?|;|eabi))|(?=atmel\\s)avr|(?:irix|mips|sparc)(?:64)?\\b|pa-risc)/i // IA64, 68K, ARM/64, AVR/32, IRIX/64, MIPS/64, SPARC/64, PA-RISC\n ], [[ARCHITECTURE, util.lowerize]]],\n device: [[//////////////////////////\n // MOBILES & TABLETS\n // Ordered by popularity\n /////////////////////////\n // Samsung\n /\\b(sch-i[89]0\\d|shw-m380s|sm-[pt]\\w{2,4}|gt-[pn]\\d{2,4}|sgh-t8[56]9|nexus\\s10)/i], [MODEL, [VENDOR, 'Samsung'], [TYPE, TABLET]], [/\\b((?:s[cgp]h|gt|sm)-\\w+|galaxy\\snexus)/i, /\\ssamsung[\\s-]([\\w-]+)/i, /sec-(sgh\\w+)/i], [MODEL, [VENDOR, 'Samsung'], [TYPE, MOBILE]], [// Apple\n /\\((ip(?:hone|od)[\\s\\w]*);/i // iPod/iPhone\n ], [MODEL, [VENDOR, 'Apple'], [TYPE, MOBILE]], [/\\((ipad);[\\w\\s\\),;-]+apple/i, // iPad\n /applecoremedia\\/[\\w\\.]+\\s\\((ipad)/i, /\\b(ipad)\\d\\d?,\\d\\d?[;\\]].+ios/i], [MODEL, [VENDOR, 'Apple'], [TYPE, TABLET]], [// Huawei\n /\\b((?:agr|ags[23]|bah2?|sht?)-a?[lw]\\d{2})/i], [MODEL, [VENDOR, 'Huawei'], [TYPE, TABLET]], [/d\\/huawei([\\w\\s-]+)[;\\)]/i, /\\b(nexus\\s6p|vog-[at]?l\\d\\d|ane-[at]?l[x\\d]\\d|eml-a?l\\d\\da?|lya-[at]?l\\d[\\dc]|clt-a?l\\d\\di?|ele-l\\d\\d)/i, /\\b(\\w{2,4}-[atu][ln][01259][019])[;\\)\\s]/i], [MODEL, [VENDOR, 'Huawei'], [TYPE, MOBILE]], [// Xiaomi\n /\\b(poco[\\s\\w]+)(?:\\sbuild|\\))/i, // Xiaomi POCO\n /\\b;\\s(\\w+)\\sbuild\\/hm\\1/i, // Xiaomi Hongmi 'numeric' models\n /\\b(hm[\\s\\-_]?note?[\\s_]?(?:\\d\\w)?)\\sbuild/i, // Xiaomi Hongmi\n /\\b(redmi[\\s\\-_]?(?:note|k)?[\\w\\s_]+)(?:\\sbuild|\\))/i, // Xiaomi Redmi\n /\\b(mi[\\s\\-_]?(?:a\\d|one|one[\\s_]plus|note lte)?[\\s_]?(?:\\d?\\w?)[\\s_]?(?:plus)?)\\sbuild/i // Xiaomi Mi\n ], [[MODEL, /_/g, ' '], [VENDOR, 'Xiaomi'], [TYPE, MOBILE]], [/\\b(mi[\\s\\-_]?(?:pad)(?:[\\w\\s_]+))(?:\\sbuild|\\))/i // Mi Pad tablets\n ], [[MODEL, /_/g, ' '], [VENDOR, 'Xiaomi'], [TYPE, TABLET]], [// OPPO\n /;\\s(\\w+)\\sbuild.+\\soppo/i, /\\s(cph[12]\\d{3}|p(?:af|c[al]|d\\w|e[ar])[mt]\\d0|x9007)\\b/i], [MODEL, [VENDOR, 'OPPO'], [TYPE, MOBILE]], [// Vivo\n /\\svivo\\s(\\w+)(?:\\sbuild|\\))/i, /\\s(v[12]\\d{3}\\w?[at])(?:\\sbuild|;)/i], [MODEL, [VENDOR, 'Vivo'], [TYPE, MOBILE]], [// Realme\n /\\s(rmx[12]\\d{3})(?:\\sbuild|;)/i], [MODEL, [VENDOR, 'Realme'], [TYPE, MOBILE]], [// Motorola\n /\\s(milestone|droid(?:[2-4x]|\\s(?:bionic|x2|pro|razr))?:?(\\s4g)?)\\b[\\w\\s]+build\\//i, /\\smot(?:orola)?[\\s-](\\w*)/i, /((?:moto[\\s\\w\\(\\)]+|xt\\d{3,4}|nexus\\s6)(?=\\sbuild|\\)))/i], [MODEL, [VENDOR, 'Motorola'], [TYPE, MOBILE]], [/\\s(mz60\\d|xoom[\\s2]{0,2})\\sbuild\\//i], [MODEL, [VENDOR, 'Motorola'], [TYPE, TABLET]], [// LG\n /((?=lg)?[vl]k\\-?\\d{3})\\sbuild|\\s3\\.[\\s\\w;-]{10}lg?-([06cv9]{3,4})/i], [MODEL, [VENDOR, 'LG'], [TYPE, TABLET]], [/(lm-?f100[nv]?|nexus\\s[45])/i, /lg[e;\\s\\/-]+((?!browser|netcast)\\w+)/i, /\\blg(\\-?[\\d\\w]+)\\sbuild/i], [MODEL, [VENDOR, 'LG'], [TYPE, MOBILE]], [// Lenovo\n /(ideatab[\\w\\-\\s]+)/i, /lenovo\\s?(s(?:5000|6000)(?:[\\w-]+)|tab(?:[\\s\\w]+)|yt[\\d\\w-]{6}|tb[\\d\\w-]{6})/i // Lenovo tablets\n ], [MODEL, [VENDOR, 'Lenovo'], [TYPE, TABLET]], [// Nokia\n /(?:maemo|nokia).*(n900|lumia\\s\\d+)/i, /nokia[\\s_-]?([\\w\\.-]*)/i], [[MODEL, /_/g, ' '], [VENDOR, 'Nokia'], [TYPE, MOBILE]], [// Google\n /droid.+;\\s(pixel\\sc)[\\s)]/i // Google Pixel C\n ], [MODEL, [VENDOR, 'Google'], [TYPE, TABLET]], [/droid.+;\\s(pixel[\\s\\daxl]{0,6})(?:\\sbuild|\\))/i // Google Pixel\n ], [MODEL, [VENDOR, 'Google'], [TYPE, MOBILE]], [// Sony\n /droid.+\\s([c-g]\\d{4}|so[-l]\\w+|xq-a\\w[4-7][12])(?=\\sbuild\\/|\\).+chrome\\/(?![1-6]{0,1}\\d\\.))/i], [MODEL, [VENDOR, 'Sony'], [TYPE, MOBILE]], [/sony\\stablet\\s[ps]\\sbuild\\//i, /(?:sony)?sgp\\w+(?:\\sbuild\\/|\\))/i], [[MODEL, 'Xperia Tablet'], [VENDOR, 'Sony'], [TYPE, TABLET]], [// OnePlus\n /\\s(kb2005|in20[12]5|be20[12][59])\\b/i, /\\ba000(1)\\sbuild/i, // OnePlus\n /\\boneplus\\s(a\\d{4})[\\s)]/i], [MODEL, [VENDOR, 'OnePlus'], [TYPE, MOBILE]], [// Amazon\n /(alexa)webm/i, /(kf[a-z]{2}wi)(\\sbuild\\/|\\))/i, // Kindle Fire without Silk\n /(kf[a-z]+)(\\sbuild\\/|\\)).+silk\\//i // Kindle Fire HD\n ], [MODEL, [VENDOR, 'Amazon'], [TYPE, TABLET]], [/(sd|kf)[0349hijorstuw]+(\\sbuild\\/|\\)).+silk\\//i // Fire Phone\n ], [[MODEL, 'Fire Phone'], [VENDOR, 'Amazon'], [TYPE, MOBILE]], [// BlackBerry\n /\\((playbook);[\\w\\s\\),;-]+(rim)/i // BlackBerry PlayBook\n ], [MODEL, VENDOR, [TYPE, TABLET]], [/((?:bb[a-f]|st[hv])100-\\d)/i, /\\(bb10;\\s(\\w+)/i // BlackBerry 10\n ], [MODEL, [VENDOR, 'BlackBerry'], [TYPE, MOBILE]], [// Asus\n /(?:\\b|asus_)(transfo[prime\\s]{4,10}\\s\\w+|eeepc|slider\\s\\w+|nexus\\s7|padfone|p00[cj])/i], [MODEL, [VENDOR, 'ASUS'], [TYPE, TABLET]], [/\\s(z[es]6[027][01][km][ls]|zenfone\\s\\d\\w?)\\b/i], [MODEL, [VENDOR, 'ASUS'], [TYPE, MOBILE]], [// HTC\n /(nexus\\s9)/i // HTC Nexus 9\n ], [MODEL, [VENDOR, 'HTC'], [TYPE, TABLET]], [/(htc)[;_\\s-]{1,2}([\\w\\s]+(?=\\)|\\sbuild)|\\w+)/i, // HTC\n // ZTE\n /(zte)-(\\w*)/i, /(alcatel|geeksphone|nexian|panasonic|(?=;\\s)sony)[_\\s-]?([\\w-]*)/i // Alcatel/GeeksPhone/Nexian/Panasonic/Sony\n ], [VENDOR, [MODEL, /_/g, ' '], [TYPE, MOBILE]], [// Acer\n /droid[x\\d\\.\\s;]+\\s([ab][1-7]\\-?[0178a]\\d\\d?)/i], [MODEL, [VENDOR, 'Acer'], [TYPE, TABLET]], [// Meizu\n /droid.+;\\s(m[1-5]\\snote)\\sbuild/i, /\\bmz-([\\w-]{2,})/i], [MODEL, [VENDOR, 'Meizu'], [TYPE, MOBILE]], [// MIXED\n /(blackberry|benq|palm(?=\\-)|sonyericsson|acer|asus|dell|meizu|motorola|polytron)[\\s_-]?([\\w-]*)/i, // BlackBerry/BenQ/Palm/Sony-Ericsson/Acer/Asus/Dell/Meizu/Motorola/Polytron\n /(hp)\\s([\\w\\s]+\\w)/i, // HP iPAQ\n /(asus)-?(\\w+)/i, // Asus\n /(microsoft);\\s(lumia[\\s\\w]+)/i, // Microsoft Lumia\n /(lenovo)[_\\s-]?([\\w-]+)/i, // Lenovo\n /linux;.+(jolla);/i, // Jolla\n /droid.+;\\s(oppo)\\s?([\\w\\s]+)\\sbuild/i // OPPO\n ], [VENDOR, MODEL, [TYPE, MOBILE]], [/(archos)\\s(gamepad2?)/i, // Archos\n /(hp).+(touchpad(?!.+tablet)|tablet)/i, // HP TouchPad\n /(kindle)\\/([\\w\\.]+)/i, // Kindle\n /\\s(nook)[\\w\\s]+build\\/(\\w+)/i, // Nook\n /(dell)\\s(strea[kpr\\s\\d]*[\\dko])/i, // Dell Streak\n /[;\\/]\\s?(le[\\s\\-]+pan)[\\s\\-]+(\\w{1,9})\\sbuild/i, // Le Pan Tablets\n /[;\\/]\\s?(trinity)[\\-\\s]*(t\\d{3})\\sbuild/i, // Trinity Tablets\n /\\b(gigaset)[\\s\\-]+(q\\w{1,9})\\sbuild/i, // Gigaset Tablets\n /\\b(vodafone)\\s([\\w\\s]+)(?:\\)|\\sbuild)/i // Vodafone\n ], [VENDOR, MODEL, [TYPE, TABLET]], [/\\s(surface\\sduo)\\s/i // Surface Duo\n ], [MODEL, [VENDOR, 'Microsoft'], [TYPE, TABLET]], [/droid\\s[\\d\\.]+;\\s(fp\\du?)\\sbuild/i], [MODEL, [VENDOR, 'Fairphone'], [TYPE, MOBILE]], [/\\s(u304aa)\\sbuild/i // AT&T\n ], [MODEL, [VENDOR, 'AT&T'], [TYPE, MOBILE]], [/sie-(\\w*)/i // Siemens\n ], [MODEL, [VENDOR, 'Siemens'], [TYPE, MOBILE]], [/[;\\/]\\s?(rct\\w+)\\sbuild/i // RCA Tablets\n ], [MODEL, [VENDOR, 'RCA'], [TYPE, TABLET]], [/[;\\/\\s](venue[\\d\\s]{2,7})\\sbuild/i // Dell Venue Tablets\n ], [MODEL, [VENDOR, 'Dell'], [TYPE, TABLET]], [/[;\\/]\\s?(q(?:mv|ta)\\w+)\\sbuild/i // Verizon Tablet\n ], [MODEL, [VENDOR, 'Verizon'], [TYPE, TABLET]], [/[;\\/]\\s(?:barnes[&\\s]+noble\\s|bn[rt])([\\w\\s\\+]*)\\sbuild/i // Barnes & Noble Tablet\n ], [MODEL, [VENDOR, 'Barnes & Noble'], [TYPE, TABLET]], [/[;\\/]\\s(tm\\d{3}\\w+)\\sbuild/i], [MODEL, [VENDOR, 'NuVision'], [TYPE, TABLET]], [/;\\s(k88)\\sbuild/i // ZTE K Series Tablet\n ], [MODEL, [VENDOR, 'ZTE'], [TYPE, TABLET]], [/;\\s(nx\\d{3}j)\\sbuild/i // ZTE Nubia\n ], [MODEL, [VENDOR, 'ZTE'], [TYPE, MOBILE]], [/[;\\/]\\s?(gen\\d{3})\\sbuild.*49h/i // Swiss GEN Mobile\n ], [MODEL, [VENDOR, 'Swiss'], [TYPE, MOBILE]], [/[;\\/]\\s?(zur\\d{3})\\sbuild/i // Swiss ZUR Tablet\n ], [MODEL, [VENDOR, 'Swiss'], [TYPE, TABLET]], [/[;\\/]\\s?((zeki)?tb.*\\b)\\sbuild/i // Zeki Tablets\n ], [MODEL, [VENDOR, 'Zeki'], [TYPE, TABLET]], [/[;\\/]\\s([yr]\\d{2})\\sbuild/i, /[;\\/]\\s(dragon[\\-\\s]+touch\\s|dt)(\\w{5})\\sbuild/i // Dragon Touch Tablet\n ], [[VENDOR, 'Dragon Touch'], MODEL, [TYPE, TABLET]], [/[;\\/]\\s?(ns-?\\w{0,9})\\sbuild/i // Insignia Tablets\n ], [MODEL, [VENDOR, 'Insignia'], [TYPE, TABLET]], [/[;\\/]\\s?((nxa|Next)-?\\w{0,9})\\sbuild/i // NextBook Tablets\n ], [MODEL, [VENDOR, 'NextBook'], [TYPE, TABLET]], [/[;\\/]\\s?(xtreme\\_)?(v(1[045]|2[015]|[3469]0|7[05]))\\sbuild/i], [[VENDOR, 'Voice'], MODEL, [TYPE, MOBILE]], [// Voice Xtreme Phones\n /[;\\/]\\s?(lvtel\\-)?(v1[12])\\sbuild/i // LvTel Phones\n ], [[VENDOR, 'LvTel'], MODEL, [TYPE, MOBILE]], [/;\\s(ph-1)\\s/i], [MODEL, [VENDOR, 'Essential'], [TYPE, MOBILE]], [// Essential PH-1\n /[;\\/]\\s?(v(100md|700na|7011|917g).*\\b)\\sbuild/i // Envizen Tablets\n ], [MODEL, [VENDOR, 'Envizen'], [TYPE, TABLET]], [/[;\\/]\\s?(trio[\\s\\w\\-\\.]+)\\sbuild/i // MachSpeed Tablets\n ], [MODEL, [VENDOR, 'MachSpeed'], [TYPE, TABLET]], [/[;\\/]\\s?tu_(1491)\\sbuild/i // Rotor Tablets\n ], [MODEL, [VENDOR, 'Rotor'], [TYPE, TABLET]], [/(shield[\\w\\s]+)\\sbuild/i // Nvidia Shield Tablets\n ], [MODEL, [VENDOR, 'Nvidia'], [TYPE, TABLET]], [/(sprint)\\s(\\w+)/i // Sprint Phones\n ], [VENDOR, MODEL, [TYPE, MOBILE]], [/(kin\\.[onetw]{3})/i // Microsoft Kin\n ], [[MODEL, /\\./g, ' '], [VENDOR, 'Microsoft'], [TYPE, MOBILE]], [/droid\\s[\\d\\.]+;\\s(cc6666?|et5[16]|mc[239][23]x?|vc8[03]x?)\\)/i // Zebra\n ], [MODEL, [VENDOR, 'Zebra'], [TYPE, TABLET]], [/droid\\s[\\d\\.]+;\\s(ec30|ps20|tc[2-8]\\d[kx])\\)/i], [MODEL, [VENDOR, 'Zebra'], [TYPE, MOBILE]], [///////////////////\n // CONSOLES\n ///////////////////\n /\\s(ouya)\\s/i, // Ouya\n /(nintendo)\\s([wids3utch]+)/i // Nintendo\n ], [VENDOR, MODEL, [TYPE, CONSOLE]], [/droid.+;\\s(shield)\\sbuild/i // Nvidia\n ], [MODEL, [VENDOR, 'Nvidia'], [TYPE, CONSOLE]], [/(playstation\\s[345portablevi]+)/i // Playstation\n ], [MODEL, [VENDOR, 'Sony'], [TYPE, CONSOLE]], [/[\\s\\(;](xbox(?:\\sone)?(?!;\\sxbox))[\\s\\);]/i // Microsoft Xbox\n ], [MODEL, [VENDOR, 'Microsoft'], [TYPE, CONSOLE]], [///////////////////\n // SMARTTVS\n ///////////////////\n /smart-tv.+(samsung)/i // Samsung\n ], [VENDOR, [TYPE, SMARTTV]], [/hbbtv.+maple;(\\d+)/i], [[MODEL, /^/, 'SmartTV'], [VENDOR, 'Samsung'], [TYPE, SMARTTV]], [/(?:linux;\\snetcast.+smarttv|lg\\snetcast\\.tv-201\\d)/i // LG SmartTV\n ], [[VENDOR, 'LG'], [TYPE, SMARTTV]], [/(apple)\\s?tv/i // Apple TV\n ], [VENDOR, [MODEL, 'Apple TV'], [TYPE, SMARTTV]], [/crkey/i // Google Chromecast\n ], [[MODEL, 'Chromecast'], [VENDOR, 'Google'], [TYPE, SMARTTV]], [/droid.+aft([\\w])(\\sbuild\\/|\\))/i // Fire TV\n ], [MODEL, [VENDOR, 'Amazon'], [TYPE, SMARTTV]], [/\\(dtv[\\);].+(aquos)/i // Sharp\n ], [MODEL, [VENDOR, 'Sharp'], [TYPE, SMARTTV]], [/hbbtv\\/\\d+\\.\\d+\\.\\d+\\s+\\([\\w\\s]*;\\s*(\\w[^;]*);([^;]*)/i // HbbTV devices\n ], [[VENDOR, util.trim], [MODEL, util.trim], [TYPE, SMARTTV]], [/[\\s\\/\\(](android\\s|smart[-\\s]?|opera\\s)tv[;\\)\\s]/i // SmartTV from Unidentified Vendors\n ], [[TYPE, SMARTTV]], [///////////////////\n // WEARABLES\n ///////////////////\n /((pebble))app\\/[\\d\\.]+\\s/i // Pebble\n ], [VENDOR, MODEL, [TYPE, WEARABLE]], [/droid.+;\\s(glass)\\s\\d/i // Google Glass\n ], [MODEL, [VENDOR, 'Google'], [TYPE, WEARABLE]], [/droid\\s[\\d\\.]+;\\s(wt63?0{2,3})\\)/i], [MODEL, [VENDOR, 'Zebra'], [TYPE, WEARABLE]], [///////////////////\n // EMBEDDED\n ///////////////////\n /(tesla)(?:\\sqtcarbrowser|\\/20[12]\\d\\.[\\w\\.-]+)/i // Tesla\n ], [VENDOR, [TYPE, EMBEDDED]], [////////////////////\n // MIXED (GENERIC)\n ///////////////////\n /droid .+?; ([^;]+?)(?: build|\\) applewebkit).+? mobile safari/i // Android Phones from Unidentified Vendors\n ], [MODEL, [TYPE, MOBILE]], [/droid .+?;\\s([^;]+?)(?: build|\\) applewebkit).+?(?! mobile) safari/i // Android Tablets from Unidentified Vendors\n ], [MODEL, [TYPE, TABLET]], [/\\s(tablet|tab)[;\\/]/i, // Unidentifiable Tablet\n /\\s(mobile)(?:[;\\/]|\\ssafari)/i // Unidentifiable Mobile\n ], [[TYPE, util.lowerize]], [/(android[\\w\\.\\s\\-]{0,9});.+build/i // Generic Android Device\n ], [MODEL, [VENDOR, 'Generic']], [/(phone)/i], [[TYPE, MOBILE]]],\n engine: [[/windows.+\\sedge\\/([\\w\\.]+)/i // EdgeHTML\n ], [VERSION, [NAME, 'EdgeHTML']], [/webkit\\/537\\.36.+chrome\\/(?!27)([\\w\\.]+)/i // Blink\n ], [VERSION, [NAME, 'Blink']], [/(presto)\\/([\\w\\.]+)/i, // Presto\n /(webkit|trident|netfront|netsurf|amaya|lynx|w3m|goanna)\\/([\\w\\.]+)/i, // WebKit/Trident/NetFront/NetSurf/Amaya/Lynx/w3m/Goanna\n /ekioh(flow)\\/([\\w\\.]+)/i, // Flow\n /(khtml|tasman|links)[\\/\\s]\\(?([\\w\\.]+)/i, // KHTML/Tasman/Links\n /(icab)[\\/\\s]([23]\\.[\\d\\.]+)/i // iCab\n ], [NAME, VERSION], [/rv\\:([\\w\\.]{1,9})\\b.+(gecko)/i // Gecko\n ], [VERSION, NAME]],\n os: [[// Windows\n /microsoft\\s(windows)\\s(vista|xp)/i // Windows (iTunes)\n ], [NAME, VERSION], [/(windows)\\snt\\s6\\.2;\\s(arm)/i, // Windows RT\n /(windows\\sphone(?:\\sos)*)[\\s\\/]?([\\d\\.\\s\\w]*)/i, // Windows Phone\n /(windows\\smobile|windows)[\\s\\/]?([ntce\\d\\.\\s]+\\w)(?!.+xbox)/i], [NAME, [VERSION, mapper.str, maps.os.windows.version]], [/(win(?=3|9|n)|win\\s9x\\s)([nt\\d\\.]+)/i], [[NAME, 'Windows'], [VERSION, mapper.str, maps.os.windows.version]], [// iOS/macOS\n /ip[honead]{2,4}\\b(?:.*os\\s([\\w]+)\\slike\\smac|;\\sopera)/i, // iOS\n /cfnetwork\\/.+darwin/i], [[VERSION, /_/g, '.'], [NAME, 'iOS']], [/(mac\\sos\\sx)\\s?([\\w\\s\\.]*)/i, /(macintosh|mac(?=_powerpc)\\s)(?!.+haiku)/i // Mac OS\n ], [[NAME, 'Mac OS'], [VERSION, /_/g, '.']], [// Mobile OSes // Android/WebOS/Palm/QNX/Bada/RIM/MeeGo/Contiki/Sailfish OS\n /(android|webos|palm\\sos|qnx|bada|rim\\stablet\\sos|meego|sailfish|contiki)[\\/\\s-]?([\\w\\.]*)/i, /(blackberry)\\w*\\/([\\w\\.]*)/i, // Blackberry\n /(tizen|kaios)[\\/\\s]([\\w\\.]+)/i, // Tizen/KaiOS\n /\\((series40);/i // Series 40\n ], [NAME, VERSION], [/\\(bb(10);/i // BlackBerry 10\n ], [VERSION, [NAME, 'BlackBerry']], [/(?:symbian\\s?os|symbos|s60(?=;)|series60)[\\/\\s-]?([\\w\\.]*)/i // Symbian\n ], [VERSION, [NAME, 'Symbian']], [/mozilla.+\\(mobile;.+gecko.+firefox/i // Firefox OS\n ], [[NAME, 'Firefox OS']], [/web0s;.+rt(tv)/i, /\\b(?:hp)?wos(?:browser)?\\/([\\w\\.]+)/i // WebOS\n ], [VERSION, [NAME, 'webOS']], [// Google Chromecast\n /crkey\\/([\\d\\.]+)/i // Google Chromecast\n ], [VERSION, [NAME, 'Chromecast']], [/(cros)\\s[\\w]+\\s([\\w\\.]+\\w)/i // Chromium OS\n ], [[NAME, 'Chromium OS'], VERSION], [// Console\n /(nintendo|playstation)\\s([wids345portablevuch]+)/i, // Nintendo/Playstation\n /(xbox);\\s+xbox\\s([^\\);]+)/i, // Microsoft Xbox (360, One, X, S, Series X, Series S)\n // GNU/Linux based\n /(mint)[\\/\\s\\(\\)]?(\\w*)/i, // Mint\n /(mageia|vectorlinux)[;\\s]/i, // Mageia/VectorLinux\n /(joli|[kxln]?ubuntu|debian|suse|opensuse|gentoo|arch(?=\\slinux)|slackware|fedora|mandriva|centos|pclinuxos|redhat|zenwalk|linpus|raspbian)(?:\\sgnu\\/linux)?(?:\\slinux)?[\\/\\s-]?(?!chrom|package)([\\w\\.-]*)/i, // Joli/Ubuntu/Debian/SUSE/Gentoo/Arch/Slackware\n // Fedora/Mandriva/CentOS/PCLinuxOS/RedHat/Zenwalk/Linpus\n /(hurd|linux)\\s?([\\w\\.]*)/i, // Hurd/Linux\n /(gnu)\\s?([\\w\\.]*)/i, // GNU\n // BSD based\n /\\s([frentopc-]{0,4}bsd|dragonfly)\\s?(?!amd|[ix346]{1,2}86)([\\w\\.]*)/i, // FreeBSD/NetBSD/OpenBSD/PC-BSD/DragonFly\n /(haiku)\\s(\\w+)/i // Haiku\n ], [NAME, VERSION], [// Other\n /(sunos)\\s?([\\w\\.\\d]*)/i // Solaris\n ], [[NAME, 'Solaris'], VERSION], [/((?:open)?solaris)[\\/\\s-]?([\\w\\.]*)/i, // Solaris\n /(aix)\\s((\\d)(?=\\.|\\)|\\s)[\\w\\.])*/i, // AIX\n /(plan\\s9|minix|beos|os\\/2|amigaos|morphos|risc\\sos|openvms|fuchsia)/i, // Plan9/Minix/BeOS/OS2/AmigaOS/MorphOS/RISCOS/OpenVMS/Fuchsia\n /(unix)\\s?([\\w\\.]*)/i // UNIX\n ], [NAME, VERSION]]\n }; /////////////////\n // Constructor\n ////////////////\n\n var UAParser = function UAParser(ua, extensions) {\n if (_typeof(ua) === 'object') {\n extensions = ua;\n ua = undefined$1;\n }\n\n if (!(this instanceof UAParser)) {\n return new UAParser(ua, extensions).getResult();\n }\n\n var _ua = ua || (typeof window !== 'undefined' && window.navigator && window.navigator.userAgent ? window.navigator.userAgent : EMPTY);\n\n var _rgxmap = extensions ? util.extend(regexes, extensions) : regexes;\n\n this.getBrowser = function () {\n var _browser = {\n name: undefined$1,\n version: undefined$1\n };\n mapper.rgx.call(_browser, _ua, _rgxmap.browser);\n _browser.major = util.major(_browser.version); // deprecated\n\n return _browser;\n };\n\n this.getCPU = function () {\n var _cpu = {\n architecture: undefined$1\n };\n mapper.rgx.call(_cpu, _ua, _rgxmap.cpu);\n return _cpu;\n };\n\n this.getDevice = function () {\n var _device = {\n vendor: undefined$1,\n model: undefined$1,\n type: undefined$1\n };\n mapper.rgx.call(_device, _ua, _rgxmap.device);\n return _device;\n };\n\n this.getEngine = function () {\n var _engine = {\n name: undefined$1,\n version: undefined$1\n };\n mapper.rgx.call(_engine, _ua, _rgxmap.engine);\n return _engine;\n };\n\n this.getOS = function () {\n var _os = {\n name: undefined$1,\n version: undefined$1\n };\n mapper.rgx.call(_os, _ua, _rgxmap.os);\n return _os;\n };\n\n this.getResult = function () {\n return {\n ua: this.getUA(),\n browser: this.getBrowser(),\n engine: this.getEngine(),\n os: this.getOS(),\n device: this.getDevice(),\n cpu: this.getCPU()\n };\n };\n\n this.getUA = function () {\n return _ua;\n };\n\n this.setUA = function (ua) {\n _ua = _typeof(ua) === STR_TYPE && ua.length > UA_MAX_LENGTH ? util.trim(ua, UA_MAX_LENGTH) : ua;\n return this;\n };\n\n this.setUA(_ua);\n return this;\n };\n\n UAParser.VERSION = LIBVERSION;\n UAParser.BROWSER = {\n NAME: NAME,\n MAJOR: MAJOR,\n // deprecated\n VERSION: VERSION\n };\n UAParser.CPU = {\n ARCHITECTURE: ARCHITECTURE\n };\n UAParser.DEVICE = {\n MODEL: MODEL,\n VENDOR: VENDOR,\n TYPE: TYPE,\n CONSOLE: CONSOLE,\n MOBILE: MOBILE,\n SMARTTV: SMARTTV,\n TABLET: TABLET,\n WEARABLE: WEARABLE,\n EMBEDDED: EMBEDDED\n };\n UAParser.ENGINE = {\n NAME: NAME,\n VERSION: VERSION\n };\n UAParser.OS = {\n NAME: NAME,\n VERSION: VERSION\n }; ///////////\n // Export\n //////////\n // check js environment\n\n {\n // nodejs env\n if (module.exports) {\n exports = module.exports = UAParser;\n }\n\n exports.UAParser = UAParser;\n } // jQuery/Zepto specific (optional)\n // Note:\n // In AMD env the global scope should be kept clean, but jQuery is an exception.\n // jQuery always exports to global scope, unless jQuery.noConflict(true) is used,\n // and we should catch that.\n\n\n var $ = typeof window !== 'undefined' && (window.jQuery || window.Zepto);\n\n if ($ && !$.ua) {\n var parser = new UAParser();\n $.ua = parser.getResult();\n\n $.ua.get = function () {\n return parser.getUA();\n };\n\n $.ua.set = function (uastring) {\n parser.setUA(uastring);\n var result = parser.getResult();\n\n for (var prop in result) {\n $.ua[prop] = result[prop];\n }\n };\n }\n })((typeof window === \"undefined\" ? \"undefined\" : _typeof(window)) === 'object' ? window : commonjsGlobal);\n});\nuaParser.UAParser;\n\nif (typeof window !== 'undefined' && typeof window.UAParser === 'undefined') {\r\n window.UAParser = uaParser;\r\n}\r\nvar uaInfo = null;\r\nvar getUAInfo = function () {\r\n if (!uaInfo) {\r\n // @ts-ignore\r\n uaInfo = new uaParser().getResult();\r\n }\r\n return uaInfo;\r\n};\r\n/**\r\n * 判断是否当前浏览器环境是否是ie8/ie9来做cors兼容\r\n */\r\nfunction needCompatible() {\r\n var uaInfo = getUAInfo();\r\n if (uaInfo.browser.name !== 'IE') {\r\n return false;\r\n }\r\n return uaInfo.browser.major && +uaInfo.browser.major <= 9;\r\n}\r\n// 从vue-router里面拿的……\r\nfunction supportsPushState() {\r\n var ua = window.navigator.userAgent;\r\n if ((ua.indexOf('Android 2.') !== -1 || ua.indexOf('Android 4.0') !== -1)\r\n && ua.indexOf('Mobile Safari') !== -1\r\n && ua.indexOf('Chrome') === -1\r\n && ua.indexOf('Windows Phone') === -1) {\r\n return false;\r\n }\r\n return window.history && 'pushState' in window.history;\r\n}\r\nvar uaUtils = {\r\n needCompatible: needCompatible,\r\n supportsPushState: supportsPushState,\r\n getUAInfo: getUAInfo\r\n};\n\nvar devices = [\r\n ['a7', '640x1136', ['iPhone 5', 'iPhone 5s']],\r\n ['a7', '1536x2048', ['iPad Air', 'iPad Mini 2', 'iPad Mini 3']],\r\n ['a8', '640x1136', ['iPod touch (6th gen)']],\r\n ['a8', '750x1334', ['iPhone 6']],\r\n ['a8', '1242x2208', ['iPhone 6 Plus']],\r\n ['a8', '1536x2048', ['iPad Air 2', 'iPad Mini 4']],\r\n ['a9', '640x1136', ['iPhone SE']],\r\n ['a9', '750x1334', ['iPhone 6s']],\r\n ['a9', '1242x2208', ['iPhone 6s Plus']],\r\n ['a9x', '1536x2048', ['iPad Pro (1st gen 9.7-inch)']],\r\n ['a9x', '2048x2732', ['iPad Pro (1st gen 12.9-inch)']],\r\n ['a10', '750x1334', ['iPhone 7']],\r\n ['a10', '1242x2208', ['iPhone 7 Plus']],\r\n ['a10x', '1668x2224', ['iPad Pro (2th gen 10.5-inch)']],\r\n ['a10x', '2048x2732', ['iPad Pro (2th gen 12.9-inch)']],\r\n ['a11', '750x1334', ['iPhone 8']],\r\n ['a11', '1242x2208', ['iPhone 8 Plus']],\r\n ['a11', '1125x2436', ['iPhone X']],\r\n ['a12', '828x1792', ['iPhone Xr']],\r\n ['a12', '1125x2436', ['iPhone Xs']],\r\n ['a12', '1242x2688', ['iPhone Xs Max']],\r\n ['a12x', '1668x2388', ['iPad Pro (3rd gen 11-inch)']],\r\n ['a12x', '2048x2732', ['iPad Pro (3rd gen 12.9-inch)']],\r\n];\r\nvar getResolution = (function () {\r\n var resolution = '';\r\n return function () {\r\n if (resolution) {\r\n return resolution;\r\n }\r\n try {\r\n var ratio = window.devicePixelRatio || 1;\r\n var width = Math.floor(Math.min(screen.width, screen.height) * ratio); // 有的devicePixelRatio为小数,在此转为整数\r\n var height = Math.floor(Math.max(screen.width, screen.height) * ratio);\r\n resolution = width + \"x\" + height;\r\n return resolution;\r\n }\r\n catch (err) {\r\n return '';\r\n }\r\n };\r\n})();\r\nvar getGPU = (function () {\r\n var gpu = '';\r\n return function () {\r\n if (gpu) {\r\n return gpu;\r\n }\r\n try {\r\n var canvas = document.createElement('canvas');\r\n var glRenderContext = canvas.getContext('webgl');\r\n if (glRenderContext) {\r\n var debugRenderInfo = glRenderContext.getExtension('WEBGL_debug_renderer_info');\r\n gpu = debugRenderInfo\r\n ? glRenderContext.getParameter(debugRenderInfo.UNMASKED_RENDERER_WEBGL)\r\n : 'unknown';\r\n }\r\n else {\r\n gpu = 'unknown';\r\n }\r\n return gpu;\r\n }\r\n catch (err) {\r\n return 'unknown';\r\n }\r\n };\r\n})();\r\nvar getModel = (function () {\r\n var model = '';\r\n return function () {\r\n if (model) {\r\n return model;\r\n }\r\n try {\r\n var uaInfo = getUAInfo();\r\n var inApp = isInApp();\r\n // 非iOS设备走ua判断\r\n // iOS端内也有问题= =妈的,傻逼苹果!应该是UIWebView特有的坑\r\n // 链接:https://www.jianshu.com/p/bae4db1f08b2\r\n if (uaInfo.os.name !== 'iOS' || inApp) {\r\n return uaInfo.device.model || 'unknown';\r\n }\r\n var gpu = getGPU();\r\n var resolution = getResolution();\r\n var matches = gpu.match(/^apple\\s+([_a-z0-9-]+)\\s+gpu$/i);\r\n if (!matches) {\r\n model = 'unknown';\r\n return model;\r\n }\r\n for (var _i = 0, devices_1 = devices; _i < devices_1.length; _i++) {\r\n var device = devices_1[_i];\r\n if (matches[1].toLocaleLowerCase() === device[0] && resolution === device[1]) {\r\n model = device[2].join(' or ');\r\n break;\r\n }\r\n }\r\n model = model || uaInfo.device.model || 'unknown';\r\n return model;\r\n }\r\n catch (err) {\r\n return 'unknown';\r\n }\r\n };\r\n})();\r\nfunction isReactNative() {\r\n var GLOBAL = typeof globalThis !== 'undefined' ? globalThis : (typeof window !== 'undefined' ? window : null);\r\n return GLOBAL && GLOBAL.navigator && GLOBAL.navigator.product === 'ReactNative'\r\n || GLOBAL && GLOBAL.ReactNative && GLOBAL.ReactNative.NativeModules;\r\n}\n\n/**\r\n * 事件\r\n */\r\n// 网络类型\r\nvar networkType = {\r\n unknown: Base.NetworkPackageType.UNKNOWN_NETWORK,\r\n none: Base.NetworkPackageType.NOT_CONNECTED,\r\n wifi: Base.NetworkPackageType.WIFI,\r\n '4g': Base.NetworkPackageType.MOBILE_4G,\r\n '3g': Base.NetworkPackageType.MOBILE_3G,\r\n '2g': Base.NetworkPackageType.MOBILE_2G,\r\n 'slow-2g': Base.NetworkPackageType.MOBILE_2G,\r\n};\r\n// 任务事件类型\r\nvar TaskOperations;\r\n(function (TaskOperations) {\r\n TaskOperations[\"CLICK\"] = \"CLICK\";\r\n TaskOperations[\"DOUBLE_CLICK\"] = \"DOUBLE_CLICK\";\r\n TaskOperations[\"TRIPLE_CLICK\"] = \"TRIPLE_CLICK\";\r\n TaskOperations[\"LONG_PRESS\"] = \"LONG_PRESS\";\r\n TaskOperations[\"PULL\"] = \"PULL\";\r\n TaskOperations[\"DRAG\"] = \"DRAG\";\r\n TaskOperations[\"SCALE\"] = \"SCALE\";\r\n TaskOperations[\"PULL_DOWN\"] = \"PULL_DOWN\";\r\n TaskOperations[\"PULL_UP\"] = \"PULL_UP\";\r\n // VIDEO = 'VIDEO',\r\n})(TaskOperations || (TaskOperations = {}));\r\n// 事件类型\r\nvar EventTypes;\r\n(function (EventTypes) {\r\n EventTypes[\"PV\"] = \"PV\";\r\n EventTypes[\"SHOW\"] = \"SHOW\";\r\n // Costume\r\n EventTypes[\"CUSTOM\"] = \"CUSTOM\";\r\n EventTypes[\"RADAR\"] = \"RADAR\";\r\n})(EventTypes || (EventTypes = {}));\n\n// 常规业务事件自增 id key\r\nvar LOCAL_INCREAMENT_ID_KEY = 'WEBLOGGER_INCREAMENT_ID_KEY';\r\n// 自定义事件自增 id key\r\nvar LOCAL_CUSTOM_INCREAMENT_ID_KEY = 'WEBLOGGER_CUSTOM_INCREAMENT_ID_KEY';\r\n// Bridge 常规事件自增 id 本地缓存 key\r\nvar H5_SEQ_ID_KEY = 'WEBLOGGER_H5_SEQ_ID';\r\n// Bridge 自定义事件自增 id 本地缓存 key\r\nvar H5_CUSTOM_SEQ_ID_KEY = 'WEBLOGGER_H5_CUSTOM_SEQ_ID';\r\n// http 请求自增 id 本地缓存 key\r\nvar LOCAL_HTTP_INCREMENT_ID_KEY = 'WEBLOGGER_HTTP_SEQ_ID';\r\n// v2 自增 id 本地缓存 key\r\nvar V2_INCREMENT_ID_KEY = 'WEBLOGGER_V2_SEQ_ID';\r\nvar CHANNEL_INCREMENT_ID_KEY = 'WEBLOGGER_CHANNEL_SEQ_ID';\r\n// 自增 id 最大值\r\nvar maxId = 1e8;\r\n// 如果没有 localStorage 则使用运行时自增 id,用于非浏览器场景,比如 React Native\r\nvar runtimeIdMap = {};\r\nvar genId = function (key) {\r\n try {\r\n if (window && window.localStorage && typeof Storage !== 'undefined' && window.localStorage instanceof Storage) {\r\n var id = Number(getLocalStorageItem(key)) || 0;\r\n if (id + 1 > maxId) {\r\n id = 0;\r\n }\r\n setLocalStorageItem(key, id + 1);\r\n return id;\r\n }\r\n }\r\n catch (err) { }\r\n if (!runtimeIdMap[key]) {\r\n runtimeIdMap[key] = 0;\r\n }\r\n return runtimeIdMap[key]++;\r\n};\r\n/**\r\n * 常规事件自增 id\r\n */\r\nvar getNomalIncrementId = function () {\r\n return genId(LOCAL_INCREAMENT_ID_KEY);\r\n};\r\n/**\r\n * 自定义事件自增 id\r\n */\r\nvar getCustomIncrementId = function () {\r\n return genId(LOCAL_CUSTOM_INCREAMENT_ID_KEY);\r\n};\r\n/**\r\n * 桥接常规事件自增 id\r\n */\r\nvar getBridgeNormalIncrementId = function () {\r\n return genId(H5_SEQ_ID_KEY);\r\n};\r\n/**\r\n * 桥接自定义事件自增 id\r\n */\r\nvar getBridgeCustomIncrementId = function () {\r\n return genId(H5_CUSTOM_SEQ_ID_KEY);\r\n};\r\n/**\r\n * http 请求自增 id\r\n */\r\nvar getHttpIncrementId = function () {\r\n return genId(LOCAL_HTTP_INCREMENT_ID_KEY);\r\n};\r\n/**\r\n * v2 channel 自增 id\r\n */\r\nvar getChannelIncrementId = function (channel) {\r\n if (channel === void 0) { channel = ''; }\r\n return genId(CHANNEL_INCREMENT_ID_KEY + \"_\" + channel);\r\n};\r\n/**\r\n * v2 事件自增 id\r\n */\r\nvar getV2EventIncrementId = function (event) {\r\n return genId(V2_INCREMENT_ID_KEY + \"_\" + event);\r\n};\n\nvar BASE = {\r\n device_id: '',\r\n global_id: '',\r\n union_id: '',\r\n user_id: '',\r\n session_id: '',\r\n product: 0,\r\n channel: '',\r\n version_name: '',\r\n package_name: '',\r\n product_name: '',\r\n network_type: 'unknown',\r\n container: Base.Container.H5,\r\n service_name: '',\r\n sub_biz: '',\r\n need_encrypt: false,\r\n safety_id: '',\r\n experiment: [],\r\n h5_extra_attr: {},\r\n};\r\nvar initPackageKeys = [\r\n {\r\n keys: ['identity_package', 'device_id'],\r\n type: 'string',\r\n validator: function (val) { return typeof val === 'string'; },\r\n },\r\n {\r\n keys: ['identity_package', 'user_id'],\r\n type: 'string',\r\n validator: function (val) { return typeof val === 'string'; },\r\n },\r\n {\r\n keys: ['identity_package', 'union_id'],\r\n type: 'string',\r\n validator: function (val) { return typeof val === 'string'; },\r\n },\r\n {\r\n keys: ['identity_package', 'global_id'],\r\n type: 'string',\r\n validator: function (val) { return typeof val === 'string'; },\r\n },\r\n {\r\n keys: ['app_package', 'product'],\r\n type: 'number',\r\n validator: function (val) { return typeof val === 'number'; },\r\n },\r\n {\r\n keys: ['app_package', 'channel'],\r\n type: 'string',\r\n validator: function (val) { return typeof val === 'string'; },\r\n },\r\n {\r\n keys: ['app_package', 'version_name'],\r\n type: 'string',\r\n validator: function (val) { return typeof val === 'string'; },\r\n },\r\n {\r\n keys: ['app_package', 'package_name'],\r\n type: 'string',\r\n validator: function (val) { return typeof val === 'string'; },\r\n },\r\n {\r\n keys: ['app_package', 'product_name'],\r\n type: 'string',\r\n validator: function (val) { return typeof val === 'string'; },\r\n },\r\n {\r\n keys: ['app_package', 'platform'],\r\n type: 'number',\r\n validator: function (val) { return typeof val === 'number'; },\r\n },\r\n {\r\n keys: ['experiment'],\r\n type: 'Array',\r\n validator: function (val) { return val instanceof Array; },\r\n },\r\n {\r\n keys: ['service_name'],\r\n type: 'string',\r\n validator: function (val) { return typeof val === 'string'; },\r\n },\r\n {\r\n keys: ['sub_biz'],\r\n type: 'string',\r\n validator: function (val) { return typeof val === 'string'; },\r\n },\r\n {\r\n keys: ['need_encrypt'],\r\n type: 'boolean',\r\n validator: function (val) { return typeof val === 'boolean'; },\r\n },\r\n {\r\n keys: ['safety_id'],\r\n type: 'string',\r\n validator: function (val) { return typeof val === 'string'; },\r\n },\r\n {\r\n keys: ['h5_extra_attr'],\r\n type: 'Object',\r\n validator: function (val) { return val instanceof Object; },\r\n },\r\n];\n\nvar ClientCommon;\r\n(function (ClientCommon) {\r\n (function (Product) {\r\n Product[Product[\"UNKNOWN1\"] = 0] = \"UNKNOWN1\";\r\n Product[Product[\"KUAISHOU\"] = 1] = \"KUAISHOU\";\r\n Product[Product[\"KUAISHOU_GAME_EXTENSION\"] = 2] = \"KUAISHOU_GAME_EXTENSION\";\r\n Product[Product[\"KUAISHOU_LIVE_MATE\"] = 3] = \"KUAISHOU_LIVE_MATE\";\r\n Product[Product[\"KUAISHOU_VIDEO_EDITOR\"] = 4] = \"KUAISHOU_VIDEO_EDITOR\";\r\n Product[Product[\"KWAI\"] = 5] = \"KWAI\";\r\n Product[Product[\"KUAISHOU_H5\"] = 6] = \"KUAISHOU_H5\";\r\n Product[Product[\"KWAI_LITE\"] = 7] = \"KWAI_LITE\";\r\n Product[Product[\"KWAI_GO\"] = 8] = \"KWAI_GO\";\r\n Product[Product[\"KUAISHOU_LIVE_MATE_WP\"] = 9] = \"KUAISHOU_LIVE_MATE_WP\";\r\n Product[Product[\"WECHAT_SMALL_APP\"] = 12] = \"WECHAT_SMALL_APP\";\r\n Product[Product[\"NEBULA\"] = 13] = \"NEBULA\";\r\n Product[Product[\"KWAI_GAME_LIVE_PLUGIN\"] = 14] = \"KWAI_GAME_LIVE_PLUGIN\";\r\n Product[Product[\"ACFUN_GAME_CENTER\"] = 15] = \"ACFUN_GAME_CENTER\";\r\n Product[Product[\"GAME_DIANDIANXIAO\"] = 16] = \"GAME_DIANDIANXIAO\";\r\n Product[Product[\"THANOS\"] = 17] = \"THANOS\";\r\n Product[Product[\"UVIDEO\"] = 18] = \"UVIDEO\";\r\n Product[Product[\"GAME_ZONE\"] = 19] = \"GAME_ZONE\";\r\n Product[Product[\"KWAI_GO_BRAZIL\"] = 20] = \"KWAI_GO_BRAZIL\";\r\n Product[Product[\"KWAI_GO_COMICS\"] = 21] = \"KWAI_GO_COMICS\";\r\n Product[Product[\"KUAISHOU_ANTMAN\"] = 22] = \"KUAISHOU_ANTMAN\";\r\n Product[Product[\"UVIDEO_V2\"] = 23] = \"UVIDEO_V2\";\r\n Product[Product[\"KWAI_BULLDOG\"] = 24] = \"KWAI_BULLDOG\";\r\n Product[Product[\"LOLITA_GLOBAL\"] = 25] = \"LOLITA_GLOBAL\";\r\n Product[Product[\"KUAISHOU_NEBULA_ANTMAN\"] = 26] = \"KUAISHOU_NEBULA_ANTMAN\";\r\n Product[Product[\"ZIKZAK\"] = 27] = \"ZIKZAK\";\r\n Product[Product[\"KS_TV\"] = 28] = \"KS_TV\";\r\n Product[Product[\"UVIDEO_LITE\"] = 29] = \"UVIDEO_LITE\";\r\n Product[Product[\"KUAISHOU_VISION\"] = 30] = \"KUAISHOU_VISION\";\r\n })(ClientCommon.Product || (ClientCommon.Product = {}));\r\n (function (TimePackageSyncStatus) {\r\n TimePackageSyncStatus[TimePackageSyncStatus[\"UNSYNCHROIZED\"] = 0] = \"UNSYNCHROIZED\";\r\n TimePackageSyncStatus[TimePackageSyncStatus[\"SYNCHROIZED\"] = 1] = \"SYNCHROIZED\";\r\n })(ClientCommon.TimePackageSyncStatus || (ClientCommon.TimePackageSyncStatus = {}));\r\n})(ClientCommon || (ClientCommon = {}));\n\nvar _yoda;\r\nvar yodaNamespace = 'tool';\r\nvar yodaResolve = null;\r\nvar yodaAlready = false;\r\n/**\r\n * 检查 yoda 环境\r\n */\r\nvar checkYoda = function (yoda) {\r\n if (yoda === void 0) { yoda = _yoda || typeof window !== 'undefined' && window.yoda; }\r\n if (_yoda && _yoda.isInYoda)\r\n return _yoda;\r\n if (yoda && yoda.isInYoda) {\r\n _yoda = yoda;\r\n return _yoda;\r\n }\r\n return null;\r\n};\r\n/**\r\n * 初始化 yoda\r\n * @param namespace\r\n */\r\nvar initYoda = function () { return __awaiter(void 0, void 0, void 0, function () {\r\n var err_1;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n if (!_yoda || yodaAlready)\r\n return [2 /*return*/];\r\n _a.label = 1;\r\n case 1:\r\n _a.trys.push([1, 6, , 7]);\r\n if (!yodaResolve) return [3 /*break*/, 3];\r\n return [4 /*yield*/, yodaResolve];\r\n case 2:\r\n _a.sent();\r\n return [3 /*break*/, 5];\r\n case 3:\r\n yodaResolve = _yoda.ready();\r\n return [4 /*yield*/, yodaResolve];\r\n case 4:\r\n _a.sent();\r\n _yoda.register({\r\n namespace: 'webview',\r\n name: 'getPageLoadData',\r\n });\r\n _yoda.register({\r\n namespace: 'tool',\r\n name: 'setClientLog',\r\n });\r\n _yoda.register({\r\n namespace: 'tool',\r\n name: 'sendRadarLog',\r\n });\r\n _yoda.register({\r\n namespace: 'tool',\r\n name: 'getKswitchData',\r\n });\r\n _a.label = 5;\r\n case 5:\r\n yodaResolve = null;\r\n yodaAlready = true;\r\n return [3 /*break*/, 7];\r\n case 6:\r\n err_1 = _a.sent();\r\n console.log('initYoda err', err_1);\r\n return [3 /*break*/, 7];\r\n case 7: return [2 /*return*/];\r\n }\r\n });\r\n}); };\r\n/**\r\n * 判断是否支持桥接接口\r\n * @param name\r\n * @param namespace\r\n */\r\nvar isSupportBridge = function (name, namespace) {\r\n if (name === void 0) { name = 'setClientLog'; }\r\n if (namespace === void 0) { namespace = yodaNamespace; }\r\n return __awaiter(void 0, void 0, void 0, function () {\r\n var isSupport, canUse;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n isSupport = false;\r\n _a.label = 1;\r\n case 1:\r\n _a.trys.push([1, 6, , 7]);\r\n if (!_yoda) return [3 /*break*/, 5];\r\n if (!!yodaAlready) return [3 /*break*/, 3];\r\n return [4 /*yield*/, initYoda()];\r\n case 2:\r\n _a.sent();\r\n _a.label = 3;\r\n case 3: return [4 /*yield*/, _yoda.tool.canIUse({\r\n namespace: namespace,\r\n name: name,\r\n })];\r\n case 4:\r\n canUse = (_a.sent()).canUse;\r\n isSupport = canUse;\r\n _a.label = 5;\r\n case 5: return [3 /*break*/, 7];\r\n case 6:\r\n _a.sent();\r\n return [3 /*break*/, 7];\r\n case 7: return [2 /*return*/, isSupport];\r\n }\r\n });\r\n });\r\n};\r\n/**\r\n * 获取 webview 信息\r\n */\r\nvar getWebviewLoadPerf = function (options) {\r\n if (options === void 0) { options = {}; }\r\n return __awaiter(void 0, void 0, void 0, function () {\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n if (!_yoda)\r\n return [2 /*return*/];\r\n _a.label = 1;\r\n case 1:\r\n _a.trys.push([1, 5, , 6]);\r\n if (!!yodaAlready) return [3 /*break*/, 3];\r\n return [4 /*yield*/, initYoda()];\r\n case 2:\r\n _a.sent();\r\n _a.label = 3;\r\n case 3: return [4 /*yield*/, _yoda.webview['getPageLoadData'](options)];\r\n case 4: return [2 /*return*/, _a.sent()];\r\n case 5:\r\n _a.sent();\r\n return [3 /*break*/, 6];\r\n case 6: return [2 /*return*/];\r\n }\r\n });\r\n });\r\n};\r\n/**\r\n * 发送雷达事件\r\n */\r\nvar sendRadarLog = function (options) {\r\n if (options === void 0) { options = {}; }\r\n return __awaiter(void 0, void 0, void 0, function () {\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n if (!_yoda)\r\n return [2 /*return*/];\r\n _a.label = 1;\r\n case 1:\r\n _a.trys.push([1, 5, , 6]);\r\n if (!!yodaAlready) return [3 /*break*/, 3];\r\n return [4 /*yield*/, initYoda()];\r\n case 2:\r\n _a.sent();\r\n _a.label = 3;\r\n case 3: return [4 /*yield*/, _yoda.tool['sendRadarLog'](options)];\r\n case 4: return [2 /*return*/, _a.sent()];\r\n case 5:\r\n _a.sent();\r\n return [3 /*break*/, 6];\r\n case 6: return [2 /*return*/];\r\n }\r\n });\r\n });\r\n};\r\n/**\r\n * 发送业务事件\r\n * @param type\r\n * @param data\r\n */\r\nvar setClientLog = function (type, data) { return __awaiter(void 0, void 0, void 0, function () {\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n if (!_yoda)\r\n return [2 /*return*/];\r\n _a.label = 1;\r\n case 1:\r\n _a.trys.push([1, 5, , 6]);\r\n if (!!yodaAlready) return [3 /*break*/, 3];\r\n return [4 /*yield*/, initYoda()];\r\n case 2:\r\n _a.sent();\r\n _a.label = 3;\r\n case 3: return [4 /*yield*/, _yoda.tool['setClientLog']({\r\n type: type,\r\n data: data\r\n })];\r\n case 4: return [2 /*return*/, _a.sent()];\r\n case 5:\r\n _a.sent();\r\n return [3 /*break*/, 6];\r\n case 6: return [2 /*return*/];\r\n }\r\n });\r\n}); };\r\n/**\r\n * 采样配置:\r\n * undefined 表示还未获取到配置;\r\n * null 表示没有配置\r\n */\r\nvar KSwitchSampling = undefined;\r\n/**\r\n * 获取 Kswitch 采样配置\r\n */\r\nvar getKSwitchSampling = function () { return __awaiter(void 0, void 0, void 0, function () {\r\n var canUse, res, kswitchData, data, host, pathname;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n if (!_yoda) {\r\n KSwitchSampling = null;\r\n return [2 /*return*/, KSwitchSampling];\r\n }\r\n if (typeof KSwitchSampling !== 'undefined')\r\n return [2 /*return*/, KSwitchSampling];\r\n _a.label = 1;\r\n case 1:\r\n _a.trys.push([1, 6, , 7]);\r\n if (!!yodaAlready) return [3 /*break*/, 3];\r\n return [4 /*yield*/, initYoda()];\r\n case 2:\r\n _a.sent();\r\n _a.label = 3;\r\n case 3: return [4 /*yield*/, _yoda.tool.canIUse({\r\n namespace: 'tool',\r\n name: 'getKswitchData'\r\n })];\r\n case 4:\r\n canUse = (_a.sent()).canUse;\r\n if (!canUse) {\r\n KSwitchSampling = null;\r\n return [2 /*return*/, KSwitchSampling];\r\n }\r\n return [4 /*yield*/, _yoda.tool.getKswitchData({\r\n keys: [\r\n {\r\n key: 'webloggerSampling'\r\n }\r\n ]\r\n })];\r\n case 5:\r\n res = _a.sent();\r\n if (res && res.data) {\r\n kswitchData = res.data[0];\r\n if (typeof kswitchData === 'string') {\r\n kswitchData = JSON.parse(kswitchData);\r\n }\r\n data = kswitchData ? kswitchData.value : null;\r\n if (data) {\r\n if (typeof data === 'string') {\r\n data = JSON.parse(data);\r\n }\r\n host = typeof location !== 'undefined' ? location.host : '*';\r\n for (pathname in data) {\r\n if (pathname === '*' || pathname.indexOf(host) !== -1) {\r\n if (!KSwitchSampling)\r\n KSwitchSampling = {};\r\n KSwitchSampling[pathname] = data[pathname];\r\n }\r\n }\r\n if (KSwitchSampling)\r\n return [2 /*return*/, KSwitchSampling];\r\n }\r\n }\r\n return [3 /*break*/, 7];\r\n case 6:\r\n _a.sent();\r\n return [3 /*break*/, 7];\r\n case 7:\r\n KSwitchSampling = null;\r\n return [2 /*return*/, KSwitchSampling];\r\n }\r\n });\r\n}); };\r\nvar deviceInfo = null;\r\nvar getDeviceInfo = function () { return __awaiter(void 0, void 0, void 0, function () {\r\n var enable;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n if (!_yoda)\r\n return [2 /*return*/, null];\r\n return [4 /*yield*/, isSupportBridge('getDeviceInfo', 'system')];\r\n case 1:\r\n enable = _a.sent();\r\n if (!enable) return [3 /*break*/, 5];\r\n _a.label = 2;\r\n case 2:\r\n _a.trys.push([2, 4, , 5]);\r\n return [4 /*yield*/, _yoda.system.getDeviceInfo()];\r\n case 3:\r\n deviceInfo = _a.sent();\r\n return [2 /*return*/, deviceInfo];\r\n case 4:\r\n _a.sent();\r\n return [2 /*return*/, null];\r\n case 5: return [2 /*return*/];\r\n }\r\n });\r\n}); };\r\nvar appInfo = null;\r\nvar getAppInfo = function () { return __awaiter(void 0, void 0, void 0, function () {\r\n var enable;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n if (!_yoda)\r\n return [2 /*return*/, null];\r\n return [4 /*yield*/, isSupportBridge('getAppInfo', 'system')];\r\n case 1:\r\n enable = _a.sent();\r\n if (!enable) return [3 /*break*/, 5];\r\n _a.label = 2;\r\n case 2:\r\n _a.trys.push([2, 4, , 5]);\r\n return [4 /*yield*/, _yoda.system.getAppInfo()];\r\n case 3:\r\n appInfo = _a.sent();\r\n return [2 /*return*/, appInfo];\r\n case 4:\r\n _a.sent();\r\n return [2 /*return*/, null];\r\n case 5: return [2 /*return*/];\r\n }\r\n });\r\n}); };\r\nvar yodaUtils = {\r\n isSupportBridge: isSupportBridge,\r\n getWebviewLoadPerf: getWebviewLoadPerf,\r\n sendRadarLog: sendRadarLog,\r\n setClientLog: setClientLog,\r\n yodaAlready: yodaAlready,\r\n};\n\nfunction network() {\r\n try {\r\n var connection = navigator.connection || navigator.mozConnection || navigator.webkitConnection;\r\n if (!connection) {\r\n // 不支持connection的全部为UNKNOWN_NETWORK\r\n return networkType.unknown;\r\n }\r\n var type = connection.type;\r\n var effectiveType = connection.effectiveType;\r\n return networkType[type] || networkType[effectiveType] || networkType.unknown;\r\n }\r\n catch (err) {\r\n return networkType.unknown;\r\n }\r\n}\r\nfunction platform() {\r\n try {\r\n var uaInfo = getUAInfo();\r\n if (!uaInfo.os.name) {\r\n return Base.Platform.UNKNOWN_PLATFORM;\r\n }\r\n var inApp = isInApp();\r\n if (uaInfo.os.name === 'Android') {\r\n return inApp\r\n ? Base.Platform.ANDROID_PHONE_H5\r\n : Base.Platform.OUTSIDE_ANDROID_H5;\r\n }\r\n if (uaInfo.os.name === 'iOS') {\r\n return inApp\r\n ? Base.Platform.IPHONE_H5\r\n : Base.Platform.OUTSIDE_IOS_H5;\r\n }\r\n return Base.Platform.PC_WEB;\r\n }\r\n catch (err) {\r\n return Base.Platform.UNKNOWN_PLATFORM;\r\n }\r\n}\r\nfunction container() {\r\n if (isReactNative()) {\r\n return Base.Container.REACT_NATIVE;\r\n }\r\n if (platform() === Base.Platform.PC_WEB) {\r\n return Base.Container.WEB;\r\n }\r\n return Base.Container.H5;\r\n}\r\nfunction mergeOptions(target, options) {\r\n if (!options) {\r\n return;\r\n }\r\n Object.keys(options).forEach(function (key) {\r\n var value = options[key];\r\n var isNeedMerge = key !== 'h5_extra_attr';\r\n if (typeof value === 'object' && isNeedMerge && target[key] !== undefined) {\r\n mergeOptions(target[key], value);\r\n }\r\n else if (value) {\r\n target[key] = value;\r\n }\r\n });\r\n}\r\nvar getOSVersion = function () {\r\n try {\r\n return getUAInfo().os.version || 'unknown';\r\n }\r\n catch (err) {\r\n return 'unknown';\r\n }\r\n};\r\nvar getDefaultUserId = function () { return getCookie('userId') || getCookie('userName') || (GlobalConfig.isV2 ? '0' : ''); };\r\nfunction transformCommonPackage(base, config) {\r\n var initPackage = {\r\n identity_package: {},\r\n network_package: {},\r\n app_package: {},\r\n experiment: [],\r\n service_name: '',\r\n safety_id: '',\r\n };\r\n if (GlobalConfig.isV2) {\r\n if (!base.product) {\r\n base.product = ClientCommon.Product[base.product_name || getCookie('kpn')] || 1;\r\n }\r\n delete base.product_name;\r\n }\r\n else if (!GlobalConfig.isBridge) {\r\n if (!base.product_name) {\r\n base.product_name = getCookie('kpn') || 'KUAISHOU';\r\n }\r\n delete base.product;\r\n }\r\n if (!base.user_id) {\r\n base.user_id = getDefaultUserId();\r\n }\r\n if (!base.device_id) {\r\n base.device_id = generateDID();\r\n }\r\n if (!base.global_id) {\r\n base.global_id = isInApp() && getCookie('egid') || '';\r\n }\r\n for (var _i = 0, initPackageKeys_1 = initPackageKeys; _i < initPackageKeys_1.length; _i++) {\r\n var _a = initPackageKeys_1[_i], keys = _a.keys, validator = _a.validator, type = _a.type;\r\n var baseKey = keys[0], subKey = keys[1];\r\n var baseValue = base[subKey || baseKey];\r\n if (!subKey) {\r\n initPackage[baseKey] = base[baseKey];\r\n }\r\n else {\r\n initPackage[baseKey][subKey] = base[subKey];\r\n }\r\n if (typeof baseValue !== 'undefined' && !validator(baseValue)) {\r\n console.error(\"There is an error init value on '\" + (subKey || baseKey) + \"', \", \"the type should be '\" + type + \"', \", \"but your type is '\" + typeof baseValue + \"'\");\r\n }\r\n }\r\n if (base.network_type) {\r\n initPackage.network_package.type =\r\n networkType[base.network_type] ||\r\n networkType.unknown;\r\n }\r\n else {\r\n delete initPackage.network_package;\r\n }\r\n return new CommonPackage(initPackage, config);\r\n}\r\nvar CommonPackage = /** @class */ (function () {\r\n function CommonPackage(options, logConfig) {\r\n this.identity_package = {\r\n device_id: '',\r\n global_id: '',\r\n user_id: '',\r\n };\r\n this.app_package = {\r\n product: undefined,\r\n language: navigator.language,\r\n platform: platform(),\r\n container: container(),\r\n package_name: '',\r\n product_name: undefined,\r\n version_name: getCookie('appver', undefined, true) || '',\r\n channel: '',\r\n version_code: 0,\r\n };\r\n this.device_package = {\r\n os_version: getOSVersion(),\r\n model: getModel(),\r\n ua: navigator.userAgent,\r\n };\r\n this.need_encrypt = false;\r\n this.network_package = {\r\n type: network(),\r\n };\r\n this.sdk_version = GlobalConfig.isV2 ? undefined : '3.8.21';\r\n mergeOptions(this, options);\r\n this.checkMustProps();\r\n if (this.app_package.version_name) {\r\n var lastDotIndex = this.app_package.version_name.lastIndexOf('.');\r\n this.app_package.version_code = +this.app_package.version_name.slice(lastDotIndex + 1) || 0;\r\n }\r\n // TODO: 这块参数有些混乱,options 和 logConfig 都可能传 h5_extra_attr 和 product_name 进来\r\n var mixinOptions = _assign(_assign({}, options), logConfig);\r\n this.h5_extra_attr = _assign(_assign(_assign({}, CommonPackage.DefaultH5ExtraAttr), mixinOptions.h5_extra_attr), { app_version_name: this.app_package.version_name, product_name: mixinOptions.product_name });\r\n }\r\n /**\r\n * 检查必填参数\r\n */\r\n CommonPackage.prototype.checkMustProps = function () {\r\n if (GlobalConfig.isV2) {\r\n if (typeof this.app_package.product !== 'number') {\r\n console.error('请设置有效的 product 值!');\r\n }\r\n }\r\n else if (!GlobalConfig.isBridge) {\r\n if (typeof this.app_package.product_name !== 'string') {\r\n console.error('请设置有效的 product_name 值!');\r\n }\r\n }\r\n };\r\n CommonPackage.prototype.setAdditionalSeqIdPackage = function (eventType) {\r\n this.additional_seq_id_package = {\r\n channel: Base.AdditionalSeqIdPackageChannel.NORMAL,\r\n channel_seq_id: getChannelIncrementId('NORMAL'),\r\n custom_type: eventType,\r\n custom_seq_id: getV2EventIncrementId(eventType),\r\n };\r\n };\r\n // h5 id 自增,用在 Bridge 模式下验证 Bridge 丢失率\r\n CommonPackage.prototype.increaseH5SeqId = function (isCustom) {\r\n this.setH5ClientTimestamp();\r\n this.h5_extra_attr.seq_id = isCustom ? getBridgeCustomIncrementId() : getBridgeNormalIncrementId();\r\n };\r\n // 在 bridge 模式下生成时间戳\r\n CommonPackage.prototype.setH5ClientTimestamp = function () {\r\n this.h5_extra_attr.client_timestamp = new Date().valueOf();\r\n };\r\n // HTTP 自增 id,每次发起请求连续递增,验证 http 请求丢失\r\n CommonPackage.prototype.increaseHTTPSeqId = function () {\r\n this.setH5ClientTimestamp();\r\n this.h5_extra_attr.http_seq_id = getHttpIncrementId();\r\n };\r\n CommonPackage.prototype.setChannel = function () {\r\n // for radar_channel\r\n // parseQueryString 居然需要自己去掉问号。。\r\n if (this.app_package.channel) {\r\n this.h5_extra_attr.channel = this.app_package.channel;\r\n return;\r\n }\r\n var search = window && window.location && window.location.search || '';\r\n var queryStringRes = parseQueryString(search.slice(1));\r\n var queryChannel = queryStringRes ? queryStringRes.channel : '';\r\n this.h5_extra_attr.channel = queryChannel || getCookie('channel') || '';\r\n };\r\n CommonPackage.prototype.getVersionName = function () {\r\n return this.app_package.version_name;\r\n };\r\n CommonPackage.prototype.getChannel = function () {\r\n return this.h5_extra_attr.channel;\r\n };\r\n CommonPackage.prototype.toJSON = function () {\r\n if (!this.identity_package.user_id) {\r\n this.identity_package.user_id = getDefaultUserId();\r\n }\r\n var json = _assign(_assign({}, cloneDeep(this)), { \r\n // 埋点上报时,h5_extra_attr 要处理成字符串\r\n // @ts-ignore\r\n h5_extra_attr: JSON.stringify(this.h5_extra_attr) });\r\n return json;\r\n };\r\n // 设置 bridge 信息\r\n CommonPackage.prototype.setBridgeInfo = function (info) {\r\n if (info) {\r\n this.h5_extra_attr.bridge_info = info;\r\n }\r\n };\r\n CommonPackage.prototype.getH5ExtraAttr = function () {\r\n return this.h5_extra_attr;\r\n };\r\n CommonPackage.prototype.update = function (options) {\r\n var _this = this;\r\n if (typeof options !== 'object')\r\n return;\r\n var commonPackage = this;\r\n Object.keys(options).forEach(function (key) {\r\n var newValue = options[key];\r\n // hasOwnProperty 只检测属性\r\n if (_this.hasOwnProperty(key)) {\r\n // 对于 newValue 是对象\r\n if (typeof commonPackage[key] === 'object' && typeof newValue === 'object'\r\n && !(Array.isArray(commonPackage[key]) && newValue)) {\r\n newValue = _assign(_assign({}, commonPackage[key]), newValue);\r\n }\r\n commonPackage[key] = newValue;\r\n }\r\n else {\r\n var innerPackageKeys = ['identity_package', 'app_package', 'device_package'];\r\n for (var _i = 0, innerPackageKeys_1 = innerPackageKeys; _i < innerPackageKeys_1.length; _i++) {\r\n var innerKey = innerPackageKeys_1[_i];\r\n if (key in commonPackage[innerKey]) {\r\n commonPackage[innerKey][key] = newValue;\r\n break;\r\n }\r\n }\r\n }\r\n });\r\n };\r\n CommonPackage.prototype.initYodaDeviceInfo = function () {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var info;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0: return [4 /*yield*/, getDeviceInfo()];\r\n case 1:\r\n info = _a.sent();\r\n if (info && info.mod) {\r\n this.device_package.model = info.mod;\r\n }\r\n return [2 /*return*/];\r\n }\r\n });\r\n });\r\n };\r\n CommonPackage.prototype.initYodaAppInfo = function () {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var info;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0: return [4 /*yield*/, getAppInfo()];\r\n case 1:\r\n info = _a.sent();\r\n if (info) {\r\n info.did && (this.identity_package.device_id = info.did);\r\n info.userId && !this.identity_package.user_id && (this.identity_package.user_id = info.userId);\r\n info.appver && (this.app_package.version_name = info.appver);\r\n }\r\n return [2 /*return*/];\r\n }\r\n });\r\n });\r\n };\r\n // 默认 H5 附加信息\r\n CommonPackage.DefaultH5ExtraAttr = {\r\n host_product: getDefaultKpn(),\r\n app_version_name: getCookie('appver', undefined, true) || '',\r\n resolution: getResolution(),\r\n domain: window && window.location && window.location.origin || '',\r\n sdk_name: 'webLogger',\r\n sdk_version: '3.8.21',\r\n };\r\n return CommonPackage;\r\n}());\n\n/**\r\n * @file iframe发送log\r\n *\r\n * @author 天翔Skyline(skyline0705@gmail.com)\r\n * May 14, 2019\r\n */\r\nvar commonHideStyle = [\r\n 'display: none;',\r\n 'position: absolute;',\r\n 'top: -9999px',\r\n 'left: -9999px',\r\n].join('');\r\nfunction createIframe(target) {\r\n var iframe = document.createElement('iframe');\r\n document.body.appendChild(iframe);\r\n iframe.contentWindow.name = target;\r\n iframe.style.cssText = commonHideStyle;\r\n return iframe;\r\n}\r\nfunction createForm(target, url) {\r\n var form = document.createElement('form');\r\n document.body.appendChild(form);\r\n form.target = target;\r\n form.enctype = 'multipart/form-data';\r\n form.method = 'POST';\r\n form.action = url;\r\n form.style.cssText = commonHideStyle;\r\n return form;\r\n}\r\nfunction appendDataToForm(form, data) {\r\n for (var key in data) {\r\n if (data.hasOwnProperty(key)) {\r\n var input = document.createElement('input');\r\n input.name = key;\r\n input.value = JSON.stringify(data[key]);\r\n form.appendChild(input);\r\n }\r\n }\r\n}\r\nfunction sendData$1(_a, callback) {\r\n var url = _a.url, data = _a.data;\r\n var target = \"iframe_\" + nanoId();\r\n var iframe = createIframe(target);\r\n var form = createForm(target, url);\r\n appendDataToForm(form, data);\r\n try {\r\n form.submit();\r\n }\r\n catch (e) {\r\n return callback && callback(e);\r\n }\r\n iframe.onload = function () {\r\n document.body.removeChild(iframe);\r\n document.body.removeChild(form);\r\n iframe = null;\r\n form = null;\r\n };\r\n callback && callback();\r\n}\n\nfunction send$1(_a, callback) {\r\n var url = _a.url, data = _a.data, timeout = _a.timeout;\r\n var xhr = new XMLHttpRequest();\r\n // async 同步情况会报错,而且影响性能,取消使用同步\r\n xhr.open('POST', url);\r\n if (timeout) {\r\n xhr.timeout = timeout;\r\n }\r\n xhr.onload = function () {\r\n var err;\r\n if (xhr.status < 200 || (xhr.status >= 300 && xhr.status !== 304)) {\r\n err = xhr.response || xhr.status || 'unknonw error';\r\n }\r\n callback && callback(err);\r\n };\r\n xhr.ontimeout = xhr.onerror = function (e) {\r\n callback && callback(e);\r\n };\r\n xhr.send(data);\r\n}\n\nvar enableBeacon = false;\r\n(function () {\r\n try {\r\n var uaInfo = getUAInfo();\r\n var forceUseBeacon = uaInfo.browser.name === 'Chrome'\r\n && +(uaInfo.browser.major || 0) > 77;\r\n enableBeacon = forceUseBeacon && typeof window !== 'undefined' && typeof window.navigator !== 'undefined' && typeof window.navigator.sendBeacon === 'function';\r\n }\r\n catch (err) { }\r\n})();\r\nfunction send(_a) {\r\n var url = _a.url, data = _a.data;\r\n if (!enableBeacon)\r\n return false;\r\n // xhook 如果改写了 FormData\r\n if (typeof data === 'object' && data.fd) {\r\n data = data.fd;\r\n }\r\n return navigator.sendBeacon(url, data);\r\n}\n\n/**\r\n * @file IO工具函数\r\n *\r\n * @author 天翔Skyline(skyline0705@gmail.com)\r\n * May 15, 2019\r\n */\r\nfunction transToFormData(data) {\r\n var formData = new FormData();\r\n for (var key in data) {\r\n if (data.hasOwnProperty(key)) {\r\n formData.append(key, JSON.stringify(data[key]));\r\n }\r\n }\r\n return formData;\r\n}\n\nfunction sendData(_a, callback) {\r\n var url = _a.url, data = _a.data, timeout = _a.timeout, format = _a.format;\r\n // 使用 iframe 发送\r\n if (needCompatible()) {\r\n return sendData$1({ url: url, data: data }, callback);\r\n }\r\n data = format && format === 'string' ? JSON.stringify(data) : transToFormData(data);\r\n // 优先走 sendBeacon,如果成功把数据添加到 beacon 通道,则认为发送成功\r\n if (send({ url: url, data: data })) {\r\n return callback && callback();\r\n }\r\n send$1({ url: url, data: data, timeout: timeout }, callback);\r\n}\n\n// 测试环境 url\r\nvar devHost = 'https://webapi.test.gifshow.com/';\r\nvar dataTrackHost = 'https://data-track.corp.kuaishou.com';\r\nvar testHost = dataTrackHost + '/';\r\nvar isDataTrack = function (host) { return host.indexOf('data-track.corp') !== -1; };\r\nvar xhrGet = function (url) {\r\n try {\r\n var xhr = new XMLHttpRequest();\r\n xhr.open('GET', url);\r\n xhr.send();\r\n }\r\n catch (err) { }\r\n};\r\nvar getReportUrl = function (viewHost, reportHost, sessionId) {\r\n if (sessionId === void 0) { sessionId = generateDID(); }\r\n var loggerUrl = isDataTrack(reportHost) ? dataTrackHost + \"/v3/#/logger/index?sessionId=\" + sessionId : viewHost + \"/#/home?sessionId=\" + sessionId;\r\n console.log(\"%c\\u65E5\\u5FD7\\u6293\\u5305\\u6821\\u9A8C: %c\" + loggerUrl, 'color:#1abf89;font-size:1.4em;line-height:2.4em;', 'font-size:1.2em;');\r\n return reportHost + \"/\" + sessionId + \"/\";\r\n};\r\n/**\r\n * logger 平台上报 url\r\n */\r\nvar getLoggerReportUrl = function () {\r\n var did = generateDID();\r\n xhrGet(dataTrackHost + \"/rest/\" + did);\r\n return getReportUrl('', dataTrackHost + \"/rest\", did);\r\n};\r\n/**\r\n * 端内环境根据cookie值切换发送地址\r\n */\r\nvar getCookieReportUrl = function () {\r\n try {\r\n var webloggerSwitch = getCookie('weblogger_switch') ||\r\n typeof sessionStorage !== 'undefined' && sessionStorage.getItem('weblogger_switch');\r\n if (!webloggerSwitch)\r\n return;\r\n var _a = JSON.parse(webloggerSwitch), loggerSessionId = _a.loggerSessionId, reportHost = _a.reportHost, loggerHost = _a.loggerHost, handshakeApi = _a.handshakeApi;\r\n // 若cookie内存在loggerSessionId,则会自动切换发送路径到测试地址,否则返回空,代表不切换地址\r\n if (!loggerSessionId || !isDataTrack(reportHost)) {\r\n return '';\r\n }\r\n xhrGet(handshakeApi || reportHost + \"/\" + loggerSessionId);\r\n return getReportUrl(loggerHost, reportHost, loggerSessionId);\r\n }\r\n catch (err) {\r\n return '';\r\n }\r\n};\r\n/**\r\n * 端外H5 or pc页面根据当前的url参数切换发送地址\r\n */\r\nvar getWebPageReportUrl = function (url) {\r\n if (url === void 0) { url = location.href; }\r\n var queryIndex = url.lastIndexOf('?');\r\n if (queryIndex === -1) {\r\n return '';\r\n }\r\n var queryString = url.slice(queryIndex + 1);\r\n var webloggerSwitch = parseQueryString(queryString).webloggerSwitch;\r\n if (!webloggerSwitch) {\r\n return '';\r\n }\r\n try {\r\n var data = decodeURIComponent(webloggerSwitch);\r\n var _a = JSON.parse(data), loggerSessionId = _a.loggerSessionId, reportHost = _a.reportHost, loggerHost = _a.loggerHost, handshakeApi = _a.handshakeApi;\r\n if (!loggerSessionId || !isDataTrack(reportHost)) {\r\n return '';\r\n }\r\n // 存到 sessionStorage 中使同域名页面都可以调试\r\n if (typeof sessionStorage !== 'undefined') {\r\n sessionStorage.setItem('weblogger_switch', data);\r\n }\r\n xhrGet(handshakeApi || reportHost + \"/\" + loggerSessionId);\r\n return getReportUrl(loggerHost, reportHost, loggerSessionId);\r\n }\r\n catch (err) {\r\n return '';\r\n }\r\n};\r\n// 不同环境的接口\r\nvar Hosts = {\r\n v2: {\r\n // 正式环境随机域名分流\r\n production: ['https://wlog.ksapisrv.com/', 'https://wlog.gifshow.com/'][Math.round(Math.random())],\r\n development: devHost,\r\n test: testHost\r\n },\r\n v3: {\r\n production: 'https://log-sdk.ksapisrv.com/',\r\n development: devHost,\r\n test: testHost\r\n }\r\n};\r\nvar Apis = {\r\n v2: 'rest/kd/log/collect?_json=1&biz=',\r\n v3: 'rest/wd/common/log/collect/misc2',\r\n // 雷达都上报到 v3\r\n radar: 'rest/wd/common/log/collect/radar'\r\n};\r\nvar getUrl = function (env, radar, proto) {\r\n if (env === void 0) { env = 'production'; }\r\n if (radar === void 0) { radar = false; }\r\n if (proto === void 0) { proto = GlobalConfig.proto; }\r\n if (['production', 'test', 'development'].indexOf(env) === -1) {\r\n return env + Apis[proto];\r\n }\r\n if (radar) {\r\n return Hosts.v3[env] + Apis.radar;\r\n }\r\n return Hosts[proto][env] + Apis[proto];\r\n};\r\n// 是否未排干日志队列\r\nvar drained = false;\r\nvar BatchLog = /** @class */ (function () {\r\n function BatchLog() {\r\n var _this = this;\r\n // 存储待发送的消息\r\n this.logQueue = [];\r\n // 存储失败或者超时的数据\r\n this.errorQueue = [];\r\n this.url = '';\r\n this.radarUrl = '';\r\n /**\r\n * 清空当前日志队列\r\n * @param callback\r\n */\r\n this.flush = function (callback) {\r\n _this.sendLogs(_this.logQueue, callback);\r\n _this.logQueue = [];\r\n };\r\n /**\r\n * 页面关闭前排干所有未发送的和发送失败的日志\r\n */\r\n this.drain = function () {\r\n _this.flush();\r\n _this.flushErrorLogs();\r\n drained = true;\r\n // 处理 beforunload 中断,实际页面未退出的情况\r\n setTimeout(function () {\r\n drained = false;\r\n }, 1000);\r\n /* 会导致重复率升高,春节后再看服务端去重后处理\r\n const logPackages = this.errorQueue.slice(0)\r\n this.errorQueue = [];\r\n this.sendingQuery = {};\r\n if (this.logQueue.length) {\r\n logPackages.unshift(this.buildLogPackage(this.logQueue));\r\n this.logQueue = [];\r\n }\r\n const unSendLogPackages: LogPackage[] = [];\r\n logPackages.forEach(logPackage => {\r\n this.beforeStore(logPackage);\r\n unSendLogPackages.push(logPackage);\r\n });\r\n // 不支持 sendBeacon 或者添加到 beacon 失败的日志则存到本地\r\n if (unSendLogPackages.length) {\r\n storeLogs(unSendLogPackages.concat(\r\n Object.keys(this.sendingQuery).map(key => this.sendingQuery[key])\r\n ));\r\n }\r\n */\r\n };\r\n }\r\n /*\r\n constructor() {\r\n this.compensateLogs();\r\n }\r\n */\r\n BatchLog.prototype.updateBase = function (commonPackage) {\r\n this.commonPackage = commonPackage;\r\n };\r\n /**\r\n * 根据配置生成上报的 url 地址\r\n */\r\n BatchLog.prototype.updateUrls = function () {\r\n var _a = this.config, env = _a.env, logger = _a.logger;\r\n var url = getCookieReportUrl() || getWebPageReportUrl();\r\n if (url) {\r\n this.radarUrl = this.url = getUrl(url);\r\n GlobalConfig.isDebug = true;\r\n }\r\n else if (logger || env === 'logger') {\r\n var loggerEnv = getLoggerReportUrl();\r\n this.url = getUrl(loggerEnv);\r\n this.radarUrl = this.url.indexOf(Apis.v2) !== -1 ? this.url.replace(Apis.v2, Apis.radar) : this.url.replace(Apis.v3, Apis.radar);\r\n GlobalConfig.isDebug = true;\r\n }\r\n else if (env && /^(https?:)?\\/\\//.test(env)) {\r\n this.url = env;\r\n this.radarUrl = this.url.replace(Apis.v3, Apis.radar);\r\n }\r\n else {\r\n this.url = getUrl(env);\r\n this.radarUrl = getUrl(env, true);\r\n }\r\n };\r\n BatchLog.prototype.init = function (config, commonPackage) {\r\n this.config = (_assign(_assign({}, this.config), config));\r\n this.updateUrls();\r\n this.updateBase(commonPackage);\r\n };\r\n /**\r\n * 之所以使用 JSON 而不是 commonPackage 对象,是因为对象可能会变化,而 JSON 则是当时的一个快照,一旦生成不会变化\r\n */\r\n BatchLog.prototype.getCommonPackageJSON = function () {\r\n if (!GlobalConfig.isV2) {\r\n this.commonPackage.increaseHTTPSeqId();\r\n delete this.commonPackage.h5_extra_attr.bridge_info;\r\n }\r\n return this.commonPackage.toJSON();\r\n };\r\n /**\r\n * 每个 logPackage 包含了所有上报所需的信息,上报地址和上报数据\r\n * @param logs\r\n * @param url\r\n */\r\n BatchLog.prototype.buildLogPackage = function (logs, url) {\r\n if (url === void 0) { url = this.url; }\r\n if (GlobalConfig.isV2) {\r\n return this.buildV2Package(logs, url);\r\n }\r\n return this.buildV3Package(logs, url);\r\n };\r\n BatchLog.prototype.buildV2Package = function (logs, url) {\r\n if (url === void 0) { url = this.url; }\r\n return {\r\n url: url,\r\n data: {\r\n log: {\r\n event: logs\r\n }\r\n },\r\n format: 'string',\r\n };\r\n };\r\n BatchLog.prototype.buildV3Package = function (logs, url) {\r\n if (url === void 0) { url = this.url; }\r\n return {\r\n url: url,\r\n data: {\r\n common: this.getCommonPackageJSON(),\r\n logs: {\r\n // 格式对应PB定义中RawBatchReportEvent\r\n event: logs,\r\n },\r\n },\r\n format: 'formdata',\r\n };\r\n };\r\n /**\r\n * 批量发送日志\r\n * @param logs\r\n * @param callback\r\n */\r\n BatchLog.prototype.sendLogs = function (logs, callback) {\r\n var _this = this;\r\n if (!logs || !logs.length) {\r\n return typeof callback === 'function' && callback();\r\n }\r\n var data = this.buildLogPackage(logs);\r\n // 如果已经调过 drained 方法应该直接走 drain 逻辑,但是在浏览器中会造成重复\r\n // if (drained) {\r\n // this.beforeStore(data);\r\n // return storeLogs([data]);\r\n // }\r\n // data.seqid = seqid ++;\r\n var callbackFn = function (error) {\r\n // if (typeof data.seqid !== 'undefined') {\r\n // delete this.sendingQuery[data.seqid];\r\n // }\r\n // 如果网络异常,日志发送失败,则将错误日志缓存,在网络恢复时清空一次错误队列\r\n if (error) {\r\n _this.errHandler(data);\r\n }\r\n else {\r\n _this.flushErrorLogs();\r\n }\r\n typeof callback === 'function' && callback(error);\r\n };\r\n // this.sendingQuery[data.seqid] = data;\r\n this.sendPackage(data, callbackFn);\r\n };\r\n /**\r\n * 直接发送一个数据包,包含 url 和 日志\r\n * @param data\r\n * @param callback\r\n */\r\n BatchLog.prototype.sendPackage = function (data, callback) {\r\n var _a = this.config, timeout = _a.timeout, sender = _a.sender;\r\n try {\r\n // 如果业务方配置了 sender\r\n if (typeof sender === 'function') {\r\n sender(data, callback);\r\n }\r\n else {\r\n sendData(_assign(_assign({}, data), { timeout: timeout }), callback);\r\n }\r\n }\r\n catch (err) {\r\n typeof callback === 'function' && callback(err);\r\n }\r\n };\r\n /**\r\n * 日志存储前标识处理\r\n * @param logPackage\r\n */\r\n /* 会导致重复率升高,春节后再看服务端去重后处理\r\n beforeStore(logPackage: LogPackage) {\r\n // 使用 puppeteer 测试 sendBeacon 页面关闭前请求成功率低,这里使用 sendBeacon 发送,同时保存本地\r\n this.sendPackage(logPackage);\r\n // 标记日志是否来自存储\r\n if ((logPackage as ClientLogV3.ReportPackage).data.common) {\r\n (logPackage as ClientLogV3.ReportPackage).data.common.h5_extra_attr.stored = true;\r\n } else {\r\n (logPackage as ClientLogV2.ReportPackage).data.log.event.forEach(log => log.common_package.h5_extra_attr.stored = true);\r\n }\r\n }\r\n */\r\n BatchLog.prototype.send = function (data, immediate, callback) {\r\n var _this = this;\r\n if (immediate === void 0) { immediate = false; }\r\n // v2 是每个 log 都有 common_package\r\n if (GlobalConfig.isV2) {\r\n // v2 log 的自增 id 是存在 common 信息中\r\n this.commonPackage.setAdditionalSeqIdPackage(data.getEventType());\r\n data.common_package = this.getCommonPackageJSON();\r\n }\r\n // 立即发送马上插入发送队列\r\n // 立即上报可以设置回调函数,延迟上报没有\r\n if (immediate || drained) {\r\n this.sendLogs([data], callback);\r\n return;\r\n }\r\n this.logQueue.push(data);\r\n // 积攒超过最大\r\n if (this.logQueue.length >= 50) {\r\n this.flush();\r\n return;\r\n }\r\n // debounce逻辑\r\n clearTimeout(this.batchWaitTimer);\r\n this.batchWaitTimer = setTimeout(function () {\r\n _this.flush();\r\n }, this.config.wait);\r\n };\r\n /**\r\n * 雷达专用上报(雷达上报接口和其他事件上报接口做了区分,用于分流统计)\r\n * @param radar\r\n */\r\n BatchLog.prototype.sendRadar = function (radar) {\r\n var radarPackage = this.buildV3Package([radar], this.radarUrl);\r\n this.sendPackage(radarPackage);\r\n };\r\n /**\r\n * 日志上报出错处理,一般为网络异常\r\n * @param logPackage\r\n */\r\n BatchLog.prototype.errHandler = function (logPackage) {\r\n var _a;\r\n if (GlobalConfig.isV2) {\r\n this.errorQueue.unshift(logPackage);\r\n return;\r\n }\r\n var data = logPackage.data;\r\n if (!data.logs.event.length)\r\n return;\r\n // http_seq_id 和 client_timestamp 不是必须的,合并时删除\r\n delete data.common.h5_extra_attr.http_seq_id;\r\n delete data.common.h5_extra_attr.client_timestamp;\r\n // 尝试合并相同 url 和 common 的请求\r\n var merged = false;\r\n for (var i = 0; i < this.errorQueue.length; i++) {\r\n var currentLog = this.errorQueue[i];\r\n if (currentLog.url === logPackage.url &&\r\n currentLog.data.logs.event.length + data.logs.event.length <= 100 &&\r\n JSON.stringify(currentLog.data.common) === JSON.stringify(data.common)) {\r\n merged = true;\r\n (_a = currentLog.data.logs.event).push.apply(_a, data.logs.event);\r\n break;\r\n }\r\n }\r\n if (!merged) {\r\n // 先进后出\r\n // 最大错误数量限制为 5\r\n if (this.errorQueue.length >= 5) {\r\n this.errorQueue.pop();\r\n }\r\n this.errorQueue.unshift(logPackage);\r\n }\r\n };\r\n // 当网络恢复时尝试一次上报\r\n BatchLog.prototype.flushErrorLogs = function () {\r\n var _this = this;\r\n this.errorQueue.forEach(function (logPackage) {\r\n _this.sendPackage(logPackage);\r\n });\r\n this.errorQueue = [];\r\n };\r\n /**\r\n * 补报本地存的日志,本地可能存在多个,根据时间顺序取出上报\r\n */\r\n /* 会导致重复率升高,春节后再看服务端去重后处理\r\n compensateLogs(secs: number = 1500) {\r\n this.compensateTimer = setTimeout(() => {\r\n const logPackages = getStoredLogs();\r\n if (!logPackages || !logPackages.length) return;\r\n logPackages.forEach((logPackage: LogPackage) => {\r\n sendData(logPackage);\r\n });\r\n }, secs);\r\n }\r\n */\r\n BatchLog.prototype.destory = function () {\r\n this.batchWaitTimer && clearTimeout(this.batchWaitTimer);\r\n this.compensateTimer && clearTimeout(this.compensateTimer);\r\n };\r\n return BatchLog;\r\n}());\n\nvar initConfig = (function (options) {\r\n var logConfig = _assign({ env: 'production', proto: 'v3', timeout: 30000, wait: 1000, maxBatchLength: 50, sampleRate: 1, \r\n // 尝试从全局中获取 yoda\r\n yoda: typeof window !== 'undefined' && window.yoda }, (options || {}));\r\n // 业务方采样配置\r\n if (options && (typeof options.sampleRateFn === 'function' || typeof options.sampleRate !== 'undefined')) {\r\n try {\r\n var sampled = options.sampleRateFn ? options.sampleRateFn() : Math.random() < Number(options.sampleRate);\r\n updateConfig('sampled', sampled);\r\n }\r\n catch (err) {\r\n updateConfig('sampled', false);\r\n }\r\n }\r\n updateConfig('proto', logConfig.proto || 'v3');\r\n return logConfig;\r\n});\n\nvar ClientEvent$1;\r\n(function (ClientEvent) {\r\n (function (ShowType) {\r\n ShowType[ShowType[\"UNKNOWN_TYPE\"] = 0] = \"UNKNOWN_TYPE\";\r\n ShowType[ShowType[\"PAGE_AUTO\"] = 10] = \"PAGE_AUTO\";\r\n ShowType[ShowType[\"PAGE_CUSTOM\"] = 11] = \"PAGE_CUSTOM\";\r\n ShowType[ShowType[\"ELEMENT\"] = 12] = \"ELEMENT\";\r\n })(ClientEvent.ShowType || (ClientEvent.ShowType = {}));\r\n (function (TaskEventType) {\r\n TaskEventType[TaskEventType[\"UNKNOWN_TYPE\"] = 0] = \"UNKNOWN_TYPE\";\r\n TaskEventType[TaskEventType[\"USER_OPERATION\"] = 1] = \"USER_OPERATION\";\r\n TaskEventType[TaskEventType[\"STAY_LENGTH_STAT_EVENT\"] = 2] = \"STAY_LENGTH_STAT_EVENT\";\r\n TaskEventType[TaskEventType[\"BACKGROUND_TASK_EVENT\"] = 3] = \"BACKGROUND_TASK_EVENT\";\r\n })(ClientEvent.TaskEventType || (ClientEvent.TaskEventType = {}));\r\n})(ClientEvent$1 || (ClientEvent$1 = {}));\n\nvar ClientEvent;\r\n(function (ClientEvent) {\r\n (function (PageCategory) {\r\n PageCategory[PageCategory[\"UNKNOWN1\"] = 0] = \"UNKNOWN1\";\r\n PageCategory[PageCategory[\"APP\"] = 1] = \"APP\";\r\n PageCategory[PageCategory[\"HOME\"] = 2] = \"HOME\";\r\n PageCategory[PageCategory[\"USER\"] = 3] = \"USER\";\r\n PageCategory[PageCategory[\"VIDEO\"] = 4] = \"VIDEO\";\r\n PageCategory[PageCategory[\"LIVE_STREAM\"] = 5] = \"LIVE_STREAM\";\r\n PageCategory[PageCategory[\"PAY\"] = 6] = \"PAY\";\r\n PageCategory[PageCategory[\"ADS\"] = 7] = \"ADS\";\r\n PageCategory[PageCategory[\"SEARCH\"] = 8] = \"SEARCH\";\r\n PageCategory[PageCategory[\"IMAGE\"] = 9] = \"IMAGE\";\r\n })(ClientEvent.PageCategory || (ClientEvent.PageCategory = {}));\r\n (function (ElementType) {\r\n ElementType[ElementType[\"UNKNOWN1\"] = 0] = \"UNKNOWN1\";\r\n ElementType[ElementType[\"BUTTON\"] = 1] = \"BUTTON\";\r\n ElementType[ElementType[\"LABEL\"] = 2] = \"LABEL\";\r\n ElementType[ElementType[\"ICON\"] = 3] = \"ICON\";\r\n ElementType[ElementType[\"IMAGE\"] = 4] = \"IMAGE\";\r\n ElementType[ElementType[\"MENU\"] = 5] = \"MENU\";\r\n ElementType[ElementType[\"LINK\"] = 6] = \"LINK\";\r\n ElementType[ElementType[\"TAB\"] = 7] = \"TAB\";\r\n ElementType[ElementType[\"INPUT_BOX\"] = 8] = \"INPUT_BOX\";\r\n ElementType[ElementType[\"OPTION_BOX\"] = 9] = \"OPTION_BOX\";\r\n ElementType[ElementType[\"NOTIFICATION\"] = 10] = \"NOTIFICATION\";\r\n ElementType[ElementType[\"CARD\"] = 11] = \"CARD\";\r\n ElementType[ElementType[\"VIEW\"] = 12] = \"VIEW\";\r\n ElementType[ElementType[\"PAGE\"] = 13] = \"PAGE\";\r\n ElementType[ElementType[\"VIDEO\"] = 14] = \"VIDEO\";\r\n ElementType[ElementType[\"CELL\"] = 15] = \"CELL\";\r\n ElementType[ElementType[\"BANNER\"] = 16] = \"BANNER\";\r\n ElementType[ElementType[\"BUBBLE\"] = 17] = \"BUBBLE\";\r\n ElementType[ElementType[\"POPUP_WINDOW\"] = 18] = \"POPUP_WINDOW\";\r\n })(ClientEvent.ElementType || (ClientEvent.ElementType = {}));\r\n (function (ShowType) {\r\n ShowType[ShowType[\"UNKNOWN2\"] = 0] = \"UNKNOWN2\";\r\n ShowType[ShowType[\"PAGE\"] = 1] = \"PAGE\";\r\n ShowType[ShowType[\"SUB_PAGE\"] = 2] = \"SUB_PAGE\";\r\n ShowType[ShowType[\"ITEM\"] = 3] = \"ITEM\";\r\n ShowType[ShowType[\"DIALOG\"] = 4] = \"DIALOG\";\r\n ShowType[ShowType[\"BANNER\"] = 5] = \"BANNER\";\r\n ShowType[ShowType[\"BUTTON\"] = 6] = \"BUTTON\";\r\n ShowType[ShowType[\"BUBBLE\"] = 7] = \"BUBBLE\";\r\n ShowType[ShowType[\"VIDEO\"] = 8] = \"VIDEO\";\r\n ShowType[ShowType[\"LIVE\"] = 9] = \"LIVE\";\r\n ShowType[ShowType[\"POPUP_WINDOW\"] = 10] = \"POPUP_WINDOW\";\r\n })(ClientEvent.ShowType || (ClientEvent.ShowType = {}));\r\n (function (ShowActionType) {\r\n ShowActionType[ShowActionType[\"UNKNOWN4\"] = 0] = \"UNKNOWN4\";\r\n ShowActionType[ShowActionType[\"CLICK\"] = 1] = \"CLICK\";\r\n ShowActionType[ShowActionType[\"LEFT_PULL\"] = 2] = \"LEFT_PULL\";\r\n ShowActionType[ShowActionType[\"RIGHT_PULL\"] = 3] = \"RIGHT_PULL\";\r\n ShowActionType[ShowActionType[\"BACK_CLICK\"] = 4] = \"BACK_CLICK\";\r\n ShowActionType[ShowActionType[\"UP_SLIDE\"] = 5] = \"UP_SLIDE\";\r\n ShowActionType[ShowActionType[\"DOWN_SLIDE\"] = 6] = \"DOWN_SLIDE\";\r\n ShowActionType[ShowActionType[\"DOWN_PULL\"] = 7] = \"DOWN_PULL\";\r\n ShowActionType[ShowActionType[\"CLICK_HOME\"] = 8] = \"CLICK_HOME\";\r\n ShowActionType[ShowActionType[\"CLICK_SYS_BACK\"] = 9] = \"CLICK_SYS_BACK\";\r\n ShowActionType[ShowActionType[\"CLICK_UPLEFT_ICON\"] = 10] = \"CLICK_UPLEFT_ICON\";\r\n ShowActionType[ShowActionType[\"COLD_LAUNCH\"] = 11] = \"COLD_LAUNCH\";\r\n })(ClientEvent.ShowActionType || (ClientEvent.ShowActionType = {}));\r\n (function (ResultPackageDomain) {\r\n ResultPackageDomain[ResultPackageDomain[\"UNKNOWN2\"] = 0] = \"UNKNOWN2\";\r\n ResultPackageDomain[ResultPackageDomain[\"HTTP\"] = 1] = \"HTTP\";\r\n ResultPackageDomain[ResultPackageDomain[\"SYSTEM\"] = 2] = \"SYSTEM\";\r\n ResultPackageDomain[ResultPackageDomain[\"KUAISHOU\"] = 3] = \"KUAISHOU\";\r\n ResultPackageDomain[ResultPackageDomain[\"KINGSOFT_LIVE_PUSH\"] = 4] = \"KINGSOFT_LIVE_PUSH\";\r\n ResultPackageDomain[ResultPackageDomain[\"KINGSOFT_LIVE_PLAY\"] = 5] = \"KINGSOFT_LIVE_PLAY\";\r\n })(ClientEvent.ResultPackageDomain || (ClientEvent.ResultPackageDomain = {}));\r\n (function (ClickType) {\r\n ClickType[ClickType[\"UNKNOWN1\"] = 0] = \"UNKNOWN1\";\r\n ClickType[ClickType[\"CLICK\"] = 1] = \"CLICK\";\r\n ClickType[ClickType[\"DOUBLE_CLICK\"] = 2] = \"DOUBLE_CLICK\";\r\n ClickType[ClickType[\"TRIPLE_CLICK\"] = 3] = \"TRIPLE_CLICK\";\r\n ClickType[ClickType[\"LONG_PRESS\"] = 4] = \"LONG_PRESS\";\r\n ClickType[ClickType[\"PULL\"] = 5] = \"PULL\";\r\n ClickType[ClickType[\"DRAG\"] = 6] = \"DRAG\";\r\n ClickType[ClickType[\"SCALE\"] = 7] = \"SCALE\";\r\n ClickType[ClickType[\"PULL_DOWN\"] = 8] = \"PULL_DOWN\";\r\n ClickType[ClickType[\"PULL_UP\"] = 9] = \"PULL_UP\";\r\n ClickType[ClickType[\"RIGHT_CLICK\"] = 10] = \"RIGHT_CLICK\";\r\n ClickType[ClickType[\"AUTO\"] = 11] = \"AUTO\";\r\n })(ClientEvent.ClickType || (ClientEvent.ClickType = {}));\r\n})(ClientEvent || (ClientEvent = {}));\n\nvar firstLoad = true;\r\nvar enterTime = new Date().valueOf();\r\nvar ShowEvent = (function (options) {\r\n var _a, _b;\r\n var type = options.type, currentUrlPackage = options.currentUrlPackage, referUrlPackage = options.referUrlPackage, _c = options.name, name = _c === void 0 ? '' : _c, action = options.action, beginTime = options.beginTime, params = options.params, contentPackage = options.contentPackage, status = options.status, actionType = options.actionType, // 这值目前似乎没传进来\r\n auto = options.auto;\r\n var commonInfo = (_a = {\r\n status: status ? (Base.ActionStatus[status] || Base.ActionStatus.UNKNOWN_STATUS) : Base.ActionStatus.SUCCESS\r\n },\r\n _a[GlobalConfig.isV2 ? 'show_type' : 'action_type'] = actionType ? (Base.ActionType[actionType] || Base.ActionType.UNKNOWN_ACTION_TYPE) : Base.ActionType.CLICK,\r\n _a.url_package = currentUrlPackage,\r\n _a.refer_url_package = referUrlPackage,\r\n _a[GlobalConfig.isV2 ? 'content_wrapper' : 'content_package'] = contentPackage,\r\n _a);\r\n if (type === 'PV') {\r\n var sub_action = Base.SubAction.PAGE_ENTER;\r\n var actionPB = Base.PageShowAction.ENTER;\r\n var first_load = firstLoad;\r\n var stay_length = 0;\r\n firstLoad = false;\r\n switch (action) {\r\n case 'leave':\r\n actionPB = Base.PageShowAction.LEAVE;\r\n sub_action = Base.SubAction.PAGE_LEAVE;\r\n stay_length = new Date().valueOf() - (beginTime || enterTime);\r\n break;\r\n case 'enter':\r\n actionPB = Base.PageShowAction.ENTER;\r\n sub_action = Base.SubAction.PAGE_ENTER;\r\n enterTime = new Date().valueOf();\r\n break;\r\n case 'visible':\r\n actionPB = Base.PageShowAction.RESUME;\r\n sub_action = Base.SubAction.PAGE_RESUME;\r\n enterTime = new Date().valueOf();\r\n break;\r\n case 'hidden':\r\n actionPB = Base.PageShowAction.LEAVE;\r\n sub_action = Base.SubAction.PAGE_PAUSE;\r\n stay_length = new Date().valueOf() - (beginTime || enterTime);\r\n break;\r\n }\r\n var showType = auto ? ClientEvent$1.ShowType.PAGE_AUTO : ClientEvent$1.ShowType.PAGE_CUSTOM;\r\n if (GlobalConfig.isV2) {\r\n first_load = undefined;\r\n showType = ClientEvent.ShowType.PAGE;\r\n }\r\n return {\r\n show_event: _assign({ action: actionPB, sub_action: sub_action, type: showType, first_load: first_load, time_cost: 0, stay_length: stay_length }, commonInfo)\r\n };\r\n }\r\n return {\r\n show_event: _assign({ action: GlobalConfig.isV2 ? 0 : Base.PageShowAction.ENTER, \r\n // @ts-ignore\r\n type: GlobalConfig.isV2 ? 0 : ClientEvent$1.ShowType.ELEMENT, sub_action: GlobalConfig.isV2 ? 0 : Base.SubAction.PAGE_ENTER, element_package: (_b = {},\r\n _b[GlobalConfig.isV2 ? 'action2' : 'action'] = name,\r\n _b.params = JSON.stringify(params),\r\n _b) }, commonInfo)\r\n };\r\n});\n\nvar TaskEvent = (function (options) {\r\n var _a, _b;\r\n var sessionId = options.sessionId, currentUrlPackage = options.currentUrlPackage, referUrlPackage = options.referUrlPackage, name = options.name, params = options.params, type = options.type, contentPackage = options.contentPackage, status = options.status, taskType = options.taskType, operationDirection = options.operationDirection;\r\n var commonInfo = (_a = {\r\n url_package: currentUrlPackage,\r\n refer_url_package: referUrlPackage,\r\n element_package: (_b = {},\r\n _b[GlobalConfig.isV2 ? 'action2' : 'action'] = name,\r\n _b.params = JSON.stringify(params),\r\n _b)\r\n },\r\n _a[GlobalConfig.isV2 ? 'content_wrapper' : 'content_package'] = contentPackage,\r\n _a);\r\n if (GlobalConfig.isV2) {\r\n // v2 click_event 是一个单独的事件类型,v3 则属于 task_event\r\n if (type === 'CLICK') {\r\n return {\r\n click_event: _assign({ type: taskType && ClientEvent.ClickType[taskType] || ClientEvent.ClickType.CLICK, direction: operationDirection && Base.Direction[operationDirection] || Base.Direction.UNKNOWN2 }, commonInfo)\r\n };\r\n }\r\n return {\r\n task_event: _assign({ action2: type, status: status && Base.TaskStatus[status] || Base.TaskStatus.UNKNOWN_STATUS }, commonInfo)\r\n };\r\n }\r\n return {\r\n task_event: _assign({ type: taskType && ClientEvent$1.TaskEventType[taskType] || ClientEvent$1.TaskEventType.USER_OPERATION, status: status && Base.TaskStatus[status] || Base.TaskStatus.UNKNOWN_STATUS, operation_type: Base.OperationType[type] || Base.OperationType.CLICK, operation_direction: operationDirection && Base.Direction[operationDirection] || Base.Direction.UNKNOWN2, session_id: sessionId }, commonInfo)\r\n };\r\n});\n\n/**\r\n * 自定义事件上报\r\n */\r\nvar CustomStatEvent = (function (options) {\r\n var name = options.name, params = options.params, currentUrlPackage = options.currentUrlPackage, referUrlPackage = options.referUrlPackage, extra = __rest(options, [\"name\", \"params\", \"currentUrlPackage\", \"referUrlPackage\"]);\r\n return {\r\n key: name,\r\n value: JSON.stringify(_assign(_assign({ url_package: currentUrlPackage, refer_url_package: referUrlPackage }, params), extra))\r\n };\r\n});\n\nvar VideoStatEvent = (function (params) {\r\n var currentUrlPackage = params.currentUrlPackage, referUrlPackage = params.referUrlPackage, options = params.options;\r\n return {\r\n video_stat_event: _assign(_assign({}, options), { url_package: currentUrlPackage, refer_url_package: referUrlPackage }),\r\n };\r\n});\n\nvar GMT = (function () {\r\n var timeZoneGMTOffset = (new Date()).getTimezoneOffset() / 60;\r\n return timeZoneGMTOffset <= 0\r\n ? \"GMT+\" + leftPad(-timeZoneGMTOffset + '', 2, '0') + \":00\"\r\n : \"GMT-\" + leftPad(timeZoneGMTOffset + '', 2, '0') + \":00\";\r\n})();\r\n// 为防止每个传出都带common_package,所以用base保留大多数信息\r\n// 部分信息放到每个消息体内维护,比如client_timestamp\r\nvar ReportEvent = /** @class */ (function () {\r\n function ReportEvent(options) {\r\n // uint64 客户端时间, Event或Stat发生时的时间, 而不是上传时的时间\r\n this.client_timestamp = new Date().valueOf();\r\n // uint64 客户端自增Id, 每新增一条日志+1, 必须是连续的, 用于校检数据完整性\r\n this.client_increment_id = 0;\r\n // string 会话id,设备冷启动或者切到后台超过5分钟再切回前台时,重新生成一个id\r\n // 端内页面不可缺省\r\n this.session_id = GlobalConfig.sessionId;\r\n // 埋点唯一主键, PB 中已不推荐使用\r\n this.event_id = '';\r\n // v2 没有 time_zone 字段\r\n if (!GlobalConfig.isV2) {\r\n this.time_zone = GMT;\r\n }\r\n Object.assign(this, options);\r\n this.genIncrementId();\r\n }\r\n // 设置自增 id,自定义事件和常规事件使用不同的 localStorage key\r\n ReportEvent.prototype.genIncrementId = function () {\r\n this.client_increment_id = this.isCustomStatEvent() ? getCustomIncrementId() : getNomalIncrementId();\r\n };\r\n // 是否是自定义事件\r\n ReportEvent.prototype.isCustomStatEvent = function () {\r\n return !!(this.stat_package && 'custom_stat_event' in this.stat_package);\r\n };\r\n // 获取埋点事件类型\r\n ReportEvent.prototype.getEventType = function () {\r\n if (this.event_package) {\r\n var _a = this.event_package, task_event = _a.task_event, show_event = _a.show_event, click_event = _a.click_event, custom_event = _a.custom_event;\r\n if (show_event)\r\n return 'showEvent';\r\n if (click_event)\r\n return 'clickEvent';\r\n if (task_event)\r\n return 'taskEvent';\r\n if (custom_event)\r\n return 'customEvent';\r\n }\r\n return 'customEvent';\r\n };\r\n return ReportEvent;\r\n}());\r\n// tslint:enable\r\nfunction logFactory(type, data) {\r\n var event_id = data.eventId, currentUrlPackage = data.currentUrlPackage, referUrlPackage = data.referUrlPackage, contentPackage = data.contentPackage, name = data.name, params = data.params;\r\n if (GlobalConfig.isV2 && type !== 'RADAR' && type !== 'CUSTOM') {\r\n if (currentUrlPackage) {\r\n // @ts-ignore\r\n currentUrlPackage.page2 = currentUrlPackage.page;\r\n delete currentUrlPackage.page;\r\n }\r\n if (referUrlPackage) {\r\n // @ts-ignore\r\n referUrlPackage.page2 = referUrlPackage.page;\r\n delete referUrlPackage.page;\r\n }\r\n }\r\n switch (type) {\r\n case 'PV':\r\n case 'SHOW':\r\n return new ReportEvent({\r\n event_package: ShowEvent({\r\n type: type,\r\n status: data.status,\r\n currentUrlPackage: currentUrlPackage,\r\n referUrlPackage: referUrlPackage,\r\n action: data.type,\r\n beginTime: data.beginTime,\r\n name: name,\r\n params: params,\r\n contentPackage: contentPackage,\r\n operationDirection: data.operationDirection,\r\n auto: data.auto,\r\n }),\r\n event_id: event_id,\r\n });\r\n case 'CUSTOM':\r\n var customData = CustomStatEvent({\r\n name: name,\r\n params: params,\r\n currentUrlPackage: currentUrlPackage,\r\n referUrlPackage: referUrlPackage,\r\n });\r\n return new ReportEvent(GlobalConfig.isV2 ?\r\n {\r\n event_package: {\r\n custom_event: customData,\r\n },\r\n event_id: event_id,\r\n }\r\n :\r\n {\r\n stat_package: {\r\n custom_stat_event: customData,\r\n },\r\n event_id: event_id,\r\n });\r\n case 'RADAR':\r\n return new ReportEvent({\r\n stat_package: {\r\n custom_stat_event: CustomStatEvent({\r\n name: name,\r\n params: params,\r\n currentUrlPackage: currentUrlPackage,\r\n referUrlPackage: referUrlPackage,\r\n }),\r\n },\r\n event_id: event_id,\r\n });\r\n case 'VIDEO':\r\n if (GlobalConfig.isV2) {\r\n return new ReportEvent({\r\n stat_package: VideoStatEvent({\r\n currentUrlPackage: currentUrlPackage,\r\n referUrlPackage: referUrlPackage,\r\n options: params.params,\r\n }),\r\n });\r\n }\r\n return new ReportEvent({\r\n event_package: TaskEvent({\r\n type: type,\r\n status: data.status,\r\n taskType: data.taskType,\r\n sessionId: GlobalConfig.sessionId,\r\n currentUrlPackage: currentUrlPackage,\r\n referUrlPackage: referUrlPackage,\r\n name: name,\r\n params: params.params,\r\n contentPackage: contentPackage,\r\n }),\r\n event_id: event_id,\r\n });\r\n default:\r\n return new ReportEvent({\r\n event_package: TaskEvent({\r\n type: type,\r\n status: data.status,\r\n taskType: data.taskType,\r\n sessionId: GlobalConfig.sessionId,\r\n currentUrlPackage: currentUrlPackage,\r\n referUrlPackage: referUrlPackage,\r\n name: name,\r\n params: params,\r\n contentPackage: contentPackage,\r\n }),\r\n event_id: event_id,\r\n });\r\n }\r\n}\n\nvar PageType;\r\n(function (PageType) {\r\n // 未知\r\n PageType[PageType[\"UNKNOWN_PAGE_TYPE\"] = 0] = \"UNKNOWN_PAGE_TYPE\";\r\n // native页面\r\n PageType[PageType[\"NATIVE\"] = 1] = \"NATIVE\";\r\n // h5页面\r\n PageType[PageType[\"H5\"] = 2] = \"H5\";\r\n // 小程序页面\r\n PageType[PageType[\"MINA\"] = 3] = \"MINA\";\r\n})(PageType || (PageType = {}));\r\n// tslint:disable variable-name\r\nvar UrlPackage = /** @class */ (function () {\r\n function UrlPackage(url, pageType, urlMap) {\r\n if (pageType === void 0) { pageType = 'web'; }\r\n // 一级页面。参考埋点需求填写即可\r\n this.page = '';\r\n // 实例的全局唯一标识,使用UUID即可\r\n this.identity = '';\r\n switch (pageType) {\r\n case 'web':\r\n this.page_type = PageType.H5;\r\n break;\r\n case 'native':\r\n this.page_type = PageType.NATIVE;\r\n break;\r\n case 'mina':\r\n this.page_type = PageType.MINA;\r\n break;\r\n default:\r\n this.page_type = PageType.UNKNOWN_PAGE_TYPE;\r\n }\r\n if (typeof url === 'string') {\r\n // TODO: 避免兼容问题,暂不处理\r\n // try {\r\n // url = window.decodeURIComponent(url);\r\n // } catch (err) {}\r\n var obj = getUrlAndQueryFromUrl(url);\r\n this.page = obj.page;\r\n this.params = obj.params;\r\n }\r\n else {\r\n this.page = (url || {}).page || '';\r\n this.params = (url || {}).params || undefined;\r\n }\r\n this.identity = uuid(this.page);\r\n if (urlMap && typeof url === 'string') {\r\n this.init(url, urlMap);\r\n }\r\n }\r\n UrlPackage.prototype.init = function (url, urlMap) {\r\n if (urlMap === void 0) { urlMap = {}; }\r\n var _a = getMappingPage({ url: url, page: this.page, params: this.params }, urlMap), page = _a.page, params = _a.params;\r\n this.update(page, params);\r\n };\r\n UrlPackage.prototype.update = function (page, params) {\r\n if (page === void 0) { page = ''; }\r\n if (page && page !== this.page) {\r\n this.page = page;\r\n this.identity = uuid(page);\r\n }\r\n if (params) {\r\n if (!this.params)\r\n this.params = {};\r\n Object.assign(this.params, params);\r\n }\r\n };\r\n UrlPackage.prototype.toJSON = function () {\r\n return {\r\n page: this.page,\r\n identity: this.identity,\r\n page_type: this.page_type,\r\n params: JSON.stringify(this.params)\r\n };\r\n };\r\n /**\r\n * 获取真实的 url 信息,并与 PV 上报的通过参数做关联\r\n */\r\n UrlPackage.prototype.getRealUrlPackage = function () {\r\n var _a = getUrlAndQueryFromUrl(location.href), page = _a.page, params = _a.params;\r\n return {\r\n page: page,\r\n params: JSON.stringify({\r\n url: location.href,\r\n page: this.page,\r\n query: params\r\n }),\r\n page_type: this.page_type,\r\n identity: this.identity\r\n };\r\n };\r\n return UrlPackage;\r\n}());\r\n// tslint:enable\n\n// 为了减少点代码体积,自己搞一个简易的EventEmitter\r\nvar EventEmitter = /** @class */ (function () {\r\n function EventEmitter() {\r\n this.events = {};\r\n }\r\n EventEmitter.prototype.on = function (eventName, callback) {\r\n if (callback && typeof callback === 'function') {\r\n this.events[eventName] = this.events[eventName] || [];\r\n this.events[eventName].push(callback);\r\n }\r\n };\r\n EventEmitter.prototype.off = function (eventName, callback) {\r\n if (!this.events[eventName]) {\r\n return;\r\n }\r\n if (callback && typeof callback === 'function') {\r\n deleteArray(this.events[eventName], callback);\r\n }\r\n if (!callback) {\r\n this.events[eventName] = [];\r\n }\r\n };\r\n EventEmitter.prototype.emit = function (eventName) {\r\n var args = [];\r\n for (var _i = 1; _i < arguments.length; _i++) {\r\n args[_i - 1] = arguments[_i];\r\n }\r\n if (!this.events[eventName]) {\r\n return;\r\n }\r\n this.events[eventName].forEach(function (callback) {\r\n callback.apply(void 0, args);\r\n });\r\n };\r\n return EventEmitter;\r\n}());\n\nvar pluginIndex = 0;\r\n// session_id 用来串联在一次打开 App 期间跳转不同页面的用户行为\r\nvar getSessionId = function () {\r\n var sessionId = '';\r\n var defaultKey = 'session_id';\r\n // const customKey = 'weblogger_session_id';\r\n sessionId = getCookie(defaultKey) || getCookie('sid'); // 端内从 cookie 中获取客户端传来的 session_id\r\n if (sessionId)\r\n return sessionId;\r\n var defaultSessionId = \"weblogger_\" + uuid('weblogger');\r\n // try {\r\n // if (typeof window !== 'undefined' && window.sessionStorage) {\r\n // sessionId = window.sessionStorage.getItem(defaultKey) // 尝试获取服务端传来的 session_id\r\n // || window.sessionStorage.getItem(customKey) || ''; // 如果都没设置,则获取 weblogger 生成的 session_id;\r\n // if (sessionId) return sessionId;\r\n // // 如果没有获取到 session_id 则生成一个,并设置到 sessionStorage 中。\r\n // window.sessionStorage.setItem(customKey, defaultSessionId);\r\n // }\r\n // } catch (err) { }\r\n return defaultSessionId;\r\n};\r\nvar isWillClosed = false;\r\nvar Weblog$1 = /** @class */ (function (_super) {\r\n __extends(Weblog, _super);\r\n /**\r\n * @param {?object} logConfig Logger初始化配置\r\n * @param {object=} options 额外配置参数\r\n * - base 公参的覆盖\r\n */\r\n function Weblog(logConfig, base) {\r\n var _this = _super.call(this) || this;\r\n _this.version = '3.8.21';\r\n _this.yoda = null;\r\n _this.SampledPageMap = {};\r\n // 核心日志发送\r\n _this.logger = new BatchLog();\r\n // 插件\r\n _this.plugins = {};\r\n _this.flush = function () {\r\n _this.logger.flush();\r\n };\r\n _this.beforeUnload = function (event) {\r\n if (isWillClosed)\r\n return;\r\n _this.logger.drain();\r\n for (var key in _this.plugins) {\r\n var plugin = _this.plugins[key];\r\n if (typeof plugin.beforeUnload === 'function') {\r\n plugin.beforeUnload(event);\r\n }\r\n }\r\n isWillClosed = true;\r\n setTimeout(function () {\r\n isWillClosed = false;\r\n }, 2000);\r\n };\r\n // 设置全局 session_id\r\n updateConfig('sessionId', base && base.session_id || getSessionId());\r\n _this.baseOption = _assign(_assign({}, BASE), base);\r\n _this.logConfig = initConfig(logConfig);\r\n _this.initUrlPackage();\r\n // 构建 common_package 信息\r\n _this.commomPackage = transformCommonPackage(_this.baseOption, _this.logConfig);\r\n _this.logger.init(_this.logConfig, _this.commomPackage);\r\n _this.initYoda();\r\n _this.addPlugins();\r\n if (typeof _this.initBuildInPlugins === 'function') {\r\n _this.initBuildInPlugins();\r\n }\r\n // 事件绑定\r\n if (typeof window !== 'undefined') {\r\n addMonitor(window, 'pagehide', _this.beforeUnload);\r\n addMonitor(window, 'beforeunload', _this.beforeUnload);\r\n }\r\n return _this;\r\n }\r\n Object.defineProperty(Weblog.prototype, \"Utils\", {\r\n get: function () {\r\n return {\r\n yoda: this.yoda && yodaUtils,\r\n cookie: cookieUtils,\r\n ua: uaUtils,\r\n io: {\r\n sendData: sendData,\r\n },\r\n };\r\n },\r\n enumerable: false,\r\n configurable: true\r\n });\r\n Object.defineProperty(Weblog.prototype, \"sessionId\", {\r\n get: function () {\r\n return GlobalConfig.sessionId;\r\n },\r\n enumerable: false,\r\n configurable: true\r\n });\r\n Weblog.prototype.initYoda = function () {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var _a;\r\n var _this = this;\r\n return __generator(this, function (_b) {\r\n switch (_b.label) {\r\n case 0:\r\n if (this.logConfig.yoda && !this.yoda) {\r\n this.yoda = checkYoda(this.logConfig.yoda);\r\n }\r\n _a = this.yoda;\r\n if (!_a) return [3 /*break*/, 2];\r\n return [4 /*yield*/, initYoda()];\r\n case 1:\r\n _a = (_b.sent());\r\n _b.label = 2;\r\n case 2:\r\n getKSwitchSampling().then(function () {\r\n // yoda 初始化后更新采样配置\r\n if (_this.currentUrlPackage)\r\n _this.currentUrlPackage.sampled = _this.getPageSampled();\r\n });\r\n this.commomPackage.initYodaDeviceInfo();\r\n this.commomPackage.initYodaAppInfo();\r\n return [2 /*return*/];\r\n }\r\n });\r\n });\r\n };\r\n // tslint:disable-next-line:no-empty\r\n Weblog.prototype.initBuildInPlugins = function (option) { };\r\n // 初始化 url 信息\r\n Weblog.prototype.initUrlPackage = function () {\r\n // 初始化 url 信息\r\n this.updateCurrentUrlPackage();\r\n var referer = this.logConfig.referer;\r\n var referUrl = '';\r\n var referType = 'web';\r\n if (referer) {\r\n referUrl = referer.value;\r\n referType = referer.type && referer.type || referType;\r\n }\r\n else if (typeof document !== 'undefined' && document.referrer) {\r\n referUrl = document.referrer;\r\n }\r\n if (referUrl) {\r\n this.referUrlPackage = new UrlPackage(referUrl, referType, this.logConfig.urlMap);\r\n }\r\n };\r\n Object.defineProperty(Weblog.prototype, \"isKSwitchSampled\", {\r\n /**\r\n * 是否已获取到 kswitch 采样配置\r\n */\r\n get: function () {\r\n return typeof KSwitchSampling !== undefined;\r\n },\r\n enumerable: false,\r\n configurable: true\r\n });\r\n /**\r\n * 获取页面级配置\r\n */\r\n Weblog.prototype.getPageSampled = function () {\r\n // 如果不是 yoda 环境,或者没从 kswitch 中获取到采样结果\r\n if (!this.yoda || !KSwitchSampling) {\r\n return typeof GlobalConfig.sampled === 'boolean' ? GlobalConfig.sampled : true;\r\n }\r\n var currentUrl = typeof location !== 'undefined' ? location.href.replace(/https?:\\/\\//, '').split('?')[0] : '*';\r\n if (typeof this.SampledPageMap[currentUrl] !== 'undefined') {\r\n return this.SampledPageMap[currentUrl];\r\n }\r\n if (KSwitchSampling) {\r\n var matchedOverAll = void 0;\r\n var level = 0;\r\n var radar_1 = null;\r\n var radarConfigs = [];\r\n // 找出当前页面的采样配置\r\n for (var path in KSwitchSampling) {\r\n if (KSwitchSampling.hasOwnProperty(path)) {\r\n var curLevel = 0;\r\n if (path === '*') {\r\n // * 权重为 1\r\n curLevel = 1;\r\n }\r\n else if (currentUrl.indexOf(path) === 0) {\r\n if (path === currentUrl) {\r\n // 相等的权重为 100\r\n curLevel = 100;\r\n }\r\n else if (path[path.length - 1] === '/') {\r\n // 包含的权重为 10\r\n curLevel = 10 + 1 - 1 / path.length;\r\n }\r\n }\r\n if (!curLevel)\r\n continue;\r\n var _a = KSwitchSampling[path], radar_2 = _a.radar, overwrite = _a.overwrite, overall = _a.overall;\r\n curLevel = curLevel + (overwrite ? 1000 : 0);\r\n if (radar_2) {\r\n radarConfigs.push({\r\n radar: radar_2,\r\n level: curLevel,\r\n });\r\n }\r\n if (curLevel > level) {\r\n level = curLevel;\r\n matchedOverAll = overall;\r\n }\r\n }\r\n }\r\n // 先判定整体采样\r\n if (level) {\r\n radar_1 = {};\r\n radarConfigs.sort(function (r1, r2) { return r1.level - r2.level; }).forEach(function (r) {\r\n Object.assign(radar_1, r.radar);\r\n });\r\n }\r\n var sampled = void 0;\r\n // 有 overwrite 或业务方没有配置采样时,使用 kswitch 采样配置\r\n if (level > 1000 || typeof GlobalConfig.sampled === 'undefined') {\r\n sampled = Math.random() < Number(matchedOverAll) && (radar_1 ? { radar: radar_1 } : true);\r\n }\r\n else {\r\n sampled = typeof GlobalConfig.sampled === 'boolean' ? GlobalConfig.sampled : true;\r\n }\r\n this.SampledPageMap[currentUrl] = sampled;\r\n }\r\n return this.SampledPageMap[currentUrl];\r\n };\r\n Object.defineProperty(Weblog.prototype, \"currentUrl\", {\r\n get: function () {\r\n var _a = this.currentUrlPackage, page = _a.page, params = _a.params;\r\n return params && typeof params === 'object'\r\n ? page + \"?\" + stringifyQuery(params)\r\n : page;\r\n },\r\n enumerable: false,\r\n configurable: true\r\n });\r\n Object.defineProperty(Weblog.prototype, \"referUrl\", {\r\n get: function () {\r\n if (!this.referUrlPackage) {\r\n return '';\r\n }\r\n var _a = this.referUrlPackage, page = _a.page, params = _a.params;\r\n return params && typeof params === 'object'\r\n ? page + \"?\" + stringifyQuery(params)\r\n : page;\r\n },\r\n enumerable: false,\r\n configurable: true\r\n });\r\n /**\r\n * 更新当前 url 信息\r\n * @param url\r\n * @param type\r\n */\r\n Weblog.prototype.updateCurrentUrlPackage = function (url, type) {\r\n if (url === void 0) { url = typeof location !== 'undefined' ? location.href : ''; }\r\n if (type === void 0) { type = 'web'; }\r\n // 该接口不改变 refer 信息\r\n // this.referUrlPackage = this.currentUrlPackage;\r\n if (typeof url === 'object' && url.page) {\r\n if (this.currentUrlPackage && url.page === this.currentUrlPackage.page) {\r\n return this.currentUrlPackage.update(url.page, url.params);\r\n }\r\n }\r\n this.currentUrlPackage = new UrlPackage(url, type, this.logConfig.urlMap);\r\n this.currentUrlPackage.sampled = this.getPageSampled();\r\n };\r\n /**\r\n * 更新 refer url 信息\r\n * @param url\r\n * @param type\r\n */\r\n Weblog.prototype.updateReferUrlPackage = function (url, type) {\r\n if (url === void 0) { url = this.currentUrlPackage; }\r\n if (type === void 0) { type = 'web'; }\r\n if (url instanceof UrlPackage) {\r\n this.referUrlPackage = url;\r\n }\r\n else {\r\n this.referUrlPackage = new UrlPackage(url, type, this.logConfig.urlMap);\r\n }\r\n };\r\n /**\r\n * 重设 common_package 信息\r\n * @param base\r\n */\r\n Weblog.prototype.updateBase = function (base) {\r\n this.logger.updateBase(transformCommonPackage(_assign(_assign({}, this.baseOption), base), this.logConfig));\r\n };\r\n /**\r\n * 更新现有 common_package 信息\r\n */\r\n Weblog.prototype.updateCommonPackage = function (options) {\r\n if (typeof options !== 'object')\r\n return;\r\n if (!this.commomPackage)\r\n return;\r\n this.commomPackage.update(options);\r\n };\r\n /**\r\n * 初始化插件\r\n * @param plugins\r\n */\r\n Weblog.prototype.addPlugins = function () {\r\n var _this = this;\r\n if (!this.logConfig.plugins || !this.logConfig.plugins.length)\r\n return;\r\n // 类似 webpack plugins 的实例数组\r\n this.logConfig.plugins.forEach(function (plugin) {\r\n if (typeof plugin === 'object' && typeof plugin.apply === 'function') {\r\n _this.addPluginInstance(plugin);\r\n }\r\n });\r\n };\r\n /**\r\n * 加载插件实例\r\n */\r\n Weblog.prototype.addPluginInstance = function (pluginInstance) {\r\n if (pluginInstance) {\r\n var key = pluginInstance.key || pluginInstance.constructor && pluginInstance.constructor.key || \"plugin_auto_key_\" + pluginIndex++;\r\n if (typeof pluginInstance.apply === 'function'\r\n && (!pluginInstance.weblog || pluginInstance.weblog !== this)) {\r\n pluginInstance.apply(this);\r\n }\r\n this.plugins[key] = pluginInstance;\r\n }\r\n };\r\n /**\r\n * 加载插件构造函数\r\n * @param plugin\r\n * @param pluginOptions\r\n */\r\n Weblog.prototype.plug = function (plugin, pluginOptions) {\r\n if (this.plugins[plugin.key]) {\r\n throw new Error(\"There is a duplex plugin called \" + plugin.key);\r\n }\r\n this.addPluginInstance(new plugin(this, pluginOptions));\r\n };\r\n Weblog.prototype.unplug = function (name) {\r\n var plugin = this.plugins[name];\r\n if (plugin) {\r\n plugin.destroy();\r\n delete this.plugins[name];\r\n }\r\n };\r\n Weblog.prototype.unplugAll = function () {\r\n for (var key in this.plugins) {\r\n if (this.plugins[key]) {\r\n this.unplug(key);\r\n }\r\n }\r\n };\r\n Weblog.prototype.generateLog = function (type, name, params, contentPackage, factory) {\r\n var _this = this;\r\n if (type === void 0) { type = TaskOperations.CLICK; }\r\n if (factory === void 0) { factory = logFactory; }\r\n if (typeof type !== 'string') {\r\n type = type.type;\r\n }\r\n type = type.toUpperCase();\r\n var generateLogName = name;\r\n var getCommonProps = function (name) {\r\n var currentUrlPackage = null;\r\n if (typeof generateLogName === 'object') {\r\n currentUrlPackage = generateLogName.currentUrlPackage;\r\n contentPackage =\r\n generateLogName.contentPackage\r\n || contentPackage;\r\n }\r\n if (currentUrlPackage) {\r\n var page = currentUrlPackage.page, identity = currentUrlPackage.identity, params_1 = currentUrlPackage.params;\r\n currentUrlPackage = {\r\n identity: identity || uuid(page || ''),\r\n page: page,\r\n params: typeof params_1 === 'object' ? JSON.stringify(params_1) : params_1,\r\n };\r\n }\r\n else {\r\n currentUrlPackage = _this.currentUrlPackage.toJSON();\r\n }\r\n if (contentPackage) {\r\n contentPackage = typeof contentPackage === 'string' ? contentPackage : JSON.stringify(contentPackage);\r\n }\r\n return {\r\n name: name,\r\n // 传入的 url_package 信息不应该是可变的对象,会导致延时的 log page 信息变更\r\n currentUrlPackage: currentUrlPackage,\r\n referUrlPackage: _this.referUrlPackage ? _this.referUrlPackage.toJSON() : undefined,\r\n contentPackage: contentPackage,\r\n };\r\n };\r\n if (typeof name === 'object') {\r\n if (type === 'PV') {\r\n // PV 类型\r\n var _a = name, type_1 = _a.type, page = _a.page, pageParams = _a.params;\r\n this.currentUrlPackage.update(page, pageParams);\r\n return factory(EventTypes.PV, _assign(_assign(_assign({}, name), { type: type_1 }), getCommonProps('PV')));\r\n }\r\n // 如果参数中带有 urlPage 则更新 page 信息\r\n var urlPage = name.urlPage;\r\n urlPage && this.currentUrlPackage.update(urlPage.page);\r\n if (type === EventTypes.SHOW) {\r\n // SHOW 类型\r\n var action_1 = name.action;\r\n return factory(type, _assign(_assign({}, name), getCommonProps(action_1)));\r\n }\r\n // Radar 日志特殊处理\r\n if (type === 'RADAR') {\r\n return factory(type, name);\r\n }\r\n if (type === EventTypes.CUSTOM) {\r\n // CUSTOM 类型\r\n var _b = name, key = _b.key, value = _b.value, eventId_1 = _b.eventId;\r\n return factory(type, _assign({ params: value, eventId: eventId_1 }, getCommonProps(key)));\r\n }\r\n if (type === 'VIDEO') {\r\n return factory(type, _assign({ params: name }, getCommonProps('video')));\r\n }\r\n // TASK 类型\r\n var _c = name, action = _c.action, taskParams = _c.params, status_1 = _c.status, taskType = _c.type, eventId = _c.eventId;\r\n return factory(type, _assign(_assign(_assign({}, name), { params: taskParams, status: status_1,\r\n taskType: taskType,\r\n eventId: eventId }), getCommonProps(action)));\r\n }\r\n if (type === 'PV') {\r\n this.currentUrlPackage.update(name, params);\r\n }\r\n return factory(type, _assign({ params: params }, getCommonProps(name)));\r\n };\r\n Object.defineProperty(Weblog.prototype, \"isSendSampled\", {\r\n get: function () {\r\n return this.currentUrlPackage && this.currentUrlPackage.sampled || GlobalConfig.isDebug;\r\n },\r\n enumerable: false,\r\n configurable: true\r\n });\r\n Weblog.prototype.send = function (type, name, params, contentPackage, immediately) {\r\n if (type === void 0) { type = TaskOperations.CLICK; }\r\n // 如果该用户不被采样,则所有日志都不会上报\r\n if (!this.isSendSampled) {\r\n return;\r\n }\r\n var log = this.generateLog(type, name, params, contentPackage);\r\n // 雷达日志单独处理\r\n if (type === 'RADAR') {\r\n return this.logger.sendRadar(log);\r\n }\r\n if (type === 'PV') {\r\n if (GlobalConfig.isV2) {\r\n // 对于上报到v2,page为url的埋点,给予警告\r\n pageUrlWarnForV2(this.currentUrlPackage.page);\r\n }\r\n }\r\n var callback = typeof name === 'object' && name.callback || undefined;\r\n return this.logger.send(log, !!immediately, callback);\r\n };\r\n Weblog.prototype.collect = function (type, name, params, contentPackage) {\r\n if (type === void 0) { type = TaskOperations.CLICK; }\r\n return this.send(type, name, params, contentPackage, false);\r\n };\r\n Weblog.prototype.sendImmediately = function (type, name, params, contentPackage) {\r\n if (type === void 0) { type = TaskOperations.CLICK; }\r\n return this.send(type, name, params, contentPackage, true);\r\n };\r\n Weblog.prototype.sendPackage = function (data, callback) {\r\n this.logger.sendPackage(data, callback);\r\n };\r\n Weblog.prototype.destroy = function () {\r\n this.unplugAll();\r\n if (typeof window !== 'undefined') {\r\n removeMonitor(window, 'pagehide', this.beforeUnload);\r\n removeMonitor(window, 'beforeunload', this.beforeUnload);\r\n }\r\n };\r\n return Weblog;\r\n}(EventEmitter));\n\nvar BasePlugin = /** @class */ (function (_super) {\r\n __extends(BasePlugin, _super);\r\n function BasePlugin() {\r\n var _this = _super !== null && _super.apply(this, arguments) || this;\r\n // @ts-ignore\r\n _this.weblog = typeof window !== 'undefined' && window._GLOBAL_KS_WEBLOGGER_ && window._GLOBAL_KS_WEBLOGGER_.weblog;\r\n return _this;\r\n }\r\n BasePlugin.prototype.apply = function (weblog) {\r\n this.weblog = weblog;\r\n };\r\n return BasePlugin;\r\n}(EventEmitter));\r\n/**\r\n * 在 bootstrap 环境下自动注册插件\r\n * @param Plugin\r\n * @param optionKey\r\n */\r\nvar autoRegister = function (Plugin, optionKey, PluginPlaceholder) {\r\n if (typeof window === 'undefined' ||\r\n typeof window._GLOBAL_KS_WEBLOGGER_ === 'undefined' ||\r\n typeof Plugin !== 'function')\r\n return;\r\n var _a = window._GLOBAL_KS_WEBLOGGER_, weblog = _a.weblog, config = _a.config;\r\n var option = optionKey && config.plugins[optionKey] ? config.plugins[optionKey].options : undefined;\r\n if (optionKey === 'radar') {\r\n // 雷达插件采样特殊处理\r\n var radarOptions = option || weblog.logConfig[optionKey];\r\n if (!radarOptions)\r\n return;\r\n if (!radarOptions.sampling || !Plugin.samplingControl(radarOptions)) {\r\n return weblog.plug(PluginPlaceholder);\r\n }\r\n }\r\n weblog.addPluginInstance(new Plugin(option));\r\n};\n\n/**\r\n * @file crash-monitor.js\r\n * @author kevin (lanlazy@163.com)\r\n * beforeunload触发条件:正常关闭标签,刷新,关闭浏览器\r\n * @created 2018-08-08\r\n */\r\nvar defaultOptions$1 = {\r\n updateInterval: 20 * 1000,\r\n crashThreshold: 10 * 1000,\r\n};\r\nvar CrashMonitor = /** @class */ (function (_super) {\r\n __extends(CrashMonitor, _super);\r\n /**\r\n * 兼容写法,如果在 Weblog 初始化设置 plugins 时,不需要设置 weblog\r\n * @param weblog\r\n */\r\n function CrashMonitor(weblog) {\r\n var _this = _super.call(this) || this;\r\n _this.eventName = 'onpagehide' in window ? 'pagehide' : 'beforeunload';\r\n _this.options = _assign({}, defaultOptions$1);\r\n _this.monitorId = '@ks.monitor.crash_' + origin;\r\n _this.historyMoniorInfo = null;\r\n /**\r\n * 停止监控过程\r\n * 1.在页面正常卸载时自动调用\r\n * 2.需要手动卸载时手动调用\r\n */\r\n _this.stop = function () {\r\n clearInterval(_this.updateIntervalId);\r\n try {\r\n localStorage.removeItem(_this.monitorId);\r\n }\r\n catch (e) {\r\n // nothing\r\n }\r\n };\r\n try {\r\n var historyMoniorString = localStorage.getItem(_this.monitorId);\r\n _this.historyMoniorInfo = JSON.parse(historyMoniorString) || {};\r\n }\r\n catch (e) {\r\n // nothing\r\n }\r\n if (weblog && weblog.logger) {\r\n _this.apply(weblog);\r\n }\r\n addMonitor(window, _this.eventName, _this.stop);\r\n return _this;\r\n }\r\n CrashMonitor.prototype.apply = function (weblog) {\r\n var _this = this;\r\n if (!weblog)\r\n return;\r\n this.weblog = weblog;\r\n this.on('crash', function (info) {\r\n _this.weblog.sendImmediately('CUSTOM', 'crash', info);\r\n });\r\n this.start();\r\n };\r\n CrashMonitor.prototype.destroy = function () {\r\n this.stop();\r\n this.off('crash');\r\n removeMonitor(window, this.eventName, this.stop);\r\n };\r\n CrashMonitor.prototype.checkHistoryCrash = function () {\r\n var now = new Date().valueOf();\r\n if (this.historyMoniorInfo\r\n && this.historyMoniorInfo.time\r\n && now - this.historyMoniorInfo.time > this.options.crashThreshold) {\r\n this.emit('crash', this.historyMoniorInfo);\r\n }\r\n };\r\n /**\r\n * 开始定时更新快照\r\n */\r\n CrashMonitor.prototype.start = function () {\r\n var _this = this;\r\n this.checkHistoryCrash();\r\n this.updateIntervalId = window.setInterval(function () {\r\n _this.update();\r\n }, this.options.updateInterval);\r\n this.update();\r\n };\r\n /**\r\n * 更新监控快照\r\n * @param {*} data 外部追加额外的快照信息\r\n */\r\n CrashMonitor.prototype.update = function () {\r\n // TODO,非标准api后续可能会需要更新\r\n if (!window.performance || !window.performance.memory) {\r\n return;\r\n }\r\n // TODO后面看看需要补其他什么信息\r\n var monitorInfo = {\r\n time: new Date().valueOf(),\r\n memory: {\r\n limit: window.performance.memory.jsHeapSizeLimit / 1024,\r\n total: window.performance.memory.totalJSHeapSize / 1024,\r\n used: window.performance.memory.usedJSHeapSize / 1024,\r\n },\r\n };\r\n try {\r\n localStorage.setItem(this.monitorId, JSON.stringify(monitorInfo));\r\n }\r\n catch (e) {\r\n // nothing\r\n }\r\n };\r\n CrashMonitor.key = 'crachMonitor';\r\n return CrashMonitor;\r\n}(BasePlugin));\n\n/**\r\n * @file fps.js\r\n * @author kevin (lanlazy@163.com)\r\n * @created 2018-08-25\r\n */\r\nvar defaultOptions = {\r\n // 更新间隔\r\n interval: 10 * 1000,\r\n // 浮点精度 0 取整\r\n decimals: 2,\r\n};\r\nvar FPSMonitor = /** @class */ (function (_super) {\r\n __extends(FPSMonitor, _super);\r\n function FPSMonitor(weblog, options) {\r\n var _this = _super.call(this) || this;\r\n _this.options = _assign({}, defaultOptions);\r\n _this.count = 0;\r\n if (options) ;\r\n else if (weblog) {\r\n if (weblog.logger) {\r\n _this.apply(weblog);\r\n }\r\n }\r\n Object.assign(_this.options, options);\r\n _this.on('performance', function (fps) {\r\n _this.weblog.collect('CUSTOM', 'fps', { fps: fps });\r\n });\r\n _this.start();\r\n return _this;\r\n }\r\n FPSMonitor.prototype.destroy = function () {\r\n this.off('performance');\r\n this.stop();\r\n };\r\n FPSMonitor.prototype.start = function () {\r\n this.loop();\r\n this.fpsTick();\r\n };\r\n FPSMonitor.prototype.fpsTick = function () {\r\n var _this = this;\r\n this.fpsTickId = raf(function () {\r\n _this.count++;\r\n _this.fpsTick();\r\n });\r\n };\r\n FPSMonitor.prototype.loop = function () {\r\n var _this = this;\r\n this.loopBeginTime = new Date().valueOf();\r\n this.loopId = window.setTimeout(function () {\r\n _this.loopEndTime = new Date().valueOf();\r\n var fps = _this.calculate();\r\n _this.emit('performance', fps);\r\n _this.count = 0;\r\n _this.loop();\r\n }, this.options.interval);\r\n };\r\n FPSMonitor.prototype.stop = function () {\r\n caf(this.fpsTickId);\r\n window.clearTimeout(this.loopId);\r\n };\r\n FPSMonitor.prototype.calculate = function () {\r\n var during = this.loopEndTime - this.loopBeginTime;\r\n // raf执行次数\r\n var runCount = during / this.count;\r\n return +(1000 / runCount).toFixed(this.options.decimals);\r\n };\r\n FPSMonitor.key = 'fpsMonitor';\r\n return FPSMonitor;\r\n}(BasePlugin));\n\nvar perf = typeof window !== 'undefined'\r\n ? window.performance\r\n : null;\r\nvar performanceTiming = perf && perf.timing || null;\r\nperf\r\n && perf.getEntriesByType\r\n && perf.getEntriesByType('navigation')[0]\r\n || null;\n\nfunction warn(message) {\r\n if (console && console.warn) {\r\n console.warn(message);\r\n }\r\n}\r\nfunction error(message) {\r\n if (console && console.error) {\r\n console.error(message);\r\n }\r\n}\n\n// TODO页面停留时间先依赖一个全局副作用来搞,毕竟要侵入SPA模式下比较蛋疼……\r\nvar perfMap = {\r\n // DNS查找时间\r\n dnsLookup: {\r\n end: 'domainLookupEnd',\r\n start: 'domainLookupStart',\r\n },\r\n // TCP建连时间\r\n tcpConnection: {\r\n end: 'connectEnd',\r\n start: 'connectStart',\r\n },\r\n // 静态资源加载时间\r\n resourceLoad: {\r\n end: 'responseEnd',\r\n start: 'requestStart',\r\n },\r\n // 首屏JS耗时……暂时先这么对付了,具体JS的耗时后面再提供吧\r\n // 计算的时候以第一个script开始时间点为起始,一直到DOM Complete完成\r\n // 这样看起来应该是可被定义为JS耗时了……\r\n jsCost: {\r\n custom: function () {\r\n if (typeof performance.getEntries !== 'function') {\r\n return 0;\r\n }\r\n var entries = performance.getEntries();\r\n var pageTimeInfo = entries[0];\r\n var firstJSTimeInfo = entries\r\n .filter(function (item) { return item.initiatorType === 'script'; })[0];\r\n if (firstJSTimeInfo) {\r\n return pageTimeInfo.domComplete - firstJSTimeInfo.fetchStart;\r\n }\r\n return 0;\r\n },\r\n },\r\n // DOM加载完毕时间\r\n documentContentLoaded: {\r\n end: 'domComplete',\r\n start: 'fetchStart',\r\n },\r\n // 页面加载完毕时间\r\n load: {\r\n end: 'loadEventEnd',\r\n start: 'fetchStart',\r\n },\r\n timeToFirstByte: {\r\n end: 'loadEventEnd',\r\n start: 'fetchStart',\r\n },\r\n // 首屏时间,依靠主动打点\r\n firstScreen: {\r\n custom: function (key, options) {\r\n var endPoint = (options || {}).endPoint;\r\n var end = typeof endPoint !== 'undefined' ? endPoint : new Date().valueOf();\r\n return performanceTiming && (end - performanceTiming.fetchStart) || 0;\r\n },\r\n },\r\n // 白屏时间,依靠主动打点\r\n whiteScreen: {\r\n custom: function (key, options) {\r\n var endPoint = (options || {}).endPoint;\r\n var end = typeof endPoint !== 'undefined' ? endPoint : new Date().valueOf();\r\n return performanceTiming && (end - performanceTiming.fetchStart) || 0;\r\n },\r\n },\r\n};\r\nvar TimingMonitor = /** @class */ (function (_super) {\r\n __extends(TimingMonitor, _super);\r\n /**\r\n * 兼容写法,如果在 Weblog 初始化设置 plugins 时,不需要设置 weblog\r\n * @param weblog\r\n */\r\n function TimingMonitor(weblog) {\r\n var _this = _super.call(this) || this;\r\n _this.load = function () {\r\n // 严格意义上来说类似的时间对于onload计算,都是等到window.onload执行完毕才开始计算\r\n // 所以页面加载完毕时间使用的是loadEventEnd事件,所以手动进入下一个event loop\r\n // 确保获取loadEventEnd事件\r\n setTimeout(function () {\r\n var perfInfo = _this.collect();\r\n if (!perfInfo) {\r\n return;\r\n }\r\n [\r\n 'load',\r\n 'documentContentLoaded',\r\n 'dnsLookup',\r\n 'tcpConnection',\r\n 'jsCost',\r\n 'timeToFirstByte',\r\n ].forEach(function (key) {\r\n var _a;\r\n // TODO后面做一个支持度list来维护,现在先手动过滤一下\r\n if (key === 'jsCost' && perfInfo[key] === 0) {\r\n return;\r\n }\r\n _this.weblog.collect('CUSTOM', costMap[key], (_a = {},\r\n _a[costMap[key]] = perfInfo[key],\r\n _a));\r\n });\r\n });\r\n };\r\n if (!performanceTiming) {\r\n error('The Timing Monitor need performance APIs to Support!');\r\n return _this;\r\n }\r\n if (weblog) {\r\n _this.apply(weblog);\r\n }\r\n return _this;\r\n }\r\n TimingMonitor.prototype.apply = function (weblog) {\r\n var _this = this;\r\n this.weblog = weblog;\r\n addMonitor(window, 'load', this.load);\r\n this.on('perf', function (_a) {\r\n var _b;\r\n var key = _a.key, data = _a.data;\r\n _this.weblog.collect('CUSTOM', costMap[key], (_b = {},\r\n _b[costMap[key]] = data[key],\r\n _b));\r\n });\r\n };\r\n TimingMonitor.prototype.destroy = function () {\r\n removeMonitor(window, 'load', this.load);\r\n this.off('perf');\r\n };\r\n TimingMonitor.prototype.calculate = function (key, options) {\r\n var perf = perfMap[key];\r\n if (!perf) {\r\n throw new Error('The perf key is not correct!');\r\n }\r\n if (typeof perf.custom === 'function') {\r\n return perf.custom(key, options);\r\n }\r\n var endPoint = performanceTiming[perfMap[key].end];\r\n var startPoint = performanceTiming[perfMap[key].start];\r\n return endPoint - startPoint;\r\n };\r\n // 目前只针对这两个需要手动打点;\r\n TimingMonitor.prototype.mark = function (key, options) {\r\n var data = this.collect(key, options);\r\n this.emit('perf', {\r\n key: key,\r\n data: data,\r\n });\r\n };\r\n TimingMonitor.prototype.collect = function (key, options) {\r\n var _a;\r\n var _this = this;\r\n // 如果不支持timing api的话,就直接不上报了,免得数据污染\r\n if (!performanceTiming) {\r\n return;\r\n }\r\n if (key) {\r\n return _a = {},\r\n _a[key] = this.calculate(key, options),\r\n _a;\r\n }\r\n var allPerf = {};\r\n return Object.keys(perfMap).reduce(function (map, key) {\r\n map[key] = _this.calculate(key, options);\r\n return map;\r\n }, allPerf);\r\n };\r\n TimingMonitor.key = 'timingMonitor';\r\n return TimingMonitor;\r\n}(BasePlugin));\r\n// 优先使用pagehide 其次使用beforeunload;\r\nvar costMap = {\r\n load: 'total_download_cost',\r\n documentContentLoaded: 'operational_cost',\r\n dnsLookup: 'dns_query_cost',\r\n tcpConnection: 'tcp_cost',\r\n jsCost: 'js_cost',\r\n whiteScreen: 'white_screen_cost',\r\n firstScreen: 'first_screen_cost',\r\n timeToFirstByte: 'ttfb_cost',\r\n};\r\n/**\r\n * 如果使用了 bootstrap 则自动注册插件\r\n */\r\nautoRegister(TimingMonitor);\n\n// TODO下面这个暂时不能这么用,因为计量方式和perfirmanceTiming不一样\r\n// export default performanceNavigationTiming || performanceTiming || null;\r\nvar navigationTiming = (function () {\r\n var perf = typeof window !== 'undefined'\r\n ? window.performance\r\n : null;\r\n if (perf && perf.timing) {\r\n if (typeof perf.timing.toJSON === 'function') {\r\n var performanceTiming = perf.timing.toJSON();\r\n if (performanceTiming && !performanceTiming.redirectStart) {\r\n performanceTiming.redirectStart = performanceTiming.navigationStart;\r\n }\r\n return performanceTiming;\r\n }\r\n return perf.timing;\r\n }\r\n return null;\r\n});\r\nfunction perfNow(time) {\r\n var perf = typeof window !== 'undefined'\r\n ? window.performance\r\n : null;\r\n if (!perf)\r\n return { value: null };\r\n // 用户传入时间戳则使用用户的传入\r\n if (time != null) {\r\n return {\r\n value: time - perf.timing.navigationStart,\r\n detail: {\r\n start: 'navigationStart',\r\n startPoint: perf.timing.navigationStart,\r\n end: 'customTime',\r\n endPoint: time,\r\n },\r\n };\r\n }\r\n if (typeof perf.now === 'function') {\r\n return {\r\n value: perf.now(),\r\n detail: {\r\n start: 'navigationStart',\r\n startPoint: perf.timing.navigationStart,\r\n end: 'perfNowAPI',\r\n endPoint: perf.now(),\r\n },\r\n };\r\n }\r\n var now = Date.now();\r\n return {\r\n value: now - perf.timing.navigationStart,\r\n detail: {\r\n start: 'navigationStart',\r\n startPoint: perf.timing.navigationStart,\r\n end: 'dateNow',\r\n endPoint: now,\r\n },\r\n };\r\n}\n\n// 统一的 custom_key\r\nvar KEY = 'radar_log';\r\nvar RADAR_KEY;\r\n(function (RADAR_KEY) {\r\n // 页面加载监控\r\n RADAR_KEY[\"LOAD\"] = \"load\";\r\n // 静态资源监控\r\n RADAR_KEY[\"RES\"] = \"resource\";\r\n // API 性能监控\r\n RADAR_KEY[\"API\"] = \"api\";\r\n // 异常\r\n RADAR_KEY[\"ERROR\"] = \"error\";\r\n // 脚本自身上报异常\r\n RADAR_KEY[\"SDK_ERROR\"] = \"sdk_error\";\r\n // 用户自定义性能监控\r\n RADAR_KEY[\"CUSTOM\"] = \"custom\";\r\n // 批量日志,用于处理批量情况\r\n RADAR_KEY[\"BATCH\"] = \"batch\";\r\n // 事件\r\n RADAR_KEY[\"EVENT\"] = \"event\";\r\n})(RADAR_KEY || (RADAR_KEY = {}));\r\nvar LEGACY_RADAR_KEY;\r\n(function (LEGACY_RADAR_KEY) {\r\n // 页面加载监控\r\n LEGACY_RADAR_KEY[\"LOAD\"] = \"load_statistics\";\r\n // 静态资源监控\r\n LEGACY_RADAR_KEY[\"RES\"] = \"resource_statistics\";\r\n // API 性能监控\r\n LEGACY_RADAR_KEY[\"API\"] = \"api_statistics\";\r\n // 异常\r\n LEGACY_RADAR_KEY[\"ERROR\"] = \"error_statistics\";\r\n // 脚本自身上报异常\r\n LEGACY_RADAR_KEY[\"SDK_ERROR\"] = \"sdk_error\";\r\n // 用户自定义性能监控\r\n LEGACY_RADAR_KEY[\"CUSTOM\"] = \"custom_statistics\";\r\n})(LEGACY_RADAR_KEY || (LEGACY_RADAR_KEY = {}));\r\nvar ERROR_KEY;\r\n(function (ERROR_KEY) {\r\n // 脚本异常\r\n ERROR_KEY[\"SCRIPT\"] = \"script\";\r\n // 资源加载异常\r\n ERROR_KEY[\"RES\"] = \"res\";\r\n // 接口请求异常\r\n ERROR_KEY[\"API\"] = \"api\";\r\n // 视频异常\r\n ERROR_KEY[\"VIDEO\"] = \"video\";\r\n})(ERROR_KEY || (ERROR_KEY = {}));\r\nvar domPerfMap = {\r\n redirect: {\r\n end: 'fetchStart',\r\n start: 'navigationStart',\r\n },\r\n // DNS查找时间\r\n dns: {\r\n end: 'domainLookupEnd',\r\n start: 'domainLookupStart',\r\n },\r\n dns_start: {\r\n end: 'domainLookupEnd',\r\n start: 'navigationStart',\r\n },\r\n // TCP建连时间\r\n tcp: {\r\n end: 'connectEnd',\r\n start: 'connectStart',\r\n },\r\n // TCP建连时间\r\n tcp_start: {\r\n end: 'connectEnd',\r\n start: 'navigationStart',\r\n },\r\n redirect_count: {\r\n custom: function (key, perf) {\r\n // @ts-ignore\r\n return perf.redirectCount;\r\n },\r\n },\r\n // ssl 安全连接耗时\r\n ssl: {\r\n // 有可能不是 https,导致这里上报异常\r\n custom: function (key, perf) {\r\n if (perf.secureConnectionStart === 0)\r\n return 0;\r\n return perf.connectEnd - perf.secureConnectionStart;\r\n },\r\n },\r\n ssl_start: {\r\n // 有可能不是 https,导致这里上报异常\r\n custom: function (key, perf) {\r\n if (perf.secureConnectionStart === 0)\r\n return 0;\r\n return perf.secureConnectionStart - perf.redirectStart;\r\n },\r\n },\r\n // 首字节事件,Time to First Byte\r\n ttfb: {\r\n end: 'responseStart',\r\n start: 'requestStart',\r\n },\r\n // 数据传输耗时\r\n trans: {\r\n end: 'responseEnd',\r\n start: 'responseStart',\r\n },\r\n // DOM 解析耗时\r\n dom_parse: {\r\n end: 'domInteractive',\r\n start: 'responseEnd',\r\n },\r\n dom_parse_start: {\r\n end: 'domInteractive',\r\n start: 'navigationStart',\r\n },\r\n // 白屏耗时\r\n // ((domInteractive || domLoading) - fetchStart)\r\n blank: {\r\n end: 'domLoading',\r\n start: 'navigationStart',\r\n },\r\n // 首字节\r\n fb: {\r\n end: 'responseStart',\r\n start: 'navigationStart',\r\n },\r\n // DOM-ready\r\n dom_ready: {\r\n end: 'domContentLoadedEventEnd',\r\n start: 'navigationStart',\r\n },\r\n // 完整 loading 时间\r\n total: {\r\n end: 'loadEventStart',\r\n start: 'navigationStart',\r\n },\r\n // 页面中的同步加载耗时\r\n resource: {\r\n end: 'loadEventStart',\r\n start: 'domContentLoadedEventEnd',\r\n },\r\n // 首次渲染,可以用 entries 里面的 first_paint\r\n fp: {\r\n custom: function () {\r\n if (typeof performance.getEntries !== 'function') {\r\n return null;\r\n }\r\n var entries = performance.getEntries();\r\n var firstPaintInfo = entries\r\n .filter(function (item) { return item.name === 'first-paint'; })[0];\r\n if (firstPaintInfo) {\r\n return Math.ceil(firstPaintInfo.startTime + firstPaintInfo.duration);\r\n }\r\n return null;\r\n },\r\n },\r\n // 首屏JS耗时……暂时先这么对付了,具体JS的耗时后面再提供吧\r\n // 计算的时候以第一个script开始时间点为起始,一直到DOM Complete完成\r\n // 这样看起来应该是可被定义为JS耗时了……\r\n js_cost: {\r\n custom: function () {\r\n if (typeof performance.getEntries !== 'function') {\r\n return null;\r\n }\r\n var timing = navigationTiming();\r\n var entries = performance.getEntries();\r\n var pageTimeInfo = performance.getEntries()\r\n .filter(function (item) { return item.initiatorType === 'navigation'; })[0];\r\n var firstJSTimeInfo = entries\r\n .filter(function (item) { return item.initiatorType === 'script'; })[0];\r\n // 有的浏览器 getEntries 里没有 navigation\r\n var domComplete = pageTimeInfo ? pageTimeInfo.domComplete :\r\n timing.domComplete - timing.navigationStart;\r\n if (firstJSTimeInfo && domComplete) {\r\n return domComplete - firstJSTimeInfo.fetchStart;\r\n }\r\n return null;\r\n },\r\n },\r\n // 可交互时间,这个不确定,粗略加个默认的,让用户可以自定义\r\n tti: {\r\n end: 'domInteractive',\r\n start: 'navigationStart',\r\n },\r\n // 这里 load performance 如果可以的话也能拿到\r\n protocol: {\r\n custom: function (key, perf) {\r\n return perf.nextHopProtocol;\r\n },\r\n },\r\n dom_num: {\r\n custom: function () {\r\n return typeof document !== 'undefined' ? document.all.length : null;\r\n }\r\n }\r\n};\r\nvar apiPerfMap = {\r\n // fetchStart,记录资源的 fetchStart,记录其跟页面加载的偏移量\r\n fetch_start: {\r\n custom: function (key, perf) {\r\n return Math.round(perf.fetchStart);\r\n },\r\n },\r\n // DNS查找时间\r\n dns: {\r\n end: 'domainLookupEnd',\r\n start: 'domainLookupStart',\r\n cachedSkip: true,\r\n },\r\n // TCP建连时间\r\n tcp: {\r\n end: 'connectEnd',\r\n start: 'connectStart',\r\n cachedSkip: true,\r\n },\r\n // ssl 安全连接耗时\r\n ssl: {\r\n cachedSkip: true,\r\n // 有可能不是 https,导致这里上报异常\r\n custom: function (key, perf) {\r\n if (perf.secureConnectionStart === 0)\r\n return 0;\r\n return perf.connectEnd - perf.secureConnectionStart;\r\n },\r\n },\r\n // 首字节事件,Time to First Byte\r\n ttfb: {\r\n end: 'responseStart',\r\n start: 'requestStart',\r\n cachedSkip: true,\r\n },\r\n // 数据传输耗时\r\n trans: {\r\n end: 'responseEnd',\r\n start: 'responseStart',\r\n cachedSkip: true,\r\n },\r\n // 首字节\r\n fb: {\r\n end: 'responseStart',\r\n start: 'fetchStart',\r\n cachedSkip: true,\r\n },\r\n total: {\r\n end: 'responseEnd',\r\n start: 'fetchStart',\r\n },\r\n // 计算逻辑与total一致\r\n duration: {\r\n end: 'responseEnd',\r\n start: 'fetchStart',\r\n },\r\n // 体积\r\n size: {\r\n cachedSkip: true,\r\n custom: function (key, perf) {\r\n return perf.encodedBodySize;\r\n },\r\n noThrottle: true,\r\n },\r\n // 首次渲染,可以用 entries 里面的 first_paint\r\n protocol: {\r\n custom: function (key, perf) {\r\n return perf.nextHopProtocol;\r\n },\r\n },\r\n // file 静态资源地址\r\n file: {\r\n custom: function (key, perf) {\r\n return perf.name;\r\n },\r\n noThrottle: true,\r\n },\r\n res_type: {\r\n custom: function (key, perf) {\r\n return perf.initiatorType;\r\n },\r\n },\r\n // 是否缓存\r\n cached: {\r\n custom: function (key, perf) {\r\n if (perf.transferSize === 0)\r\n return true;\r\n // safari 没有实现 transferSize,因此用 domainLookupStart 来判断\r\n if (perf.transferSize == null && perf.domainLookupStart === 0)\r\n return true;\r\n return false;\r\n },\r\n noThrottle: true,\r\n }\r\n};\r\nvar resPerfMap = {\r\n // fetchStart,记录资源的 fetchStart,记录其跟页面加载的偏移量\r\n fetch_start: {\r\n custom: function (key, perf) {\r\n return Math.round(perf.fetchStart);\r\n },\r\n noThrottle: true,\r\n },\r\n // DNS查找时间\r\n dns: {\r\n end: 'domainLookupEnd',\r\n start: 'domainLookupStart',\r\n cachedSkip: true,\r\n },\r\n // TCP建连时间\r\n tcp: {\r\n end: 'connectEnd',\r\n start: 'connectStart',\r\n cachedSkip: true,\r\n },\r\n // ssl 安全连接耗时\r\n ssl: {\r\n cachedSkip: true,\r\n // 有可能不是 https,导致这里上报异常\r\n custom: function (key, perf) {\r\n if (perf.secureConnectionStart === 0)\r\n return 0;\r\n return perf.connectEnd - perf.secureConnectionStart;\r\n },\r\n },\r\n // 首字节事件,Time to First Byte\r\n ttfb: {\r\n end: 'responseStart',\r\n start: 'requestStart',\r\n cachedSkip: true,\r\n },\r\n // 数据传输耗时\r\n trans: {\r\n end: 'responseEnd',\r\n start: 'responseStart',\r\n cachedSkip: true,\r\n },\r\n // 首字节\r\n fb: {\r\n end: 'responseStart',\r\n start: 'fetchStart',\r\n cachedSkip: true,\r\n },\r\n total: {\r\n end: 'responseEnd',\r\n start: 'fetchStart',\r\n },\r\n // 计算逻辑与total一致\r\n duration: {\r\n end: 'responseEnd',\r\n start: 'fetchStart',\r\n },\r\n // 体积\r\n size: {\r\n cachedSkip: true,\r\n custom: function (key, perf) {\r\n return perf.encodedBodySize;\r\n },\r\n noThrottle: true,\r\n },\r\n // 首次渲染,可以用 entries 里面的 first_paint\r\n protocol: {\r\n custom: function (key, perf) {\r\n return perf.nextHopProtocol;\r\n },\r\n },\r\n // file 静态资源地址\r\n file: {\r\n custom: function (key, perf) {\r\n return perf.name;\r\n },\r\n noThrottle: true,\r\n },\r\n res_type: {\r\n custom: function (key, perf) {\r\n return perf.initiatorType;\r\n },\r\n },\r\n // 是否缓存\r\n cached: {\r\n custom: function (key, perf) {\r\n if (perf.transferSize === 0)\r\n return true;\r\n // safari 没有实现 transferSize,因此用 domainLookupStart 来判断\r\n if (perf.transferSize == null && perf.domainLookupStart === 0)\r\n return true;\r\n return false;\r\n },\r\n noThrottle: true,\r\n }\r\n};\r\nvar DEFAULT_IGNORE_LIST = [\r\n '//wlog.kuaishou.com/rest/n/log/web/collect',\r\n // v3\r\n '/rest/wd/common/log/collect/misc2',\r\n // v3 radar\r\n '/rest/wd/common/log/collect/radar',\r\n // v2\r\n '/rest/kd/log/collect',\r\n];\r\n// userStart: 1603074007776, // 外部传入打点WebView初始时间戳,比如调用JSBridge时间戳,客户端入口点击时间戳等。\r\n// \tpageStart: 1603074007776, // Yoda收到任务的起始时间戳\r\n// \tpageShow: 1603074007776, // Loading图显示时间\r\n// \tpreCreate: 1603074007776, // Yoda即将启动创建WebView实例的时间戳\r\n// \tcreated: 1603074007776, // WebView对象创建完毕时间戳\r\n// \tstartLoad: 1603074007776, // WebView开始加载URL时间戳\r\n// \tdidStartLoad: 1603074007776, // WebView 加载URL后首个回调时间戳\r\n// \tdidEndLoad: 1603074007776, // WebView加载完毕时间戳\r\nvar webviewPerfMap = {\r\n to_webview_page_start: {\r\n end: 'pageStart',\r\n start: 'userStart',\r\n },\r\n to_webview_page_show: {\r\n end: 'pageShow',\r\n start: 'userStart',\r\n },\r\n to_webview_pre_create: {\r\n end: 'preCreate',\r\n start: 'userStart',\r\n },\r\n to_webview_created: {\r\n end: 'created',\r\n start: 'userStart',\r\n },\r\n to_webview_start_load: {\r\n end: 'startLoad',\r\n start: 'userStart',\r\n },\r\n to_webview_did_start_load: {\r\n end: 'didStartLoad',\r\n start: 'userStart',\r\n },\r\n to_webview_did_end_load: {\r\n end: 'didEndLoad',\r\n start: 'userStart',\r\n },\r\n to_navigation_start: {\r\n end: 'navigationStart',\r\n start: 'userStart',\r\n },\r\n to_fetch_start: {\r\n end: 'fetchStart',\r\n start: 'userStart',\r\n },\r\n to_connect_start: {\r\n end: 'connectStart',\r\n start: 'userStart',\r\n },\r\n to_dom_ready: {\r\n end: 'domContentLoadedEventEnd',\r\n start: 'userStart',\r\n },\r\n to_total: {\r\n end: 'loadEventStart',\r\n start: 'userStart',\r\n },\r\n to_fmp: {\r\n end: 'radarFmp',\r\n start: 'userStart'\r\n }\r\n};\r\n// load信息也需要上报时间戳了 这里提供一个rename的map\r\nvar loadTimestamp = {\r\n navigation_start_time: 'navigationStart',\r\n fetch_start_time: 'fetchStart',\r\n dns_start_time: 'domainLookupStart',\r\n dns_end_time: 'domainLookupEnd',\r\n connect_start_time: 'connect_start',\r\n ssl_start_time: 'secureConnectionStart',\r\n request_start_time: 'requestStart',\r\n response_start_time: 'responseStart',\r\n response_end_time: 'responseEnd',\r\n dom_interactive_time: 'domInteractive',\r\n dom_loading_time: 'domLoading',\r\n dom_ready_time: 'domContentLoadedEventEnd',\r\n load_event_time: 'loadEventStart',\r\n fmp_time: 'radarFmp'\r\n};\n\n/**\r\n * bridge实现方法\r\n */\r\nvar PAGELOG_API = 'sendRadarLog';\n\nvar t,\n n,\n e = function e() {\n return \"\".concat(Date.now(), \"-\").concat(Math.floor(8999999999999 * Math.random()) + 1e12);\n},\n i = function i(t) {\n var n = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : -1;\n return {\n name: t,\n value: n,\n delta: 0,\n entries: [],\n id: e(),\n isFinal: !1\n };\n},\n a = function a(t, n) {\n try {\n if (PerformanceObserver.supportedEntryTypes.includes(t)) {\n var e = new PerformanceObserver(function (t) {\n return t.getEntries().map(n);\n });\n return e.observe({\n type: t,\n buffered: !0\n }), e;\n }\n } catch (t) {}\n},\n r = !1,\n o = !1,\n s = function s(t) {\n r = !t.persisted;\n},\n u = function u() {\n addEventListener(\"pagehide\", s), addEventListener(\"beforeunload\", function () {});\n},\n c = function c(t) {\n var n = arguments.length > 1 && void 0 !== arguments[1] && arguments[1];\n o || (u(), o = !0), addEventListener(\"visibilitychange\", function (n) {\n var e = n.timeStamp;\n \"hidden\" === document.visibilityState && t({\n timeStamp: e,\n isUnloading: r\n });\n }, {\n capture: !0,\n once: n\n });\n},\n l = function l(t, n, e, i) {\n var a;\n return function () {\n e && n.isFinal && e.disconnect(), n.value >= 0 && (i || n.isFinal || \"hidden\" === document.visibilityState) && (n.delta = n.value - (a || 0), (n.delta || n.isFinal || void 0 === a) && (t(n), a = n.value));\n };\n},\n p = function p(t) {\n var n,\n e = arguments.length > 1 && void 0 !== arguments[1] && arguments[1],\n r = i(\"CLS\", 0),\n o = function o(t) {\n t.hadRecentInput || (r.value += t.value, r.entries.push(t), n());\n },\n s = a(\"layout-shift\", o);\n\n s && (n = l(t, r, s, e), c(function (t) {\n var e = t.isUnloading;\n s.takeRecords().map(o), e && (r.isFinal = !0), n();\n }));\n},\n d = function d() {\n return void 0 === t && (t = \"hidden\" === document.visibilityState ? 0 : 1 / 0, c(function (n) {\n var e = n.timeStamp;\n return t = e;\n }, !0)), {\n get timeStamp() {\n return t;\n }\n\n };\n},\n f = function f(t) {\n var n = i(\"FID\"),\n e = d(),\n r = function r(t) {\n t.startTime < e.timeStamp && (n.value = t.processingStart - t.startTime, n.entries.push(t), n.isFinal = !0, s());\n },\n o = a(\"first-input\", r),\n s = l(t, n, o);\n\n o ? c(function () {\n o.takeRecords().map(r), o.disconnect();\n }, !0) : window.perfMetrics && window.perfMetrics.onFirstInputDelay && window.perfMetrics.onFirstInputDelay(function (t, i) {\n i.timeStamp < e.timeStamp && (n.value = t, n.isFinal = !0, n.entries = [{\n entryType: \"first-input\",\n name: i.type,\n target: i.target,\n cancelable: i.cancelable,\n startTime: i.timeStamp,\n processingStart: i.timeStamp + t\n }], s());\n });\n},\n m = function m() {\n return n || (n = new Promise(function (t) {\n return [\"scroll\", \"keydown\", \"pointerdown\"].map(function (n) {\n addEventListener(n, t, {\n once: !0,\n passive: !0,\n capture: !0\n });\n });\n })), n;\n},\n g = function g(t) {\n var n,\n e = arguments.length > 1 && void 0 !== arguments[1] && arguments[1],\n r = i(\"LCP\"),\n o = d(),\n s = function s(t) {\n var e = t.startTime;\n e < o.timeStamp ? (r.value = e, r.entries.push(t)) : r.isFinal = !0, n();\n },\n u = a(\"largest-contentful-paint\", s);\n\n if (u) {\n n = l(t, r, u, e);\n\n var p = function p() {\n r.isFinal || (u.takeRecords().map(s), r.isFinal = !0, n());\n };\n\n m().then(p), c(p, !0);\n }\n};\n\nvar reProtocol = /^(https?:)?\\/\\//;\r\nfunction normalizeURL(ignoreList) {\r\n if (ignoreList === void 0) { ignoreList = []; }\r\n var list = ignoreList.concat(DEFAULT_IGNORE_LIST);\r\n // 把协议头剃掉,防止出现协议头不一致\r\n return list.map(function (url) { return url.replace(reProtocol, ''); });\r\n}\r\nfunction isInURLWhiteList(url, ignoreList) {\r\n if (!url)\r\n return false;\r\n var domainPath = url.replace(reProtocol, '');\r\n return ignoreList.some(function (whiteURL) {\r\n return domainPath.indexOf(whiteURL) >= 0;\r\n });\r\n}\r\n// 计算雷达自身耗时\r\nvar radarCost = {};\r\n// 保留拓展能力\r\nfunction radarPoint(name, open) {\r\n // if (!open) {\r\n // // 默认关闭 需要业务方手动开启\r\n // return\r\n // }\r\n var costName = radarCost[name];\r\n if (!costName) {\r\n radarCost[name] = { startTime: new Date().getTime() };\r\n }\r\n else if (!costName.endTime) {\r\n costName.endTime = new Date().getTime();\r\n costName.duration = costName.endTime - costName.startTime;\r\n delete costName.startTime;\r\n delete costName.endTime;\r\n }\r\n}\r\n/**\r\n * 收集chrome指标 比如lcp cls fid等\r\n * 会在unload事件里统一合并上报\r\n */\r\nfunction collectChromeMetrics(opt) {\r\n Object.assign(chromeMetric, opt);\r\n}\r\nvar chromeMetric = {};\r\nvar chromeMetricConfig = [\r\n { name: 'fid', collectFn: f },\r\n { name: 'lcp', collectFn: g },\r\n { name: 'cls', collectFn: p }\r\n];\r\n// 取消通过客户端注入脚本来收集错误\r\nvar removeBridgeJsErrorCollect = function () {\r\n if (typeof window !== 'undefined') {\r\n window.yodaCollectErrorDataDestroy && window.yodaCollectErrorDataDestroy();\r\n }\r\n};\r\n// 雷达通用debug函数\r\nvar radarWarnLog = function (type, value) {\r\n var query = parseQueryString(location.search.slice(1));\r\n if (+getCookie('debug') === 1 || +query.debug === 1) {\r\n console.warn(\"[radar] \" + type + \": \", value);\r\n }\r\n};\r\n/**\r\n * @file 对 radar 的数据进行预处理\r\n */\r\nfunction squashData(data) {\r\n var loadLog = null;\r\n var j = 0;\r\n var i = 0;\r\n // @ts-ignore\r\n for (; i < data.length; i++) {\r\n if (data[i].key === 'load') {\r\n loadLog = data[i];\r\n }\r\n else {\r\n data[j++] = data[i];\r\n }\r\n }\r\n data.length = j;\r\n return loadLog;\r\n}\r\nfunction formatYodaRadarData(options) {\r\n if (!options.value)\r\n return options;\r\n var params = options.value;\r\n // 过滤出最后一条load数据\r\n var loadLog = squashData(params.data);\r\n var commomParams = {\r\n project_id: params.project_id,\r\n app_version_name: params.app_version_name,\r\n url_package: params.url_package,\r\n // 统一传下划线格式\r\n h5_extra_attr: options.h5ExtraAttr,\r\n };\r\n return {\r\n loadLog: loadLog ? {\r\n removeStashedLog: [],\r\n sendImmediate: loadLog.dimension.sendImmediate,\r\n customData: _assign({ data: [loadLog] }, commomParams),\r\n } : null,\r\n commonLog: {\r\n removeStashedLog: [],\r\n sendImmediate: true,\r\n customData: _assign({ data: params.data }, commomParams),\r\n },\r\n };\r\n}\r\nvar getUAList = function () {\r\n var ua = window.navigator.userAgent;\r\n var uaList = {};\r\n ua.split(' ').map(function (item) {\r\n var arr = item.split('/');\r\n uaList[arr[0]] = arr[1];\r\n });\r\n return uaList;\r\n};\r\n// 获取webview_type\r\nvar getWebViewType = function () {\r\n var ua = window.navigator.userAgent;\r\n if (ua.indexOf('Android') !== -1) {\r\n return 'WebView';\r\n }\r\n if (ua.indexOf('iPhone') !== -1) {\r\n var uaList = getUAList();\r\n if (uaList.Yoda && uaList.WebViewType === 'WK') {\r\n return 'YodaWKWebView';\r\n }\r\n if (!uaList.Yoda && uaList.WebView === 'WKWebView') {\r\n return 'WKWebView';\r\n }\r\n return 'UIWebView';\r\n }\r\n return '';\r\n};\r\nvar formatLoadTime = function (timing, entry) {\r\n var res = {};\r\n Object.keys(entry).forEach(function (item) {\r\n if (timing[entry[item]] > 0) {\r\n res[item] = timing[entry[item]];\r\n }\r\n });\r\n return res;\r\n};\r\n// 判断是否在第四tab环境下\r\nvar check4Tab = function () {\r\n var ua = window.navigator.userAgent;\r\n // tbht不等于0\r\n var reg = /tbht\\/([\\w]+)/i;\r\n var res = ua.match(reg);\r\n return res && res[1] !== '0';\r\n};\r\n// 处理 DOM 路径,获取可读性强的列表\r\nfunction composedPath(path) {\r\n // 兼容下低版本安卓机报错问题。。\r\n if (!Array.isArray(path))\r\n return '';\r\n var eleList = path.map(function (ele) {\r\n var _a = ele.tagName, tagName = _a === void 0 ? '' : _a, id = ele.id;\r\n // className在不同的dom中获取的方式不同\r\n var className = ele.getAttribute ?\r\n ele.getAttribute('class') :\r\n ele.className || '';\r\n var item = tagName.toLowerCase();\r\n if (id)\r\n item += \"#\" + id;\r\n if (className)\r\n item += className.split(/\\s+/g).map(function (v) { return \".\" + v; }).join('');\r\n return item;\r\n });\r\n // window 取不出来,感觉意义不大,直接过滤掉吧\r\n return eleList.filter(function (v) { return v; }).join(',');\r\n}\n\nvar KWAI_KPN = ['KUAISHOU', 'THANOS', 'NEBULA'];\r\nvar REPORT_THRESSHOLD = 60 * 1000;\r\nvar RadarRoot = /** @class */ (function (_super) {\r\n __extends(RadarRoot, _super);\r\n function RadarRoot(weblog, options) {\r\n var _this = _super.call(this) || this;\r\n _this.kpn = getDefaultKpn();\r\n _this.plugins = [];\r\n _this.logQueue = [];\r\n _this.queueConfig = {\r\n // 每1s清空一次queue\r\n wait: 1000,\r\n maxBatchLength: 200,\r\n };\r\n _this.eventName = 'onpagehide' in window ? 'pagehide' : 'beforeunload';\r\n _this.batchTimer = 0;\r\n _this.startedLoadReport = false;\r\n _this.radarSessionId = '';\r\n _this.chromeMetric = chromeMetricConfig;\r\n _this.isInKwai = KWAI_KPN.indexOf(_this.kpn) >= 0;\r\n _this.isUsingBridge = null;\r\n _this.isUsingLegacy = null;\r\n _this.isUsingDetachedReport = null;\r\n _this.isSupportedYodaConcat = null;\r\n _this.customDimension = {};\r\n // 默认忽略列表\r\n _this.ignoreList = ['https://web-trace.ksapisrv.com/ktrace/collect'];\r\n _this.lastRadarLogId = '';\r\n // 当初始化时没获取到kswitch数据时 为true 表示需要在flush时重新计算采样率\r\n _this.computedSamplingAgain = true;\r\n _this.realSampledList = [];\r\n _this.observeResource = function (perf) {\r\n perf.getEntriesByType('resource')\r\n .forEach(function (v) { return _this.reportPerformance(v); });\r\n };\r\n _this.asyncReportTiming = function () {\r\n // onload之后的调用会影响该时间戳\r\n radarPoint('radarCreatedToOnload');\r\n radarPoint('onloadToFirstReport');\r\n setTimeout(function () {\r\n // 雷达自身的时间戳 不受影响\r\n radarPoint('asyncReportTiming');\r\n _this.reportPerformance(navigationTiming());\r\n _this.startedLoadReport = true;\r\n try {\r\n // 先上报一部分已经生成的 entries 数据\r\n _this.observeResource(performance);\r\n // 收集lcp等数据信息\r\n _this.observeChromeMetrics(_this.chromeMetric);\r\n new PerformanceObserver(_this.observeResource)\r\n .observe({ entryTypes: ['resource'] });\r\n }\r\n catch (e) {\r\n warn('[Radar] 由于不支持 Performance API Level 2,只进行请求监控和异常监控');\r\n }\r\n // 注册radar-第一次上报的时间\r\n // created-firstReport = async-report + register-1\r\n // new weblog之后 至 onload + unload 至 firstReport\r\n radarPoint('radarCreatedToFirstReport');\r\n radarPoint('onloadToFirstReport');\r\n radarPoint('asyncReportTiming');\r\n }, 1000); // 延迟一秒上报,确保不阻塞 fmp 和 total 等性能数据\r\n };\r\n _this.chromeMetricCallback = function (opt) {\r\n var _a, _b;\r\n var name = opt.name, value = opt.value;\r\n name = name.toLocaleLowerCase();\r\n _this.logCollect({\r\n key: RADAR_KEY.CUSTOM,\r\n value: (_a = {},\r\n _a[name] = value,\r\n _a)\r\n });\r\n radarPoint(name + \"Collect\");\r\n collectChromeMetrics((_b = {}, _b[name] = value, _b));\r\n };\r\n _this.observeChromeMetrics = function (arr) {\r\n // 默认配置几项可收集指标\r\n var options = _this.options;\r\n // 判断默认不主动上报,由业务进行配置\r\n arr.forEach(function (metric) {\r\n // 收集数据\r\n var name = metric.name;\r\n if (!options || options[name]) {\r\n radarPoint(name + \"Collect\");\r\n metric.collectFn(_this.chromeMetricCallback);\r\n }\r\n });\r\n };\r\n // 监听异步指标耗时上报情况,确保耗时数据完善\r\n // 通过unload事件上报\r\n _this.asyncMetricCollectDone = function () {\r\n // 格式 key:duration⬇️\r\n var radarCostResult = {};\r\n Object.keys(radarCost).forEach(function (radar) {\r\n var costItem = radarCost[radar];\r\n if (!costItem.duration && costItem.startTime) {\r\n // 防止有部分指标在unload的时候未收集完毕,默认置0\r\n costItem.duration = 0;\r\n delete costItem.startTime;\r\n }\r\n radarCostResult[radar] = costItem.duration;\r\n });\r\n _this.logCollect({\r\n key: RADAR_KEY.CUSTOM,\r\n value: radarCostResult\r\n });\r\n _this.flush();\r\n _this.weblog.flush();\r\n // 上报完毕删除监听\r\n removeMonitor(window, _this.eventName, _this.asyncMetricCollectDone);\r\n };\r\n _this.flush = function () {\r\n _this.beforeFlush();\r\n if (!_this.options) {\r\n return;\r\n }\r\n if (_this.logQueue.length <= 0) {\r\n return;\r\n }\r\n // 初次上报之前都暂时存一下比较稳妥\r\n if (!_this.startedLoadReport) {\r\n return;\r\n }\r\n var h5_extra_attr = JSON.stringify(_assign(_assign({}, _this.weblog.commomPackage.getH5ExtraAttr()), { \r\n // radar自定义新增非value字段可以加在这里\r\n // 获取客户端版本\r\n app_version_name: _this.weblog.commomPackage.getVersionName(), url: location.href }));\r\n // 判断端环境\r\n // \b数据侧在业务设置了pagename的时候无法获取到真实的url,雷达这块重新写一次忽略pagename的逻辑比较复杂 故提供一个新的字段\r\n // radar_h5_extra_attr和radar_custom_extra_attr 共有字段app_version_name\r\n // 上报位置 custom_stat_event.value和h5_extra_attr\r\n var commonLogData = {\r\n project_id: _this.options.projectId,\r\n radar_session_id: _this.radarSessionId,\r\n h5_extra_attr: h5_extra_attr\r\n };\r\n var _a = _this.weblog.commomPackage, service_name = _a.service_name, sub_biz = _a.sub_biz, need_encrypt = _a.need_encrypt, app_package = _a.app_package;\r\n // @ts-ignore\r\n var currentUrlPackage = _this.currentUrlPackage && _this.currentUrlPackage.toJSON();\r\n // const key = this.isUsingLegacy ? LEGACY_KEY : KEY;\r\n // 尝试先直接桥接上报\r\n var sended = null;\r\n // 如果配置了优先http上报则不使用bridge上报数据\r\n if (!_this.options.httpReportFirst) {\r\n sended = _this.addRadarStatEvent({\r\n key: KEY,\r\n value: _assign(_assign({}, commonLogData), { data: _this.logQueue, \r\n // @ts-ignore\r\n url_package: currentUrlPackage, app_version_name: app_package.version_name }),\r\n serviceName: service_name || '',\r\n subBiz: sub_biz || '',\r\n needEncrypt: need_encrypt || false,\r\n container: app_package.container,\r\n realtime: false,\r\n // 统一改成下划线格式\r\n h5ExtraAttr: h5_extra_attr\r\n });\r\n }\r\n // 桥接上报失败使用 weblogger 自定义事件上报\r\n if (!sended || _this.options.httpReportFirst) {\r\n _this.weblog.collect('RADAR', {\r\n name: KEY,\r\n params: _assign(_assign({}, commonLogData), { data: _this.logQueue }),\r\n currentUrlPackage: currentUrlPackage,\r\n // @ts-ignore\r\n referUrlPackage: _this.referUrlPackage && _this.referUrlPackage.toJSON(),\r\n });\r\n }\r\n _this.logQueue = [];\r\n };\r\n // 兼容处理\r\n var opts;\r\n if (options) {\r\n opts = options;\r\n }\r\n if (weblog) {\r\n if (weblog.logger) {\r\n _this.apply(weblog);\r\n }\r\n else {\r\n opts = weblog;\r\n }\r\n }\r\n radarPoint('radarCreatedToFirstReport');\r\n radarPoint('radarCreatedToOnload');\r\n _this.options = opts;\r\n _this.queueConfig = _assign(_assign({}, _this.queueConfig), (_this.options ? _this.options.queue : {}));\r\n // FIXME\r\n _this.ignoreList = _this.ignoreList.concat(normalizeURL(_this.options && _this.options.ignoreList));\r\n return _this;\r\n }\r\n Object.defineProperty(RadarRoot.prototype, \"KSwitchSampled\", {\r\n get: function () {\r\n // @ts-ignore\r\n return this.weblog.currentUrlPackage.sampled;\r\n },\r\n enumerable: false,\r\n configurable: true\r\n });\r\n Object.defineProperty(RadarRoot.prototype, \"isKSwitchSampled\", {\r\n get: function () {\r\n // @ts-ignore\r\n return this.weblog.isKSwitchSampled;\r\n },\r\n enumerable: false,\r\n configurable: true\r\n });\r\n // 采样控制 迁移自radar.ts 子类重写该方法\r\n RadarRoot.prototype.samplingControl = function (options) {\r\n if (!options) {\r\n return false;\r\n }\r\n // 计算随机数\r\n var rand = Math.random();\r\n if (typeof options === 'number') {\r\n // 传入的是单一模块采样率 无需从options中取值\r\n return rand < options;\r\n }\r\n // radar整体采样率逻辑\r\n var sampling = options.sampling;\r\n return rand < sampling;\r\n };\r\n RadarRoot.prototype.use = function (plugin, ctx) {\r\n var usedPlugin = new plugin(ctx, this.options);\r\n this.plugins.push(usedPlugin);\r\n // 如果是旧式引用,use 是在 apply 之后调用。\r\n if (this.weblog) {\r\n usedPlugin.created();\r\n }\r\n };\r\n RadarRoot.prototype.apply = function (weblog) {\r\n this.weblog = weblog;\r\n this.upadteUrlPackage();\r\n this.register();\r\n this.ignoreList.push(this.weblog.logger.url);\r\n // 业务侧new Radar时 是不会传入weblog对象的 apply方法在weblogger插件内调用 并传入weblogger对象\r\n // 业务侧传入radar时,weblogger通过plug方法实例化radar并传入weblogger对象 此时由雷达自身调用apply方法\r\n // 结论:在调用apply方法时一定会存在weblogger对象\r\n this.created();\r\n };\r\n RadarRoot.prototype.created = function () {\r\n // 通过apply调用created,旧式引用时 plugins 为空\r\n this.plugins.forEach(function (plugin) {\r\n plugin.created();\r\n });\r\n };\r\n RadarRoot.prototype.destroy = function () {\r\n removeMonitor(window, 'load', this.asyncReportTiming);\r\n this.plugins.forEach(function (plugin) {\r\n plugin.destroy();\r\n });\r\n };\r\n RadarRoot.prototype.computedRealSampled = function (sampling, type) {\r\n // 请求kswitch后|通过h5上报\r\n if (this.isKSwitchSampled) {\r\n var KSwitchSampling = void 0;\r\n if (typeof this.KSwitchSampled === 'object' && this.KSwitchSampled['radar']) {\r\n var allSample = this.KSwitchSampled['radar']['all'];\r\n allSample = typeof allSample !== 'number' ? 1 : allSample;\r\n var theSample = this.KSwitchSampled['radar'][type];\r\n // load等采样率和all是相乘关系\r\n KSwitchSampling = typeof theSample !== 'number' ? allSample : (theSample * allSample);\r\n }\r\n else {\r\n // if (typeof this.KSwitchSampled === 'boolean') 只有这两种情况\r\n KSwitchSampling = this.KSwitchSampled ? 1 : 0;\r\n }\r\n return KSwitchSampling * sampling;\r\n }\r\n else {\r\n return 1;\r\n // bridge没有返回 先按全量收集,flush的时候在重新检测\r\n }\r\n };\r\n /**\r\n * 通过 perf level 2 注册监听事件\r\n * 实际测试需要处理几个 case:\r\n * 1. 部分浏览器只支持 level 1\r\n * 2. 部分浏览器在 PerformanceObserver 时没有 navigation 事件\r\n */\r\n RadarRoot.prototype.register = function () {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var yoda, _a, _b;\r\n return __generator(this, function (_c) {\r\n switch (_c.label) {\r\n case 0:\r\n // 不支持 level 1\r\n if (!navigationTiming()) {\r\n warn('[Radar] 由于不支持 Performance API,只进行请求监控和异常监控');\r\n return [2 /*return*/];\r\n }\r\n // 鉴于部分浏览器虽然支持 level2,但 observer 时没有 navigation 事件\r\n // 因此这里直接上报 level1 的数据(反正不需要高精度数据)\r\n // remove js注入的 error事件 后续会通过radar收集上报\r\n removeBridgeJsErrorCollect();\r\n // 兼容业务在onload之后实例化雷达 所以手动调用一次上报方法\r\n if (performance.timing.loadEventEnd > 0) {\r\n this.asyncReportTiming();\r\n }\r\n else {\r\n addMonitor(window, 'load', this.asyncReportTiming);\r\n }\r\n if (this.options && this.options.radarCost) {\r\n // 默认不上报雷达自身耗时\r\n addMonitor(window, this.eventName, this.asyncMetricCollectDone);\r\n }\r\n // beforeunload时清空当前logqueue\r\n addMonitor(window, this.eventName, this.flush);\r\n yoda = this.weblog.Utils.yoda;\r\n if (!!yoda) return [3 /*break*/, 1];\r\n this.isUsingBridge = false;\r\n this.isSupportedYodaConcat = false;\r\n this.isUsingLegacy = false;\r\n return [3 /*break*/, 6];\r\n case 1:\r\n if (!(this.isUsingBridge == null)) return [3 /*break*/, 3];\r\n _a = this;\r\n return [4 /*yield*/, yoda.isSupportBridge()];\r\n case 2:\r\n _a.isUsingBridge = _c.sent();\r\n _c.label = 3;\r\n case 3:\r\n if (!(this.isSupportedYodaConcat == null)) return [3 /*break*/, 5];\r\n _b = this;\r\n return [4 /*yield*/, yoda.isSupportBridge(PAGELOG_API)];\r\n case 4:\r\n _b.isSupportedYodaConcat = _c.sent();\r\n _c.label = 5;\r\n case 5:\r\n this.isUsingLegacy = this.isUsingBridge && !this.isSupportedYodaConcat;\r\n _c.label = 6;\r\n case 6:\r\n // 生成唯一sessionid\r\n this.radarSessionId = this.nanoId();\r\n // 这里需要注意:在客户端内,而且不支持 bridge,或者支持 bridge 但不支持 yodaConcat\r\n this.isUsingDetachedReport = (this.isInKwai && !this.isUsingBridge) || this.isUsingLegacy;\r\n return [2 /*return*/];\r\n }\r\n });\r\n });\r\n };\r\n /**\r\n * 处理上报超出阈值的情况\r\n */\r\n RadarRoot.prototype.throttle = function (value, perf, key, detail) {\r\n if (detail === void 0) { detail = {}; }\r\n if (perf.noThrottle || typeof value !== 'number')\r\n return value;\r\n var startPoint = detail.startPoint, endPoint = detail.endPoint;\r\n // 间隔超过一定阈值,认为上报的有问题,不上报并记录日志\r\n // NaN数据也算作一种异常情况 不上报\r\n // 雷达的异常数据采样10%\r\n if (value > REPORT_THRESSHOLD || value < 0 || isNaN(value)) {\r\n if ((Math.random() < 0.1)) {\r\n var msg = \"[\" + key + \" \\u5F02\\u5E38]: \" + value + \"\\uFF0C\\u539F\\u59CB\\u6570\\u636E\\u4E3A\\uFF1A\" + perf.end + \": \" + endPoint + \" - \" + perf.start + \": \" + startPoint;\r\n this.logCollect({\r\n key: RADAR_KEY.EVENT,\r\n value: null,\r\n dimension: {\r\n name: '雷达数据异常',\r\n event_type: 'radar_error',\r\n message: msg,\r\n src: location.href,\r\n webViewType: getWebViewType(),\r\n yoda_version: getUAList().yoda_version || '',\r\n }\r\n });\r\n }\r\n return null;\r\n }\r\n return Math.round(value);\r\n };\r\n RadarRoot.prototype.reportPerformance = function (entry) {\r\n this.plugins.forEach(function (plugin) {\r\n if (!plugin.when(entry)) {\r\n return;\r\n }\r\n plugin.onPerfReport(entry);\r\n });\r\n };\r\n // 处理上报计算逻辑\r\n RadarRoot.prototype.calculate = function (key, perfMap, timing) {\r\n var perf = perfMap[key];\r\n if (!perf) {\r\n error(\"perf key \" + key + \" is unexpected!\");\r\n return;\r\n }\r\n // 当资源有缓存时,好多数据为 0,不进行无意义的上报\r\n if (perf.cachedSkip) {\r\n var cached = this.calculate('cached', perfMap, timing);\r\n if (cached)\r\n return;\r\n }\r\n if (typeof perf.custom === 'function') {\r\n var value_1 = perf.custom(key, timing);\r\n return this.throttle(value_1, perf, key);\r\n }\r\n var end = perf.end, start = perf.start;\r\n // 由于webview数据上报的时候 不会带上performance.time导致timing['fmp']之类的数据为NaN无法计算\r\n //计算webview指标时 timing[end as keyof PerfTime] 可能为undefined 故兼容一下\r\n // @ts-ignore\r\n var endPoint = +timing[end] || performance.timing[end];\r\n // @ts-ignore\r\n var startPoint = +timing[start] || performance.timing[start];\r\n // console.log(`[info] ${key} –> ${end}: ${endPoint} - ${start}: ${startPoint} = ${endPoint - startPoint}`);\r\n var value = endPoint - startPoint;\r\n // 间隔超过一定阈值,认为上报的有问题,不上报并记录日志\r\n return this.throttle(value, perf, key, { startPoint: startPoint, endPoint: endPoint });\r\n };\r\n // FIXME\r\n RadarRoot.prototype.generateLog = function (perfMap, timing) {\r\n var _this = this;\r\n var allPerf = {};\r\n // 批量处理日志生成\r\n Object.keys(perfMap).forEach(function (k) {\r\n var key = k;\r\n var value = _this.calculate(key, perfMap, timing);\r\n // 可能存在一些值取不到的情况,取不到的话就不上报\r\n if (value != null) {\r\n // @ts-ignore\r\n allPerf[key] = value;\r\n }\r\n });\r\n return allPerf;\r\n };\r\n RadarRoot.prototype.subDimension = function (logData) {\r\n if (this.customDimension) {\r\n if (!logData.dimension) {\r\n logData.dimension = {};\r\n }\r\n Object.assign(logData.dimension, this.customDimension);\r\n }\r\n };\r\n /**\r\n * 生成nano id\r\n * 目前radarsessionid生成逻辑与weblog相同,防止weblog修改,雷达自身保存一份\r\n * @return {string} 16长度的字符串\r\n */\r\n RadarRoot.prototype.nanoId = function () {\r\n var ts = ((Math.random() * 1e9) >>> 0);\r\n var randomer = [];\r\n var seed = '0123456789ABCDEF';\r\n for (var i = 0; i < 7; i++) {\r\n randomer.push(seed.charAt(Math.random() * 16));\r\n }\r\n return ts + randomer.join('');\r\n };\r\n // flush上报之前重新探测一下采样率的问题\r\n RadarRoot.prototype.beforeFlush = function () {\r\n // 这里不关心weblogger的采样率\r\n var _this = this;\r\n if (this.computedSamplingAgain) {\r\n // 第一次flush\r\n var samplingList_1 = {\r\n radarLoadSampling: { sampling: 1, type: 'load' },\r\n radarApiSampling: { sampling: this.options && this.options.apiSampling || 1, type: 'api' },\r\n radarErrorSampling: { sampling: this.options && this.options.errorSampling || 1, type: 'error' },\r\n radarResourceSampling: { sampling: this.options && this.options.resourceSampling || 0.1, type: 'resource' },\r\n radarCustomSampling: { sampling: this.options && this.options.customSampling || 1, type: 'custom' },\r\n radarEventSampling: { sampling: this.options && this.options.eventSampling || 1, type: 'event' },\r\n };\r\n this.realSampledList = [];\r\n Object.keys(samplingList_1).forEach(function (item) {\r\n // 计算出每个模块的采样率\r\n var sampling = _this.isKSwitchSampled ?\r\n // 初始化的时候 kswitch没有返回且 flush时 发现kswitch有返回了 重新计算\r\n // load默认为1 其他根据业务配置取值\r\n _this.samplingControl(_this.computedRealSampled(samplingList_1[item]['sampling'], samplingList_1[item]['type']))\r\n // 采样率为用户配置的采样率\r\n : _this.samplingControl(samplingList_1[item]);\r\n if (sampling) {\r\n _this.realSampledList.push(samplingList_1[item]['type']);\r\n }\r\n });\r\n if (this.isKSwitchSampled) {\r\n this.computedSamplingAgain = false;\r\n }\r\n }\r\n // 把没采样的数据从logqueue中洗出来。。。。。\r\n this.logQueue = this.logQueue.filter(function (log) { return _this.realSampledList.indexOf(log.key) !== -1; });\r\n };\r\n RadarRoot.prototype.upadteUrlPackage = function () {\r\n if (!this.weblog)\r\n return;\r\n this.computedSamplingAgain = true;\r\n // 通过 toJSON 确保 page 和 params 是日志产生时的信息\r\n // @ts-ignore\r\n this.currentUrlPackage = this.weblog.currentUrlPackage;\r\n // @ts-ignore\r\n this.referUrlPackage = this.weblog.referUrlPackage;\r\n };\r\n RadarRoot.prototype.decorateLog = function (kv) {\r\n if (!this.currentUrlPackage) {\r\n this.upadteUrlPackage();\r\n }\r\n if (this.customDimension) {\r\n this.subDimension(kv);\r\n }\r\n // if (this.isUsingLegacy) {\r\n // // @ts-ignore\r\n // kv.key = kv.key + '_statistics';\r\n // }\r\n // 由于 url 是日志公参,因此 url 发生变化时直接冲刷日志\r\n if (this.currentUrlPackage && this.currentUrlPackage.page !== this.weblog.currentUrlPackage.page) {\r\n this.flush();\r\n this.upadteUrlPackage();\r\n }\r\n };\r\n RadarRoot.prototype.logCollect = function (kv) {\r\n var _this = this;\r\n radarWarnLog('radarLog', kv);\r\n if (!this.options) {\r\n return;\r\n }\r\n // 不再防抖 改为节流\r\n // if (this.batchTimer) {\r\n // clearTimeout(this.batchTimer);\r\n // }\r\n this.decorateLog(kv);\r\n window.dispatchEvent(new CustomEvent('get-radar-data', {\r\n detail: {\r\n kv: kv,\r\n },\r\n }));\r\n // 当已经收集到load数据时 不会继续push 防止同时收集到多条load数据 适用于bridge和http上报\r\n var needPush = true;\r\n if (kv.key === 'load') {\r\n for (var i = 0; i < this.logQueue.length; i++) {\r\n var item = this.logQueue[i];\r\n if (item.key === 'load') {\r\n Object.assign(item, kv);\r\n needPush = false;\r\n break;\r\n }\r\n }\r\n }\r\n needPush && this.logQueue.push(kv);\r\n // 上报窗口期内 不再创建定时器 只压入队列\r\n // flush判断当前情况是否可上报 包括采样,空队列等情况\r\n if (this.batchTimer) {\r\n return;\r\n }\r\n if (this.logQueue.length > this.queueConfig.maxBatchLength) {\r\n this.flush();\r\n return;\r\n }\r\n // 每隔wait秒上报一次数据 并在pagehide时上报所有logqueue里的数据\r\n this.batchTimer = window.setTimeout(function () {\r\n _this.flush();\r\n clearTimeout(_this.batchTimer);\r\n _this.batchTimer = 0;\r\n }, this.queueConfig.wait);\r\n };\r\n RadarRoot.prototype.addRadarStatEvent = function (log) {\r\n var _this = this;\r\n try {\r\n var yoda = this.weblog.Utils.yoda;\r\n if (!yoda) {\r\n return false;\r\n }\r\n var _a = formatYodaRadarData(log), loadLog = _a.loadLog, commonLog = _a.commonLog;\r\n if (loadLog) {\r\n if (this.lastRadarLogId) {\r\n loadLog.removeStashedLog = [this.lastRadarLogId];\r\n // 如果报进来的是一条sendImmediate为true的数据 且在之前已经上报过一条 load数据\r\n // 则需要覆盖掉上一条load 保证客户端在destory的时候只上报一次load数据\r\n if (loadLog.sendImmediate) {\r\n // 当本条load数据是sendImmediate = true时 清除上一条false的数据\r\n var empytLoadData = {\r\n removeStashedLog: [this.lastRadarLogId],\r\n sendImmediate: false,\r\n custom: { \"\": \"\" }\r\n };\r\n yoda.sendRadarLog(empytLoadData).then(function (res) {\r\n if (res && res.logId) {\r\n _this.lastRadarLogId = res.logId;\r\n }\r\n });\r\n }\r\n }\r\n yoda.sendRadarLog(loadLog).then(function (res) {\r\n if (res && res.logId) {\r\n _this.lastRadarLogId = res.logId;\r\n }\r\n });\r\n }\r\n if (commonLog) {\r\n yoda.sendRadarLog(commonLog);\r\n }\r\n return true;\r\n }\r\n catch (err) {\r\n return false;\r\n }\r\n };\r\n return RadarRoot;\r\n}(BasePlugin));\n\n/**\r\n * @file 对于每个 Plugin 的共性,使用一个抽象类来描述\r\n */\r\nvar RadarPlugin = /** @class */ (function () {\r\n function RadarPlugin(radar, options) {\r\n this.radar = radar;\r\n this.options = options;\r\n }\r\n return RadarPlugin;\r\n}());\n\nvar Navigation = /** @class */ (function (_super) {\r\n __extends(Navigation, _super);\r\n function Navigation() {\r\n var _this = _super !== null && _super.apply(this, arguments) || this;\r\n _this.key = 'navigation';\r\n _this.eventName = 'onpagehide' in window ? 'pagehide' : 'beforeunload';\r\n _this.logData = {};\r\n _this.logSended = false;\r\n _this.saveWebviewEntry = {};\r\n _this.hasReportBase = false;\r\n _this.record = {\r\n fmp: false,\r\n base: false,\r\n webviewPerf: false\r\n };\r\n // 端外延迟2s的timeout\r\n _this.loadTimeout = null;\r\n // 按照苗老师处理页面离开行为的思路来进行页面性能上报\r\n _this.reportOnUnload = function (flush) {\r\n // 走 yoda 通道的不额外上报\r\n if (_this.logSended || _this.radar.isSupportedYodaConcat)\r\n return;\r\n _this.logSended = true;\r\n // FIXME: 上报差值,有点丑\r\n _this.reportFirstScreen(Object.assign(_this.logData, chromeMetric));\r\n _this.radar.logCollect(_this.data);\r\n if (flush !== 'noflash') {\r\n _this.radar.flush();\r\n _this.radar.weblog.flush();\r\n }\r\n };\r\n return _this;\r\n }\r\n Object.defineProperty(Navigation.prototype, \"sendImmediate\", {\r\n // 立即上报\r\n get: function () {\r\n return this.record.fmp && this.record.base && this.record.webviewPerf && !!check4Tab();\r\n },\r\n enumerable: false,\r\n configurable: true\r\n });\r\n Object.defineProperty(Navigation.prototype, \"data\", {\r\n get: function () {\r\n return this.sepDimension({\r\n key: RADAR_KEY.LOAD,\r\n value: this.logData,\r\n });\r\n },\r\n enumerable: false,\r\n configurable: true\r\n });\r\n Navigation.prototype.created = function () {\r\n return __awaiter(this, void 0, void 0, function () {\r\n return __generator(this, function (_a) {\r\n return [2 /*return*/];\r\n });\r\n });\r\n };\r\n Navigation.prototype.when = function (entry) {\r\n // 接受 fmp/play_clicked/play_idr 三个自定义指标\r\n if (entry.custom) {\r\n var key = (entry.entry || {}).key;\r\n if (['fmp', 'play_clicked', 'play_idr', 'webViewPerf'].indexOf(key) > -1) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n // 接受 level1 和 level2\r\n return !entry.entryType\r\n || entry.entryType === 'navigation';\r\n };\r\n Navigation.prototype.getWebviewLoadData = function () {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var yoda, webviewPerf, _a, _b, userStart, pageStart;\r\n return __generator(this, function (_c) {\r\n switch (_c.label) {\r\n case 0:\r\n if (this.record.webviewPerf) {\r\n // 禁止重复获取\r\n return [2 /*return*/];\r\n }\r\n yoda = this.radar.weblog.Utils.yoda;\r\n _a = yoda;\r\n if (!_a) return [3 /*break*/, 2];\r\n return [4 /*yield*/, yoda.getWebviewLoadPerf()];\r\n case 1:\r\n _a = (_c.sent());\r\n _c.label = 2;\r\n case 2:\r\n webviewPerf = _a;\r\n // 调用成功后更改状态 如果第一次调用失败 会在unload之前再调用一次\r\n // 兼容旧版本客户端webviewPerf是一个空对象的问题\r\n if (webviewPerf && webviewPerf.timeData) {\r\n // 没有获取到就不上报\r\n this.record.webviewPerf = true;\r\n _b = webviewPerf.timeData, userStart = _b.userStart, pageStart = _b.pageStart;\r\n if (!userStart) {\r\n webviewPerf.timeData.userStart = pageStart;\r\n }\r\n this.onPerfReport({\r\n custom: true,\r\n entry: {\r\n key: 'webViewPerf',\r\n // 客户端返回数据为\r\n /**\r\n {\r\n result:number\r\n timeData:{string:number}\r\n }\r\n */\r\n value: webviewPerf.timeData,\r\n },\r\n });\r\n }\r\n return [2 /*return*/];\r\n }\r\n });\r\n });\r\n };\r\n Navigation.prototype.onPerfReport = function (entry) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var data, key, value, renderTime, loadTime, webviewTiming, webviewEntry, webviewTiming, logData, loadTime;\r\n var _a;\r\n var _this = this;\r\n return __generator(this, function (_b) {\r\n if (entry.custom) {\r\n data = entry.entry;\r\n if (data) {\r\n key = data.key, value = data.value;\r\n renderTime = entry.renderTime;\r\n if (key === 'fmp') {\r\n // fmp晚于load上报时 为了得到fmo_time数据 需要重新计算一次loadtime,随着fmp上报\r\n performance.timing.radarFmp = renderTime;\r\n this.record.fmp = true;\r\n loadTime = formatLoadTime(performance.timing, loadTimestamp);\r\n Object.assign(this.logData, (_a = {}, _a[key] = value, _a), loadTime);\r\n this.getWebviewLoadData();\r\n if (this.record.webviewPerf) {\r\n webviewTiming = this.radar.generateLog(webviewPerfMap, this.saveWebviewEntry);\r\n Object.assign(this.logData, webviewTiming);\r\n }\r\n }\r\n if (key === 'webViewPerf') {\r\n webviewEntry = data.value;\r\n if (!webviewEntry) {\r\n // 说明没有收集到webview指标\r\n return [2 /*return*/];\r\n }\r\n this.saveWebviewEntry = webviewEntry;\r\n webviewTiming = this.radar.generateLog(webviewPerfMap, webviewEntry);\r\n Object.assign(this.logData, webviewTiming);\r\n }\r\n }\r\n }\r\n else {\r\n logData = this.radar.generateLog(domPerfMap, entry);\r\n loadTime = formatLoadTime(performance.timing, loadTimestamp);\r\n // 无重复字段 不会覆盖\r\n Object.assign(this.logData, logData, loadTime);\r\n this.record.base = true;\r\n }\r\n // yoda 通道每次收到自定义数据都合并上报一次\r\n // yodaAlready用于兼容radar.bridge 使用非桥接上报版本优先通过桥接上报 如果fmp上报先于yodaready,需要在这里做一个兜底,否则会丢数据\r\n if (this.radar.isSupportedYodaConcat) {\r\n /**\r\n * 目前有三个位置可以调用此方法\r\n * 1。onload事件\r\n * 2。fmp上报\r\n * 3. webviewPerf\r\n * 端内分几种情况:\r\n * 1. onload +webviewPerf = to_fmp为NaN 客户端侧上报为Null 清洗侧为0 其他正常\r\n * 2. onload +fmp 不会上报to_fmp等字段 清洗侧为null\r\n * 3. onload +fmp+webviewperf 正常上报\r\n */\r\n // 防止上报的fmp上报之后 yoda没有ready 所以每次上报都会调用一次 如果bridge之前调用成功过,则不会继续调用bridge\r\n this.getWebviewLoadData();\r\n this.radar.logCollect(this.data);\r\n }\r\n else if (this.radar.isUsingDetachedReport && this.record.webviewPerf && this.record.fmp && this.record.base) {\r\n // 这里是为了覆盖客户端版本过低 对bridge支持不好的情况\r\n // 端内对 unload 支持很差,先弄成三个信息都有就强制上报(可能无需上报webviewperf 由数据侧根据时间戳计算)\r\n // 没有yoda 无法获取webview信息 \r\n // 上报之前需要合并webviewtiming\r\n this.reportOnUnload('noflash');\r\n }\r\n else if (this.record.fmp && this.record.base && !this.hasReportBase) {\r\n // 端外有这两个数据就立即上报\r\n // 这里应用于fmp先于load被收集的场景 或\r\n // load被收集2s内收集到fmp的场景 此时hasReportBase为false\r\n /**\r\n * 端外有两种情况\r\n * 1.fmp先于load\r\n * 2.load先于fmp\r\n */\r\n clearTimeout(this.loadTimeout);\r\n this.loadTimeout = null;\r\n this.loadReport();\r\n }\r\n else if (!this.hasReportBase && this.record.base) {\r\n // 端外收集到load数据后延迟2s上报等待fmp数据 \r\n // 这里应用于load先于fmp被收集的场景\r\n this.loadTimeout = setTimeout(function () {\r\n _this.loadReport();\r\n _this.hasReportBase = true;\r\n }, 2000);\r\n }\r\n return [2 /*return*/];\r\n });\r\n });\r\n };\r\n Navigation.prototype.destroy = function () {\r\n clearTimeout(this.delay);\r\n removeMonitor(window, this.eventName, this.reportOnUnload);\r\n };\r\n Navigation.prototype.sepDimension = function (kv) {\r\n var key = kv.key;\r\n var _a = kv.value, protocol = _a.protocol, value = __rest(_a, [\"protocol\"]);\r\n var dimension = { protocol: protocol, sendImmediate: this.sendImmediate };\r\n return { key: key, value: value, dimension: dimension };\r\n };\r\n // FIXME:处理一下上报差值\r\n Navigation.prototype.reportFirstScreen = function (data) {\r\n if (data.play_clicked && data.play_idr) {\r\n var firstScreen = data.play_idr - data.play_clicked;\r\n if (firstScreen > 0 && firstScreen < 60000) {\r\n this.logData.play_first_screen = firstScreen;\r\n }\r\n }\r\n };\r\n // 强制上报当前收集到的数据\r\n Navigation.prototype.loadReport = function () {\r\n // 加入lcp数据\r\n Object.assign(this.logData, chromeMetric);\r\n this.radar.logCollect(this.data);\r\n this.radar.flush();\r\n this.radar.weblog.flush();\r\n };\r\n return Navigation;\r\n}(RadarPlugin));\n\n// const LOAD_REPORT_DELAY = 15 * 1000; // 加载上报日志\r\nvar Resource = /** @class */ (function (_super) {\r\n __extends(Resource, _super);\r\n function Resource() {\r\n var _this = _super !== null && _super.apply(this, arguments) || this;\r\n _this.key = 'resource';\r\n // 劫持 window.addEventListener('error')\r\n _this.onResError = function (e) {\r\n var isScriptError = _this.isScriptError(e);\r\n if (!isScriptError) {\r\n // resource报错 需要遵循resource插件的采样逻辑\r\n // 非脚本报错\r\n _this.radar.logCollect(_this.sepDimension({\r\n key: RADAR_KEY.RES,\r\n value: {\r\n failed: true,\r\n file: e.target.src,\r\n // cached: false,\r\n // @ts-ignore\r\n res_path: composedPath(e.path || (e.composedPath && e.composedPath())),\r\n },\r\n }));\r\n }\r\n };\r\n return _this;\r\n }\r\n Resource.prototype.created = function () {\r\n // Nothing\r\n addMonitor(window, 'error', this.onResError, true);\r\n };\r\n Resource.prototype.when = function (entry) {\r\n if (isInURLWhiteList(entry.name, this.radar.ignoreList)) {\r\n return false;\r\n }\r\n // load 这里可以接受自定义指标\r\n return entry.entryType === 'resource' && (entry.initiatorType !== 'fetch' && entry.initiatorType !== 'xmlhttprequest');\r\n };\r\n // 劫持 window onerror\r\n Resource.prototype.isScriptError = function (e) {\r\n // 有 message 基本上认为是脚本异常了\r\n return e.message || e.lineno != null;\r\n };\r\n Resource.prototype.onPerfReport = function (entry) {\r\n var logData = this.radar.generateLog(resPerfMap, entry);\r\n this.radar.logCollect(this.sepDimension({\r\n key: RADAR_KEY.RES,\r\n value: logData,\r\n }));\r\n };\r\n Resource.prototype.destroy = function () {\r\n // Nothing\r\n removeMonitor(window, 'error', this.onResError, true);\r\n };\r\n Resource.prototype.sepDimension = function (kv) {\r\n var key = kv.key;\r\n var _a = kv.value, protocol = _a.protocol, file = _a.file, cached = _a.cached, res_path = _a.res_path, failed = _a.failed, res_type = _a.res_type, value = __rest(_a, [\"protocol\", \"file\", \"cached\", \"res_path\", \"failed\", \"res_type\"]);\r\n var dimension = { protocol: protocol, file: file, cached: cached, failed: failed, res_path: res_path, res_type: res_type };\r\n return { key: key, value: value, dimension: dimension };\r\n };\r\n return Resource;\r\n}(RadarPlugin));\n\nvar xhook = createCommonjsModule(function (module) {\n // XHook - v1.4.9 - https://github.com/jpillora/xhook\n // Jaime Pillora - MIT Copyright 2021\n (function (window, undefined$1) {\n var AFTER,\n BEFORE,\n COMMON_EVENTS,\n EventEmitter,\n FETCH,\n FIRE,\n FormData,\n NativeFetch,\n NativeFormData,\n NativeXMLHttp,\n OFF,\n ON,\n READY_STATE,\n UPLOAD_EVENTS,\n WINDOW,\n XHookFetchRequest,\n XHookFormData,\n XHookHttpRequest,\n XMLHTTP,\n convertHeaders,\n depricatedProp,\n document,\n fakeEvent,\n mergeObjects,\n msie,\n nullify,\n proxyEvents,\n slice,\n useragent,\n xhook,\n _base,\n __indexOf = [].indexOf || function (item) {\n for (var i = 0, l = this.length; i < l; i++) {\n if (i in this && this[i] === item) return i;\n }\n\n return -1;\n };\n\n WINDOW = null;\n\n if (typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope) {\n WINDOW = self;\n } else if (typeof commonjsGlobal !== 'undefined') {\n WINDOW = commonjsGlobal;\n } else {\n WINDOW = window;\n }\n\n document = WINDOW.document;\n BEFORE = 'before';\n AFTER = 'after';\n READY_STATE = 'readyState';\n ON = 'addEventListener';\n OFF = 'removeEventListener';\n FIRE = 'dispatchEvent';\n XMLHTTP = 'XMLHttpRequest';\n FETCH = 'fetch';\n FormData = 'FormData';\n UPLOAD_EVENTS = ['load', 'loadend', 'loadstart'];\n COMMON_EVENTS = ['progress', 'abort', 'error', 'timeout'];\n useragent = typeof navigator !== 'undefined' && navigator['useragent'] ? navigator.userAgent : '';\n msie = parseInt((/msie (\\d+)/.exec(useragent.toLowerCase()) || [])[1]);\n\n if (isNaN(msie)) {\n msie = parseInt((/trident\\/.*; rv:(\\d+)/.exec(useragent.toLowerCase()) || [])[1]);\n }\n\n (_base = Array.prototype).indexOf || (_base.indexOf = function (item) {\n var i, x, _i, _len;\n\n for (i = _i = 0, _len = this.length; _i < _len; i = ++_i) {\n x = this[i];\n\n if (x === item) {\n return i;\n }\n }\n\n return -1;\n });\n\n slice = function slice(o, n) {\n return Array.prototype.slice.call(o, n);\n };\n\n depricatedProp = function depricatedProp(p) {\n return p === \"returnValue\" || p === \"totalSize\" || p === \"position\";\n };\n\n mergeObjects = function mergeObjects(src, dst) {\n var k;\n\n for (k in src) {\n src[k];\n\n if (depricatedProp(k)) {\n continue;\n }\n\n try {\n dst[k] = src[k];\n } catch (_error) {}\n }\n\n return dst;\n };\n\n nullify = function nullify(res) {\n if (res === void 0) {\n return null;\n }\n\n return res;\n };\n\n proxyEvents = function proxyEvents(events, src, dst) {\n var event, p, _i, _len;\n\n p = function p(event) {\n return function (e) {\n var clone, k, val;\n clone = {};\n\n for (k in e) {\n if (depricatedProp(k)) {\n continue;\n }\n\n val = e[k];\n clone[k] = val === src ? dst : val;\n }\n\n return dst[FIRE](event, clone);\n };\n };\n\n for (_i = 0, _len = events.length; _i < _len; _i++) {\n event = events[_i];\n\n if (dst._has(event)) {\n src[\"on\" + event] = p(event);\n }\n }\n };\n\n fakeEvent = function fakeEvent(type) {\n var msieEventObject;\n\n if (document && document.createEventObject != null) {\n msieEventObject = document.createEventObject();\n msieEventObject.type = type;\n return msieEventObject;\n } else {\n try {\n return new Event(type);\n } catch (_error) {\n return {\n type: type\n };\n }\n }\n };\n\n EventEmitter = function EventEmitter(nodeStyle) {\n var emitter, events, listeners;\n events = {};\n\n listeners = function listeners(event) {\n return events[event] || [];\n };\n\n emitter = {};\n\n emitter[ON] = function (event, callback, i) {\n events[event] = listeners(event);\n\n if (events[event].indexOf(callback) >= 0) {\n return;\n }\n\n i = i === undefined$1 ? events[event].length : i;\n events[event].splice(i, 0, callback);\n };\n\n emitter[OFF] = function (event, callback) {\n var i;\n\n if (event === undefined$1) {\n events = {};\n return;\n }\n\n if (callback === undefined$1) {\n events[event] = [];\n }\n\n i = listeners(event).indexOf(callback);\n\n if (i === -1) {\n return;\n }\n\n listeners(event).splice(i, 1);\n };\n\n emitter[FIRE] = function () {\n var args, event, i, legacylistener, listener, _i, _len, _ref;\n\n args = slice(arguments);\n event = args.shift();\n\n if (!nodeStyle) {\n args[0] = mergeObjects(args[0], fakeEvent(event));\n }\n\n legacylistener = emitter[\"on\" + event];\n\n if (legacylistener) {\n legacylistener.apply(emitter, args);\n }\n\n _ref = listeners(event).concat(listeners(\"*\"));\n\n for (i = _i = 0, _len = _ref.length; _i < _len; i = ++_i) {\n listener = _ref[i];\n listener.apply(emitter, args);\n }\n };\n\n emitter._has = function (event) {\n return !!(events[event] || emitter[\"on\" + event]);\n };\n\n if (nodeStyle) {\n emitter.listeners = function (event) {\n return slice(listeners(event));\n };\n\n emitter.on = emitter[ON];\n emitter.off = emitter[OFF];\n emitter.fire = emitter[FIRE];\n\n emitter.once = function (e, fn) {\n var _fire;\n\n _fire = function fire() {\n emitter.off(e, _fire);\n return fn.apply(null, arguments);\n };\n\n return emitter.on(e, _fire);\n };\n\n emitter.destroy = function () {\n return events = {};\n };\n }\n\n return emitter;\n };\n\n xhook = EventEmitter(true);\n xhook.EventEmitter = EventEmitter;\n\n xhook[BEFORE] = function (handler, i) {\n if (handler.length < 1 || handler.length > 2) {\n throw \"invalid hook\";\n }\n\n return xhook[ON](BEFORE, handler, i);\n };\n\n xhook[AFTER] = function (handler, i) {\n if (handler.length < 2 || handler.length > 3) {\n throw \"invalid hook\";\n }\n\n return xhook[ON](AFTER, handler, i);\n };\n\n xhook.enable = function () {\n WINDOW[XMLHTTP] = XHookHttpRequest;\n\n if (typeof XHookFetchRequest === \"function\") {\n WINDOW[FETCH] = XHookFetchRequest;\n }\n\n if (NativeFormData) {\n WINDOW[FormData] = XHookFormData;\n }\n };\n\n xhook.disable = function () {\n WINDOW[XMLHTTP] = xhook[XMLHTTP];\n WINDOW[FETCH] = xhook[FETCH];\n\n if (NativeFormData) {\n WINDOW[FormData] = NativeFormData;\n }\n };\n\n convertHeaders = xhook.headers = function (h, dest) {\n var header, headers, k, name, v, value, _i, _len, _ref;\n\n if (dest == null) {\n dest = {};\n }\n\n switch (_typeof(h)) {\n case \"object\":\n headers = [];\n\n for (k in h) {\n v = h[k];\n name = k.toLowerCase();\n headers.push(\"\" + name + \":\\t\" + v);\n }\n\n return headers.join('\\n') + '\\n';\n\n case \"string\":\n headers = h.split('\\n');\n\n for (_i = 0, _len = headers.length; _i < _len; _i++) {\n header = headers[_i];\n\n if (/([^:]+):\\s*(.+)/.test(header)) {\n name = (_ref = RegExp.$1) != null ? _ref.toLowerCase() : void 0;\n value = RegExp.$2;\n\n if (dest[name] == null) {\n dest[name] = value;\n }\n }\n }\n\n return dest;\n }\n };\n\n NativeFormData = WINDOW[FormData];\n\n XHookFormData = function XHookFormData(form) {\n var entries;\n this.fd = form ? new NativeFormData(form) : new NativeFormData();\n this.form = form;\n entries = [];\n Object.defineProperty(this, 'entries', {\n get: function get() {\n var fentries;\n fentries = !form ? [] : slice(form.querySelectorAll(\"input,select\")).filter(function (e) {\n var _ref;\n\n return (_ref = e.type) !== 'checkbox' && _ref !== 'radio' || e.checked;\n }).map(function (e) {\n return [e.name, e.type === \"file\" ? e.files : e.value];\n });\n return fentries.concat(entries);\n }\n });\n\n this.append = function (_this) {\n return function () {\n var args;\n args = slice(arguments);\n entries.push(args);\n return _this.fd.append.apply(_this.fd, args);\n };\n }(this);\n };\n\n if (NativeFormData) {\n xhook[FormData] = NativeFormData;\n WINDOW[FormData] = XHookFormData;\n }\n\n NativeXMLHttp = WINDOW[XMLHTTP];\n xhook[XMLHTTP] = NativeXMLHttp;\n\n XHookHttpRequest = WINDOW[XMLHTTP] = function () {\n var ABORTED, currentState, emitFinal, emitReadyState, event, facade, hasError, hasErrorHandler, readBody, readHead, request, response, setReadyState, status, transiting, writeBody, writeHead, xhr, _i, _len, _ref;\n\n ABORTED = -1;\n xhr = new xhook[XMLHTTP]();\n request = {};\n status = null;\n hasError = void 0;\n transiting = void 0;\n response = void 0;\n\n readHead = function readHead() {\n var key, name, val, _ref;\n\n response.status = status || xhr.status;\n\n if (!(status === ABORTED && msie < 10)) {\n response.statusText = xhr.statusText;\n }\n\n if (status !== ABORTED) {\n _ref = convertHeaders(xhr.getAllResponseHeaders());\n\n for (key in _ref) {\n val = _ref[key];\n\n if (!response.headers[key]) {\n name = key.toLowerCase();\n response.headers[name] = val;\n }\n }\n }\n };\n\n readBody = function readBody() {\n if (!xhr.responseType || xhr.responseType === \"text\") {\n response.text = xhr.responseText;\n response.data = xhr.responseText;\n\n try {\n response.xml = xhr.responseXML;\n } catch (_error) {}\n } else if (xhr.responseType === \"document\") {\n response.xml = xhr.responseXML;\n response.data = xhr.responseXML;\n } else {\n response.data = xhr.response;\n }\n\n if (\"responseURL\" in xhr) {\n response.finalUrl = xhr.responseURL;\n }\n };\n\n writeHead = function writeHead() {\n facade.status = response.status;\n facade.statusText = response.statusText;\n };\n\n writeBody = function writeBody() {\n if ('text' in response) {\n facade.responseText = response.text;\n }\n\n if ('xml' in response) {\n facade.responseXML = response.xml;\n }\n\n if ('data' in response) {\n facade.response = response.data;\n }\n\n if ('finalUrl' in response) {\n facade.responseURL = response.finalUrl;\n }\n };\n\n emitReadyState = function emitReadyState(n, event) {\n while (n > currentState && currentState < 4) {\n facade[READY_STATE] = ++currentState;\n\n if (currentState === 1) {\n facade[FIRE](\"loadstart\", {});\n }\n\n if (currentState === 2) {\n writeHead();\n }\n\n if (currentState === 4) {\n writeHead();\n writeBody();\n }\n\n facade[FIRE](\"readystatechange\", event || {});\n\n if (currentState === 4) {\n if (request.async === false) {\n emitFinal();\n } else {\n setTimeout(emitFinal, 0);\n }\n }\n }\n };\n\n emitFinal = function emitFinal() {\n if (!hasError) {\n facade[FIRE](\"load\", {});\n }\n\n facade[FIRE](\"loadend\", {});\n\n if (hasError) {\n facade[READY_STATE] = 0;\n }\n };\n\n currentState = 0;\n\n setReadyState = function setReadyState(n, event) {\n var hooks, _process;\n\n if (n !== 4) {\n emitReadyState(n, event);\n return;\n }\n\n hooks = xhook.listeners(AFTER);\n\n _process = function process() {\n var hook;\n\n if (!hooks.length) {\n return emitReadyState(4, event);\n }\n\n hook = hooks.shift();\n\n if (hook.length === 2) {\n hook(request, response);\n return _process();\n } else if (hook.length === 3 && request.async) {\n return hook(request, response, _process);\n } else {\n return _process();\n }\n };\n\n _process();\n };\n\n facade = request.xhr = EventEmitter();\n\n xhr.onreadystatechange = function (event) {\n try {\n if (xhr[READY_STATE] === 2) {\n readHead();\n }\n } catch (_error) {}\n\n if (xhr[READY_STATE] === 4) {\n transiting = false;\n readHead();\n readBody();\n }\n\n setReadyState(xhr[READY_STATE], event);\n };\n\n hasErrorHandler = function hasErrorHandler() {\n hasError = true;\n };\n\n facade[ON]('error', hasErrorHandler);\n facade[ON]('timeout', hasErrorHandler);\n facade[ON]('abort', hasErrorHandler);\n facade[ON]('progress', function () {\n if (currentState < 3) {\n setReadyState(3);\n } else {\n facade[FIRE](\"readystatechange\", {});\n }\n });\n\n if ('withCredentials' in xhr || xhook.addWithCredentials) {\n facade.withCredentials = false;\n }\n\n facade.status = 0;\n _ref = COMMON_EVENTS.concat(UPLOAD_EVENTS);\n\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n event = _ref[_i];\n facade[\"on\" + event] = null;\n }\n\n facade.open = function (method, url, async, user, pass) {\n currentState = 0;\n hasError = false;\n transiting = false;\n request.headers = {};\n request.headerNames = {};\n request.status = 0;\n response = {};\n response.headers = {};\n request.method = method;\n request.url = url;\n request.async = async !== false;\n request.user = user;\n request.pass = pass;\n setReadyState(1);\n };\n\n facade.send = function (body) {\n var hooks, k, modk, _process2, send, _j, _len1, _ref1;\n\n _ref1 = ['type', 'timeout', 'withCredentials'];\n\n for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) {\n k = _ref1[_j];\n modk = k === \"type\" ? \"responseType\" : k;\n\n if (modk in facade) {\n request[k] = facade[modk];\n }\n }\n\n request.body = body;\n\n send = function send() {\n var header, value, _k, _len2, _ref2, _ref3;\n\n proxyEvents(COMMON_EVENTS, xhr, facade);\n\n if (facade.upload) {\n proxyEvents(COMMON_EVENTS.concat(UPLOAD_EVENTS), xhr.upload, facade.upload);\n }\n\n transiting = true;\n xhr.open(request.method, request.url, request.async, request.user, request.pass);\n _ref2 = ['type', 'timeout', 'withCredentials'];\n\n for (_k = 0, _len2 = _ref2.length; _k < _len2; _k++) {\n k = _ref2[_k];\n modk = k === \"type\" ? \"responseType\" : k;\n\n if (k in request) {\n xhr[modk] = request[k];\n }\n }\n\n _ref3 = request.headers;\n\n for (header in _ref3) {\n value = _ref3[header];\n\n if (header) {\n xhr.setRequestHeader(header, value);\n }\n }\n\n if (request.body instanceof XHookFormData) {\n request.body = request.body.fd;\n }\n\n xhr.send(request.body);\n };\n\n hooks = xhook.listeners(BEFORE);\n\n _process2 = function process() {\n var done, hook;\n\n if (!hooks.length) {\n return send();\n }\n\n done = function done(userResponse) {\n if (_typeof(userResponse) === 'object' && (typeof userResponse.status === 'number' || typeof response.status === 'number')) {\n mergeObjects(userResponse, response);\n\n if (__indexOf.call(userResponse, 'data') < 0) {\n userResponse.data = userResponse.response || userResponse.text;\n }\n\n setReadyState(4);\n return;\n }\n\n _process2();\n };\n\n done.head = function (userResponse) {\n mergeObjects(userResponse, response);\n return setReadyState(2);\n };\n\n done.progress = function (userResponse) {\n mergeObjects(userResponse, response);\n return setReadyState(3);\n };\n\n hook = hooks.shift();\n\n if (hook.length === 1) {\n return done(hook(request));\n } else if (hook.length === 2 && request.async) {\n return hook(request, done);\n } else {\n return done();\n }\n };\n\n _process2();\n };\n\n facade.abort = function () {\n status = ABORTED;\n\n if (transiting) {\n xhr.abort();\n } else {\n facade[FIRE]('abort', {});\n }\n };\n\n facade.setRequestHeader = function (header, value) {\n var lName, name;\n lName = header != null ? header.toLowerCase() : void 0;\n name = request.headerNames[lName] = request.headerNames[lName] || header;\n\n if (request.headers[name]) {\n value = request.headers[name] + ', ' + value;\n }\n\n request.headers[name] = value;\n };\n\n facade.getResponseHeader = function (header) {\n var name;\n name = header != null ? header.toLowerCase() : void 0;\n return nullify(response.headers[name]);\n };\n\n facade.getAllResponseHeaders = function () {\n return nullify(convertHeaders(response.headers));\n };\n\n if (xhr.overrideMimeType) {\n facade.overrideMimeType = function () {\n return xhr.overrideMimeType.apply(xhr, arguments);\n };\n }\n\n if (xhr.upload) {\n facade.upload = request.upload = EventEmitter();\n }\n\n facade.UNSENT = 0;\n facade.OPENED = 1;\n facade.HEADERS_RECEIVED = 2;\n facade.LOADING = 3;\n facade.DONE = 4;\n facade.response = '';\n facade.responseText = '';\n facade.responseXML = null;\n facade.readyState = 0;\n facade.statusText = '';\n return facade;\n };\n\n if (typeof WINDOW[FETCH] === \"function\") {\n NativeFetch = WINDOW[FETCH];\n xhook[FETCH] = NativeFetch;\n\n XHookFetchRequest = WINDOW[FETCH] = function (url, options) {\n var afterHooks, beforeHooks, i, originalOptions, request;\n\n if (options == null) {\n options = {\n headers: {}\n };\n }\n\n originalOptions = {};\n\n for (i in options) {\n originalOptions[i] = options[i];\n }\n\n options.url = url;\n request = null;\n\n if (url instanceof Request) {\n request = url;\n options.url = request.url;\n options.headers = request.headers;\n }\n\n beforeHooks = xhook.listeners(BEFORE);\n afterHooks = xhook.listeners(AFTER);\n return new Promise(function (resolve, reject) {\n var done, getRequest, _processAfter, processBefore, send;\n\n getRequest = function getRequest() {\n if (options.body instanceof XHookFormData) {\n options.body = options.body.fd;\n }\n\n if (options.headers) {\n options.headers = new Headers(options.headers);\n }\n\n if (!request) {\n request = new Request(options.url, options);\n }\n\n return mergeObjects(options, request);\n };\n\n _processAfter = function processAfter(response) {\n var hook;\n\n if (!afterHooks.length) {\n return resolve(response);\n }\n\n hook = afterHooks.shift();\n\n if (hook.length === 2) {\n hook(getRequest(), response);\n return _processAfter(response);\n } else if (hook.length === 3) {\n return hook(getRequest(), response, _processAfter);\n } else {\n return _processAfter(response);\n }\n };\n\n done = function done(userResponse) {\n var response;\n\n if (userResponse !== void 0) {\n response = new Response(userResponse.body || userResponse.text, userResponse);\n resolve(response);\n\n _processAfter(response);\n\n return;\n }\n\n processBefore();\n };\n\n processBefore = function processBefore() {\n var hook, param;\n\n if (!beforeHooks.length) {\n send();\n return;\n }\n\n hook = beforeHooks.shift();\n\n if (hook.length === 1) {\n param = options;\n\n if (url instanceof Request) {\n param = url;\n }\n\n return done(hook(param));\n } else if (hook.length === 2) {\n return hook(getRequest(), done);\n }\n };\n\n send = function send() {\n return NativeFetch(url, originalOptions).then(function (response) {\n return _processAfter(response);\n })[\"catch\"](function (err) {\n _processAfter(err);\n\n return reject(err);\n });\n };\n\n processBefore();\n });\n };\n }\n\n XHookHttpRequest.UNSENT = 0;\n XHookHttpRequest.OPENED = 1;\n XHookHttpRequest.HEADERS_RECEIVED = 2;\n XHookHttpRequest.LOADING = 3;\n XHookHttpRequest.DONE = 4;\n\n if (typeof undefined$1 === \"function\" && undefined$1.amd) {\n undefined$1(\"xhook\", [], function () {\n return xhook;\n });\n } else if (module.exports) {\n module.exports = {\n xhook: xhook\n };\n } else if (WINDOW) {\n WINDOW.xhook = xhook;\n }\n }).call(commonjsGlobal, window);\n});\nvar xhook_1 = xhook.xhook;\n\n// @ts-nocheck\r\nvar interceptors = [];\r\nfunction interceptor(fetch) {\r\n var args = [];\r\n for (var _i = 1; _i < arguments.length; _i++) {\r\n args[_i - 1] = arguments[_i];\r\n }\r\n var reversedInterceptors = interceptors.reduce(function (array, interceptor) { return [interceptor].concat(array); }, []);\r\n var promise = Promise.resolve(args);\r\n // Register request interceptors\r\n reversedInterceptors.forEach(function (_a) {\r\n var request = _a.request, requestError = _a.requestError;\r\n if (request || requestError) {\r\n promise = promise.then(function (args) { return request.apply(void 0, args); }, requestError);\r\n }\r\n });\r\n // Register fetch call\r\n promise = promise.then(function (args) { return fetch.apply(void 0, args); });\r\n // Register response interceptors\r\n reversedInterceptors.forEach(function (_a) {\r\n var response = _a.response, responseError = _a.responseError;\r\n if (response || responseError) {\r\n promise = promise.then(response, responseError);\r\n }\r\n });\r\n return promise;\r\n}\r\nfunction attach(env) {\r\n // Make sure fetch is available in the given environment\r\n if (typeof env.fetch !== 'function') {\r\n return null;\r\n }\r\n // replace fetch in env (window)\r\n env.fetch = (function (fetch) {\r\n return function () {\r\n var args = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n args[_i] = arguments[_i];\r\n }\r\n return interceptor.apply(void 0, __spreadArrays([fetch], args));\r\n };\r\n })(env.fetch);\r\n return {\r\n register: function (interceptor) {\r\n interceptors.push(interceptor);\r\n // return unregister function\r\n return function () {\r\n var index = interceptors.indexOf(interceptor);\r\n if (index >= 0) {\r\n interceptors.splice(index, 1);\r\n }\r\n };\r\n },\r\n clear: function () {\r\n interceptors = [];\r\n },\r\n };\r\n}\n\n/**\r\n * @file 劫持 XMLHttpRequest,自动记录请求成功、失败打点\r\n * @author Malcolm Yu\r\n * @created 2019-11-16\r\n *\r\n * 由于发现了一个好用的 hook,这里就不闷头开发了:https://github.com/jpillora/xhook\r\n */\r\nvar validXhook = xhook_1.xhook || xhook_1;\r\n// 引入后先关闭,默认会替换 FormData\r\nvalidXhook.disable();\r\nvar unregister;\r\nvar APIMonitor = /** @class */ (function (_super) {\r\n __extends(APIMonitor, _super);\r\n function APIMonitor() {\r\n var _this = _super !== null && _super.apply(this, arguments) || this;\r\n _this.queue = [];\r\n // private xhrLog: APIPerf[] = [];\r\n _this.key = 'api';\r\n _this.logList = [];\r\n _this.perfList = [];\r\n _this.beforeHook = function (request) {\r\n // 禁 止 套 娃\r\n if (!isInURLWhiteList(request.url, _this.radar.ignoreList)) {\r\n var info = {\r\n api: _this.requestURLCompletion(request.url),\r\n method: request.method,\r\n request: request,\r\n startTime: Date.now(),\r\n };\r\n _this.queue.push(info);\r\n }\r\n };\r\n // TODO fetch的改动没问题后删除\r\n // xhook重写了fetch函数,看起来会导致headers前后不相同\r\n // https://github.com/jpillora/xhook/blob/gh-pages/src/xhook.coffee#L524\r\n _this.afterHook = function (request, response) {\r\n var req = _this.queue.filter(function (v) {\r\n return v.request === request;\r\n })[0];\r\n if (!req)\r\n return;\r\n // @ts-ignore\r\n delete req.request;\r\n var startTime = req.startTime, rest = __rest(req, [\"startTime\"]);\r\n var infoStatus = response.status;\r\n // 如果用户有配置status,则使用用户配置的,返回为0则为异常\r\n if (typeof _this.options.customizeRadarStatus === 'function') {\r\n infoStatus = _this.options.customizeRadarStatus(response);\r\n }\r\n var contentLength = getResponseSize(response.headers);\r\n var info = _assign({ duration: Date.now() - startTime, \r\n // 字段兼容\r\n total: Date.now() - startTime, status: infoStatus, size: +contentLength }, rest);\r\n if (typeof response.text === 'string') {\r\n info.responseData = response.text;\r\n }\r\n // 重新定义一个response,然后进行错误判断\r\n var judgedResponse = _assign(_assign({}, response), { status: infoStatus });\r\n var isError = _this.isResponseError(judgedResponse);\r\n // TODO: 兼容性处理可以更优秀一点\r\n if (isError) {\r\n _this.radar.logCollect(_this.sepDimension({\r\n key: RADAR_KEY.API,\r\n value: info,\r\n }));\r\n }\r\n else {\r\n _this.logList.push(info);\r\n _this.mergeAPIPerf(null, info);\r\n }\r\n // 过滤掉这个 request,防止内存堆积\r\n // 由于req的request删了,所以要判断v.request是否存在\r\n _this.queue = _this.queue.filter(function (v) { return v.request && v.request !== request; });\r\n };\r\n return _this;\r\n }\r\n APIMonitor.prototype.when = function (entry) {\r\n if (isInURLWhiteList(entry.name, this.radar.ignoreList)) {\r\n return false;\r\n }\r\n return entry.entryType === 'resource' && (entry.initiatorType === 'fetch' || entry.initiatorType === 'xmlhttprequest');\r\n };\r\n APIMonitor.prototype.onPerfReport = function (entry) {\r\n var logData = this.radar.generateLog(apiPerfMap, entry);\r\n this.perfList.push(logData);\r\n this.mergeAPIPerf(_assign(_assign({}, logData), { api: logData.file }));\r\n };\r\n APIMonitor.prototype.mergeAPIPerf = function (allPerf, info) {\r\n var item = allPerf || info;\r\n var list = allPerf ? this.logList : this.perfList;\r\n if (!item)\r\n return;\r\n var index = -1;\r\n // TODO fetch的改动没问题后删除\r\n // 每次只处理一个item且fetch请求不会被xhook获取 所以可以单独处理一下fetch\r\n // 但是上报的信息没有xhr全面。后续有方案了可以补全\r\n // if (item.res_type === 'fetch') {\r\n // delete item.file;\r\n // this.radar.logCollect(this.sepDimension({\r\n // key: RADAR_KEY.API,\r\n // value: item,\r\n // }));\r\n // return;\r\n // }\r\n // xhr需要沿用原有方案\r\n for (var i = 0, len = list.length; i < len; i++) {\r\n var listItem = list[i];\r\n var itemAPI = (item.api || '').replace(/\\?.+$/, '');\r\n var listItemAPI = (listItem.api || '').replace(/\\?.+$/, '');\r\n var perfSize = item.size;\r\n if (itemAPI === listItemAPI) {\r\n Object.assign(item, listItem);\r\n // 这里 file 与 api 重复了\r\n delete item.file;\r\n // perf api 中的 size 更精确一些\r\n if (perfSize) {\r\n item.size = perfSize;\r\n }\r\n // 依然没有得到 size,尝试计算 responseText 体积\r\n if (!item.size && item.responseData) {\r\n item.size = getStringBytes(item.responseData);\r\n }\r\n delete item.responseData;\r\n index = i;\r\n }\r\n }\r\n if (index !== -1) {\r\n list.splice(index, 1);\r\n // 这里如果找不到匹配 API,还不如不报\r\n this.radar.logCollect(this.sepDimension({\r\n key: RADAR_KEY.API,\r\n value: item,\r\n }));\r\n }\r\n };\r\n APIMonitor.prototype.sepDimension = function (kv) {\r\n var key = kv.key;\r\n var _a = kv.value, protocol = _a.protocol, cached = _a.cached, status = _a.status, api = _a.api, method = _a.method, value = __rest(_a, [\"protocol\", \"cached\", \"status\", \"api\", \"method\"]);\r\n var dimension = { protocol: protocol, api: api, status: status, cached: cached, method: method };\r\n return { key: key, value: value, dimension: dimension };\r\n };\r\n APIMonitor.prototype.requestURLCompletion = function (url) {\r\n var _a = document.location, protocol = _a.protocol, host = _a.host;\r\n if (url.indexOf('//') === 0) {\r\n return protocol + url;\r\n }\r\n if (url.indexOf('/') === 0) {\r\n return protocol + \"//\" + host + url;\r\n }\r\n return url;\r\n };\r\n APIMonitor.prototype.isResponseError = function (response) {\r\n // 在 hook 的加持下,可以拿到异常的返回,这里 status 指定为 0\r\n return response.status === 0;\r\n };\r\n APIMonitor.prototype.created = function () {\r\n validXhook.disable();\r\n var NATIVE_FORM_DATA = window.FormData;\r\n validXhook.before(this.beforeHook);\r\n validXhook.after(this.afterHook);\r\n validXhook.enable();\r\n window.FormData = NATIVE_FORM_DATA;\r\n // @ts-ignore\r\n var ENVIRONMENT_IS_WORKER = typeof importScripts === 'function';\r\n var fetchIntercept = attach(ENVIRONMENT_IS_WORKER ? self : window);\r\n unregister = fetchIntercept && fetchIntercept.register({\r\n request: function (url, config) {\r\n // 在afterHook里面得到的request和beforeHook中的不一致的原因:\r\n // 如果fetch传入的参数是url+config而不是一个Request对象\r\n // 那么在beforeHook中,xhook会将url+config的形式转化为Request对象\r\n // https://github.com/jpillora/xhook/blob/gh-pages/src/xhook.coffee#L552\r\n // 在这里的解法是在fetch请求传入xhook之前,将url+config的形式转化为Request对象,那么前后对比就一致了\r\n if (!(url instanceof Request)) {\r\n url = new Request(url, config);\r\n }\r\n return [url, config];\r\n },\r\n });\r\n };\r\n APIMonitor.prototype.destroy = function () {\r\n validXhook.disable();\r\n unregister && unregister();\r\n };\r\n return APIMonitor;\r\n}(RadarPlugin));\r\nfunction getResponseSize(headers) {\r\n if (!headers) {\r\n // fix: 接口504可能导致取不到header 会报错\r\n return 0;\r\n }\r\n if (typeof headers.get === 'function') {\r\n return +headers.get('Content-Length') || 0;\r\n }\r\n return +headers['content-length'] || 0;\r\n}\n\nvar ErrorMonitor = /** @class */ (function (_super) {\r\n __extends(ErrorMonitor, _super);\r\n function ErrorMonitor() {\r\n var _this = _super !== null && _super.apply(this, arguments) || this;\r\n _this.key = 'error';\r\n // 用于存储页面报错信息,去重,合并上报\r\n _this.errorQueue = [];\r\n _this.errorTimeInterval = 2000;\r\n // 劫持 window.addEventListener('error')\r\n _this.onResError = function (e) {\r\n var isScriptError = _this.isScriptError(e);\r\n var error = e.error;\r\n if (isScriptError) {\r\n // 脚本报错\r\n var logInfo = {\r\n error_type: ERROR_KEY.SCRIPT,\r\n error_cons_type: e.type,\r\n msg: e.message || e.reason,\r\n stack: error ? error.stack : null,\r\n file: e.filename,\r\n line: e.lineno,\r\n col: e.colno,\r\n };\r\n _this.isSameErrorAndReport(logInfo);\r\n }\r\n };\r\n _this.onPromiseError = function (e) {\r\n var msg = e.reason && e.reason.message || '';\r\n var logInfo = {\r\n error_type: ERROR_KEY.SCRIPT,\r\n error_cons_type: e.type,\r\n msg: msg,\r\n };\r\n _this.collect(logInfo);\r\n };\r\n return _this;\r\n }\r\n // error 监听不响应 performance.observe\r\n ErrorMonitor.prototype.when = function (entry) {\r\n // 接受 fmp/play_clicked/play_idr 三个自定义指标\r\n if (entry.custom) {\r\n var key = (entry.entry || {}).key;\r\n if (['play_block', 'play_error'].indexOf(key) > -1) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n };\r\n // error 监听不响应 performance.observe\r\n ErrorMonitor.prototype.onPerfReport = function (entry) {\r\n // Nothing\r\n if (entry.custom) {\r\n var _a = entry.entry || {}, key = _a.key, value = _a.value;\r\n this.collect({\r\n error_type: ERROR_KEY.VIDEO,\r\n error_cons_type: key,\r\n msg: value,\r\n });\r\n }\r\n };\r\n ErrorMonitor.prototype.sepDimension = function (kv) {\r\n var key = kv.key;\r\n if (key === 'error') {\r\n var _a = kv.value, file_1 = _a.file, error_cons_type = _a.error_cons_type, error_type = _a.error_type, msg = _a.msg, col = _a.col, line = _a.line, stack = _a.stack, value_1 = __rest(_a, [\"file\", \"error_cons_type\", \"error_type\", \"msg\", \"col\", \"line\", \"stack\"]);\r\n var dimension_1 = { error_cons_type: error_cons_type, file: file_1, error_type: error_type, msg: msg, col: col, line: line, stack: stack };\r\n return { key: key, value: value_1, dimension: dimension_1 };\r\n }\r\n // 资源异常的处理\r\n var _b = kv.value, protocol = _b.protocol, file = _b.file, cached = _b.cached, res_path = _b.res_path, failed = _b.failed, res_type = _b.res_type, value = __rest(_b, [\"protocol\", \"file\", \"cached\", \"res_path\", \"failed\", \"res_type\"]);\r\n var dimension = { protocol: protocol, file: file, cached: cached, failed: failed, res_path: res_path, res_type: res_type };\r\n return { key: key, value: value, dimension: dimension };\r\n };\r\n ErrorMonitor.prototype.collect = function (logInfo) {\r\n this.radar.logCollect(this.sepDimension({\r\n key: RADAR_KEY.ERROR,\r\n value: logInfo,\r\n }));\r\n };\r\n // 劫持 window onerror\r\n ErrorMonitor.prototype.isScriptError = function (e) {\r\n // 有 message 基本上认为是脚本异常了\r\n return e.message || e.lineno != null;\r\n };\r\n ErrorMonitor.prototype.isSameErrorAndReport = function (error) {\r\n /**\r\n * collect之前进行筛选\r\n * 策略是:相同的错误短时间内多次触发算作一条日志\r\n * 一般认为 同一文件,同一行,同一列的报错为同一错误 不重复收集\r\n *\r\n */\r\n var _this = this;\r\n if (this.getSameErrorIndex(error) >= 0) {\r\n return;\r\n } // 是同一错误则不进行收集\r\n this.errorQueue.push(error);\r\n this.collect(error);\r\n setTimeout(function () {\r\n // 超过阙值则重置\r\n // 重新计算他在队列中的位置\r\n _this.errorQueue.splice(_this.getSameErrorIndex(error), 1);\r\n }, this.errorTimeInterval);\r\n };\r\n /**\r\n *\r\n * @param error 错误信息\r\n * @returns\r\n */\r\n ErrorMonitor.prototype.getSameErrorIndex = function (error) {\r\n for (var i = 0; i < this.errorQueue.length; i++) {\r\n var e = this.errorQueue[i];\r\n if (e.file === error.file && e.line === error.line && e.col === error.col) {\r\n return i;\r\n }\r\n }\r\n return -1;\r\n };\r\n ErrorMonitor.prototype.created = function () {\r\n // 这里会上报重复,感觉没必要\r\n // window.onerror = (...args) => {\r\n // if (typeof this.preWindowErrorHandler === 'function') {\r\n // this.preWindowErrorHandler(...args);\r\n // }\r\n // this.onError(...args);\r\n // };\r\n addMonitor(window, 'error', this.onResError, true);\r\n addMonitor(window, 'unhandledrejection', this.onPromiseError);\r\n };\r\n ErrorMonitor.prototype.destroy = function () {\r\n // window.onerror = this.preWindowErrorHandler;\r\n removeMonitor(window, 'error', this.onResError, true);\r\n removeMonitor(window, 'unhandledrejection', this.onPromiseError);\r\n };\r\n return ErrorMonitor;\r\n}(RadarPlugin));\n\n/**\r\n * @file Radar 核心部件,负责插件组合、上报日志处理\r\n * @author Malcolm Yu\r\n */\r\nvar MORE_REPORTED = ['play_block', 'play_error'];\r\nvar CUSTOM_DIM_KEY = ['c_dimension1', 'c_dimension2', 'c_dimension3'];\r\nvar Radar = /** @class */ (function (_super) {\r\n __extends(Radar, _super);\r\n function Radar(weblog, options) {\r\n var _this = \r\n // this.currentUrlPackage.sampled \r\n //\r\n _super.call(this, weblog, options) || this;\r\n _this.radarIgnoreList = ['https://web-trace.ksapisrv.com/ktrace/collect'];\r\n // public ignoreList: string[];\r\n _this.radarFmp = 0;\r\n _this.customReported = [];\r\n if (!_this.validOption()) {\r\n return _this;\r\n }\r\n _this.use(Navigation, _this);\r\n if (!_this.options || !_this.options.unuseResourcePlugin) {\r\n _this.use(Resource, _this);\r\n }\r\n if (!_this.options || !_this.options.unuseAPIPlugin) {\r\n _this.use(APIMonitor, _this);\r\n }\r\n if (!_this.options || !_this.options.unuseErrorPlugin) {\r\n _this.use(ErrorMonitor, _this);\r\n }\r\n return _this;\r\n }\r\n // 采样控制 对外暴露调用\r\n Radar.samplingControl = function (options) {\r\n if (!options) {\r\n return false;\r\n }\r\n // 计算随机数\r\n var rand = Math.random();\r\n if (typeof options === 'number') {\r\n // 传入的是单一模块采样率 无需从options中取值\r\n return rand < options;\r\n }\r\n // radar整体采样率逻辑\r\n var sampling = options.sampling;\r\n return rand < sampling;\r\n };\r\n Radar.prototype.collect = function (key, duration) {\r\n if (key.indexOf('c_') !== 0) {\r\n error(\"[Radar] \\u4F20\\u5165\\u7684\\u81EA\\u5B9A\\u4E49\\u6307\\u6807 \" + key + \" \\u5FC5\\u987B\\u4E3A c_ \\u5F00\\u5934\");\r\n return;\r\n }\r\n // 支持 performance API 的可以直接用 performance now\r\n this.logCollect({\r\n key: RADAR_KEY.CUSTOM,\r\n value: {\r\n metric_value: duration,\r\n },\r\n dimension: {\r\n metric_name: key,\r\n },\r\n });\r\n };\r\n Radar.prototype.reportTimePoint = function (key, time) {\r\n if (this.customReported.indexOf(key) > -1) {\r\n return null;\r\n }\r\n // 这两个是可以上报多次的\r\n if (MORE_REPORTED.indexOf(key) === -1) {\r\n this.customReported.push(key);\r\n }\r\n var value = time;\r\n if (typeof time !== 'string') {\r\n // 支持 performance API 的可以直接用 performance now\r\n var detail = perfNow(time);\r\n // 没有 performance API 的暂不记录了\r\n if (detail.value == null)\r\n return;\r\n value = this.throttle(detail.value, detail.detail, 'fmp', detail.detail);\r\n }\r\n if (value == null)\r\n return;\r\n this.reportPerformance({\r\n custom: true,\r\n entry: {\r\n key: key,\r\n value: value,\r\n },\r\n renderTime: time\r\n });\r\n return value;\r\n };\r\n // 用户自定义系列指标\r\n Radar.prototype.fmp = function (time) {\r\n // 记录一下业务上报的fmp的时间戳\r\n this.radarFmp = time || Date.now();\r\n var fmp = this.reportTimePoint('fmp', this.radarFmp);\r\n if (fmp) {\r\n try {\r\n // @ts-ignore\r\n if (performance.timing) {\r\n // 获取fmp的时候 添加时间戳到timing上 方便后续计算\r\n performance.timing.fmp = fmp;\r\n performance.timing.radarFmp = this.radarFmp;\r\n }\r\n ;\r\n }\r\n catch (e) {\r\n // do nothing,防止部分机型报错\r\n }\r\n // debug模式下记录log\r\n radarWarnLog('fmp', fmp);\r\n this.logCollect({\r\n key: RADAR_KEY.CUSTOM,\r\n value: {\r\n fmp: fmp,\r\n fmp_time: this.radarFmp,\r\n // 自定义上报是否合并到load表\r\n 'merge': true\r\n },\r\n });\r\n }\r\n };\r\n // 用户定义的事件\r\n Radar.prototype.event = function (dimension, value) {\r\n var uaList = getUAList();\r\n // 处理extra_info\r\n if (dimension.extra_info && dimension.extra_info instanceof Object) {\r\n dimension.extra_info = JSON.stringify(dimension.extra_info);\r\n }\r\n // 处理yoda_version\r\n if (dimension.yoda_version === undefined) {\r\n dimension.yoda_version = uaList.Yoda || '';\r\n }\r\n // 处理webview_type\r\n if (dimension.webview_type === undefined) {\r\n dimension.webview_type = getWebViewType();\r\n }\r\n this.logCollect({\r\n key: RADAR_KEY.EVENT,\r\n value: value,\r\n dimension: dimension,\r\n });\r\n };\r\n // 用于无头浏览器环境手动模拟onload事件内容进行perf数据收集\r\n Radar.prototype.headlessTestReport = function () {\r\n var ua = window.navigator.userAgent;\r\n if (ua.indexOf('headless')) {\r\n this.asyncReportTiming();\r\n return;\r\n }\r\n console.warn('[radar] report: ', '禁止在正常浏览器中使用手动上报功能');\r\n };\r\n Radar.prototype.playClicked = function (time) {\r\n this.reportTimePoint('play_clicked', time);\r\n };\r\n Radar.prototype.playIDR = function (time) {\r\n this.reportTimePoint('play_idr', time);\r\n };\r\n Radar.prototype.playBlock = function (time) {\r\n this.reportTimePoint('play_block', time);\r\n };\r\n Radar.prototype.playError = function (time) {\r\n this.reportTimePoint('play_error', time);\r\n };\r\n Radar.prototype.setDimensions = function (param) {\r\n var _this = this;\r\n var paramKey = Object.keys(param);\r\n var hasOtherDim = paramKey.some(function (key) { return CUSTOM_DIM_KEY.indexOf(key) === -1; });\r\n if (hasOtherDim) {\r\n error(\"[Radar] \\u4F20\\u5165\\u7684\\u81EA\\u5B9A\\u4E49\\u7EF4\\u5EA6\\u53EA\\u80FD\\u4E3A \" + CUSTOM_DIM_KEY.join('、') + \"\\uFF0C\\u76EE\\u524D\\u4F20\\u5165\\u7684\\u662F\\uFF1A\" + paramKey.join('、'));\r\n }\r\n paramKey.forEach(function (key) {\r\n var k = key;\r\n if (param[k] == null) {\r\n delete _this.customDimension[k];\r\n }\r\n else {\r\n _this.customDimension[k] = param[k];\r\n }\r\n });\r\n };\r\n Radar.prototype.validOption = function () {\r\n if (!this.options) {\r\n // 未传入参数默认不开启\r\n return false;\r\n }\r\n var _a = this.options, sampling = _a.sampling, projectId = _a.projectId;\r\n if (typeof projectId !== 'string') {\r\n error('[Radar] 必须配置 projectId 属性');\r\n return false;\r\n }\r\n if (sampling > 1 || sampling < 0) {\r\n error('[Radar] 采样率 sampling 必须在 0~1 之间');\r\n return false;\r\n }\r\n return true;\r\n };\r\n Radar.key = 'radar';\r\n return Radar;\r\n}(RadarRoot));\n\nvar RadarPlaceHolder = /** @class */ (function (_super) {\r\n __extends(RadarPlaceHolder, _super);\r\n function RadarPlaceHolder() {\r\n return _super !== null && _super.apply(this, arguments) || this;\r\n }\r\n RadarPlaceHolder.prototype.fmp = function () {\r\n // do nothing\r\n };\r\n RadarPlaceHolder.prototype.event = function () {\r\n // do nothing\r\n };\r\n RadarPlaceHolder.prototype.headlessTestReport = function () {\r\n // do nothing\r\n };\r\n RadarPlaceHolder.prototype.playClicked = function () { };\r\n RadarPlaceHolder.prototype.playIDR = function () { };\r\n RadarPlaceHolder.prototype.playBlock = function () { };\r\n RadarPlaceHolder.prototype.playError = function () { };\r\n RadarPlaceHolder.prototype.setDimensions = function () { };\r\n RadarPlaceHolder.prototype.destroy = function () {\r\n // do nothing\r\n };\r\n RadarPlaceHolder.key = 'radar';\r\n return RadarPlaceHolder;\r\n}(BasePlugin));\n\nif (!performanceTiming) {\r\n console.warn('Your browser don\\'t support performance API, the auto pv duration may not correct');\r\n}\r\nvar willunload = false;\r\nvar AutoPV = /** @class */ (function (_super) {\r\n __extends(AutoPV, _super);\r\n function AutoPV(weblog, options) {\r\n var _this = _super.call(this) || this;\r\n _this.oldPushState = history.pushState;\r\n _this.oldReplaceState = history.replaceState;\r\n _this.beginTime = performanceTiming && performanceTiming.fetchStart\r\n || new Date().valueOf();\r\n _this.visibilityChange = function () {\r\n var state = document.visibilityState;\r\n if (state === 'visible') {\r\n willunload = false;\r\n }\r\n // 页面关闭也会触发 hidden 事件,这种情况下不再上报事件\r\n if (!_this.weblog || willunload)\r\n return;\r\n if (_this.autoPVFilter(location.href, null, state)) {\r\n if (state === 'hidden' || state === 'visible') {\r\n if (state === 'visible')\r\n _this.beginTime = new Date().valueOf();\r\n _this.weblog.collect('PV', {\r\n type: state,\r\n auto: true,\r\n beginTime: _this.beginTime\r\n });\r\n }\r\n }\r\n };\r\n _this.proxyPushState = function (data, title, url) {\r\n _this.urlChange();\r\n return _this.oldPushState.call(history, data, title, url);\r\n };\r\n _this.proxyReplaceState = function (data, title, url) {\r\n _this.urlChange();\r\n return _this.oldReplaceState.call(history, data, title, url);\r\n };\r\n _this.urlChange = function () {\r\n setTimeout(function () {\r\n if (!_this.weblog)\r\n return;\r\n var _a = getMappingPage({ url: location.href }, _this.weblog.logConfig.urlMap), page = _a.page, params = _a.params;\r\n if (page && page === _this.weblog.currentUrlPackage.page) {\r\n _this.weblog.currentUrlPackage.update(page, params);\r\n return;\r\n }\r\n if (_this.autoPVFilter(location.href, _this.weblog.currentUrl, 'leave')) {\r\n // 触发旧页面离开\r\n _this.weblog.collect('PV', {\r\n type: 'leave',\r\n auto: true,\r\n beginTime: _this.beginTime\r\n });\r\n }\r\n if (_this.autoPVFilter(location.href, _this.weblog.currentUrl, 'enter')) {\r\n // 更新当前页面信息\r\n _this.weblog.updateReferUrlPackage();\r\n _this.weblog.updateCurrentUrlPackage(location.href);\r\n // 更新新页面 enter 时间\r\n _this.beginTime = new Date().valueOf();\r\n _this.weblog.collect('PV', {\r\n type: 'enter',\r\n auto: true,\r\n });\r\n }\r\n });\r\n };\r\n _this.beforeUnload = function () {\r\n willunload = true;\r\n if (!_this.weblog || !_this.autoPVFilter(location.href, null, 'leave')) {\r\n return;\r\n }\r\n _this.weblog.sendImmediately('PV', {\r\n type: 'leave',\r\n auto: true,\r\n beginTime: _this.beginTime\r\n });\r\n };\r\n _this.autoPVFilter = function () { return true; };\r\n // 兼容处理\r\n if (weblog) {\r\n if (typeof weblog === 'function') {\r\n _this.autoPVFilter = weblog;\r\n }\r\n else if ('collect' in weblog && typeof weblog.collect === 'function') {\r\n if (options === null || options === void 0 ? void 0 : options.autoPVFilter) {\r\n _this.autoPVFilter = options.autoPVFilter;\r\n }\r\n _this.apply(weblog);\r\n }\r\n else if ('autoPVFilter' in weblog && weblog.autoPVFilter) {\r\n _this.autoPVFilter = weblog.autoPVFilter;\r\n }\r\n }\r\n if (options && typeof options.autoPVFilter === 'function') {\r\n _this.autoPVFilter = options.autoPVFilter;\r\n }\r\n return _this;\r\n }\r\n AutoPV.prototype.apply = function (weblog) {\r\n var _this = this;\r\n if (!weblog || !weblog.collect)\r\n return;\r\n this.weblog = weblog;\r\n setTimeout(function () {\r\n if (_this.autoPVFilter(location.href, null, 'enter')) {\r\n _this.weblog.collect('PV', {\r\n type: 'enter',\r\n auto: true\r\n });\r\n }\r\n });\r\n history.pushState = this.proxyPushState;\r\n history.replaceState = this.proxyReplaceState;\r\n addMonitor(window, urlChangeEventId, this.urlChange);\r\n addMonitor(document, 'visibilitychange', this.visibilityChange);\r\n };\r\n AutoPV.prototype.destroy = function () {\r\n removeMonitor(window, urlChangeEventId, this.urlChange);\r\n removeMonitor(document, 'visibilitychange', this.visibilityChange);\r\n history.pushState = this.oldPushState;\r\n history.replaceState = this.oldReplaceState;\r\n };\r\n AutoPV.key = 'autoPV';\r\n return AutoPV;\r\n}(BasePlugin));\n\n/**\r\n * 浏览器版本,只有 HTTP 上报,兼容旧版本包含了插件\r\n */\r\nvar Weblog = /** @class */ (function (_super) {\r\n __extends(Weblog, _super);\r\n function Weblog() {\r\n return _super !== null && _super.apply(this, arguments) || this;\r\n }\r\n Weblog.prototype.initBuildInPlugins = function () {\r\n var _a = this.logConfig, autoPV = _a.autoPV, radar = _a.radar, fps = _a.fps, timing = _a.timing, crash = _a.crash, autoPVFilter = _a.autoPVFilter;\r\n // 这三个插件不再默认开启\r\n fps && this.plug(FPSMonitor);\r\n timing && this.plug(TimingMonitor);\r\n crash && this.plug(CrashMonitor);\r\n if (autoPV || typeof autoPV === 'undefined') {\r\n this.plug(AutoPV, { autoPVFilter: autoPVFilter });\r\n }\r\n if (radar) {\r\n if (radar.sampling && Radar.samplingControl(radar)) {\r\n this.plug(Radar, radar);\r\n }\r\n else {\r\n this.plug(RadarPlaceHolder);\r\n }\r\n }\r\n };\r\n return Weblog;\r\n}(Weblog$1));\r\n// 注册到全局对象\r\nif (typeof window !== 'undefined') {\r\n if (typeof window._GLOBAL_KS_WEBLOGGER_ !== 'undefined') {\r\n window._GLOBAL_KS_WEBLOGGER_.Factory = Weblog;\r\n }\r\n else {\r\n // @ts-ignore\r\n window.Weblog = Weblog;\r\n }\r\n}\n\nexports.BasePlugin = BasePlugin;\nexports.Weblog = Weblog;\nexports.default = Weblog;\n//# sourceMappingURL=log.common.js.map\n"],"sourceRoot":""}