reporting-lib 0.4.2 → 0.4.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/config/index.js","../src/util/cache.js","../src/report/index.js","../src/util/tool.js","../src/config/publicParams.js","../src/error/index.js","../../node_modules/.pnpm/web-vitals@5.1.0/node_modules/web-vitals/dist/web-vitals.js","../src/performance/index.js","../src/api/xhr.js","../src/api/fetch.js","../src/api/index.js","../src/util/slsLogger.ts","../src/report/reportSLS.js","../src/performance/pageStayTime.ts","../src/util/pageDuration.ts","../src/performance/pageStayTimeTracker.ts","../src/index.ts"],"names":["config","version","config_default","setConfig","options","key","cache","cacheSLS","getCache","addCache","type","data","clearCache","getCacheSLS","addCacheSLS","clearCacheSLS","report","isImmediate","reportData","sendBeacon","timer","lazyReportCache","timeout","dataMap","reportUrl","reportWithXHR","xhr","detectWhiteScreen","samplePoints","whiteTags","onDetected","isWhiteScreen","detail","threshold","viewportWidth","viewportHeight","points","i","whiteCount","x","y","el","tag","isWhite","debounce","fn","delay","immediate","args","context","debouncedDetectWhiteScreen","resolve","pendingPromise","detectionWhiteScreen","getFullBrowserInfo","ua","name","getOSInfo","isValidOssVideoUrl","url","u","toReadableString","getRequestBodySize","body","total","value","publicParams","publicParams_default","browserInfor","FULL_MATCH","STACK_TRACE_LIMIT","parseStackLine","line","lineMatch","filename","functionName","lineno","colno","parseStackFrames","error","stack","frames","frame","event","target","errs","msg","reason","e","t","n","s","o","r","c","a","d","h","f","l","m","p","v","g","E","b","L","P","T","_","M","w","C","I","F","k","A","B","S","N","q","H","O","$","performance","sendToAnalytics","metric","originalPrototype","originalOpen","originalSend","overWriteOpenAndSend","onLoadEnd","status","duration","startTime","endTime","method","response","requestSize","code","request_url","originalFetch","overWriteFetch","res","clonedRes","fiterUrl","err","bool","fetch","api","sendLogsToSLS","logs","project","endpoint","logstore","timestamp","logData","item","acc","responseText","sendLog","lazyReportCacheSLS","reportFn","trackPageStayTime","onLeave","minDuration","debounceMs","isReported","debounceTimer","lastVisibleTime","lastPagePath","currentPageTag","hasInitializedPageTag","meta","handleVisibility","handlePageHide","handleBeforeUnload","handlePopState","reset","manualLeave","setPageTag","now","getBasePageName","fallbackPath","pathname","buildPageDurationPayload","pagePath","pageTag","basePageName","decoratedName","formatPageName","pageStayTracker","historyUnlisten","initPageStayTimeTracker","historyInstance","defaultOnLeave","enabled","location","action","switchPageStayTag","initPageStayTracking","trackOptions","payload","listenRouteChange","callback","history","isInit","monitor","index_default"],"mappings":"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","file":"index.js","sourcesContent":["const config = {\n // 项目名称\n source:'mbp', //使用平台\n userId: '', //用户信息(支持 string | number)\n //上报地址\n reportUrl: 'http://localhost:3001/report/actions',\n //是否全埋点\n trackerAll: false,\n slsProject: '',\n slsEndpoint: '',\n slsLogstore: '',\n // 路由 history 实例\n history: null\n};\n\nexport let version = '';\n\nexport default config;\n\nexport function setConfig(options) { \n for (const key in config) { \n if (options[key]) { \n config[key] = options[key];\n }\n }\n if(options['version']){\n version = options['version'];\n }\n}\n","//把上报的数据存储在map键值对中\n//key就是上报的类型\n//value就是上报的数据,是一个数组\nconst cache = new Map();\nconst cacheSLS = new Map();\n\nexport function getCache() { \n return cache;\n}\n\nexport function addCache(type, data) { \n //如果有这个类型的数据,就往数组中添加\n //没有就在map中创建新的类型,并且将data放入到数组中\n cache.get(type)? cache.get(type).push(data) : cache.set(type, [data]);\n}\n\nexport function clearCache() { \n cache.clear();\n}\n\nexport function getCacheSLS() { \n return cacheSLS;\n}\n\nexport function addCacheSLS(type, data) { \n //如果有这个类型的数据,就往数组中添加\n //没有就在map中创建新的类型,并且将data放入到数组中\n cacheSLS.get(type)? cacheSLS.get(type).push(data) : cacheSLS.set(type, [data]);\n}\n\nexport function clearCacheSLS() { \n cacheSLS.clear();\n}\n","import config from '../config/index.js'\nimport getUniqueID from \"../util/getUniqueID.js\";\nimport { getCache,addCache,clearCache } from '../util/cache.js';\n\nconst uniqueID = getUniqueID();\n/**\n * 由于我们有很多内容需要上报,\n * 所以我这里为了简单区分和上报\n * 用type来区分上报的内容是什么\n * @param {string} type 上报类型 “error” | \"action\" | \"api\" | \"performance\"\n * @param {Object} data 上报信息\n * @param {boolean} isImmediate 是否立即上报,默认为false\n */\nexport function report(type, data, isImmediate = false) { \n if (config.reportUrl === null) { \n console.error(\"请先配置上报地址\");\n return;\n }\n\n const reportData = JSON.stringify({\n user_id: Number(config.userId) || 0, //用户id\n source: config.source, //来源\n type, //上报类型\n url: window.location.pathname, //当前页面\n data, //上报信息\n })\n \n //立即上传\n if (isImmediate) { \n sendBeacon(config.reportUrl, reportData);\n return;\n }\n \n // 浏览器空闲时间进行上报\n if (window.requestIdleCallback) {\n window.requestIdleCallback(() => {\n sendBeacon(config.reportUrl, reportData);\n }, { timeout: 3000 });\n }else { \n setTimeout(() => { \n sendBeacon(config.reportUrl, reportData);\n })\n }\n \n}\n\nlet timer = null;\n//延迟上传,一定时间之后再进行上传\nexport function lazyReportCache(type, data, timeout = 3000) { \n //把数据加入到map缓存中\n addCache(type, data);\n \n clearTimeout(timer);\n timer = setTimeout(() => { \n //获取缓存中的数据\n const dataMap = getCache();\n\n if (dataMap.size) { \n for (const [type, data] of dataMap) { \n report(type, data);\n }\n\n clearCache();\n }\n\n },timeout)\n}\n\n\n//Navigator.sendBeacon()方式上报\nfunction sendBeacon(reportUrl, reportData) {\n if (navigator.sendBeacon) {\n navigator.sendBeacon(reportUrl, reportData);\n }\n else { \n reportWithXHR(reportUrl, reportData);\n }\n \n} \n\n// XMLHttpRequest方式上报\nfunction reportWithXHR(reportUrl, reportData) { \n const xhr = new XMLHttpRequest();\n xhr.open('POST', reportUrl, true);\n xhr.setRequestHeader('Content-Type', 'application/json');\n xhr.send(reportData);\n}\n","export const detectWhiteScreen = ({\n samplePoints = 6,\n whiteTags = ['HTML', 'BODY', \"IFRAME\"],\n onDetected = (isWhiteScreen, detail) => { },\n threshold = 0.9,\n} = {}) => {\n const viewportWidth = window.innerWidth;\n const viewportHeight = window.innerHeight;\n\n const points = [];\n\n for (let i = 1; i <= samplePoints; i++) {\n points.push([\n viewportWidth / 2,\n (viewportHeight / (samplePoints + 1)) * i,\n ]);\n }\n\n let whiteCount = 0;\n const detail = [];\n\n points.forEach(([x, y]) => {\n const el = document.elementFromPoint(x, y);\n const tag = el?.tagName || 'NULL';\n detail.push({ x, y, tag });\n\n if (!el || whiteTags.includes(tag)) {\n whiteCount++;\n }\n });\n\n const isWhite = whiteCount / samplePoints >= threshold;\n\n onDetected(isWhite, detail);\n};\n\nexport const debounce = (fn, delay = 300, immediate = false) => {\n let timer = null;\n\n return function (...args) {\n const context = this;\n\n if (timer) clearTimeout(timer);\n\n if (immediate && !timer) {\n fn.apply(context, args);\n }\n\n timer = setTimeout(() => {\n if (!immediate) {\n fn.apply(context, args);\n }\n timer = null;\n }, delay);\n };\n};\n\nconst debouncedDetectWhiteScreen = debounce((resolve) => {\n detectWhiteScreen({\n onDetected: (isWhite, detail) => {\n resolve(isWhite);\n pendingPromise = null;\n },\n });\n}, 1000);\n\nlet pendingPromise = null;\nexport const detectionWhiteScreen = () => {\n if (!pendingPromise) {\n pendingPromise = new Promise((resolve) => {\n setTimeout(() => {\n debouncedDetectWhiteScreen(resolve);\n }, 3000);\n })\n }\n return pendingPromise;\n};\n\nexport const getFullBrowserInfo = () => {\n const ua = navigator.userAgent;\n let name = 'Unknown';\n let version = 'Unknown';\n\n if (/edg/i.test(ua)) {\n name = 'Edge';\n version = ua.match(/edg\\/([\\d\\.]+)/i)?.[1];\n } else if (/opr/i.test(ua)) {\n name = 'Opera';\n version = ua.match(/opr\\/([\\d\\.]+)/i)?.[1];\n } else if (/chrome/i.test(ua)) {\n name = 'Chrome';\n version = ua.match(/chrome\\/([\\d\\.]+)/i)?.[1];\n } else if (/firefox/i.test(ua)) {\n name = 'Firefox';\n version = ua.match(/firefox\\/([\\d\\.]+)/i)?.[1];\n } else if (/safari/i.test(ua) && !/chrome/i.test(ua)) {\n name = 'Safari';\n version = ua.match(/version\\/([\\d\\.]+)/i)?.[1];\n } else if (/msie/i.test(ua) || /trident/i.test(ua)) {\n name = 'Internet Explorer';\n version = ua.match(/(msie\\s|rv:)([\\d\\.]+)/i)?.[2];\n }\n\n return { name, version };\n}\nexport const getOSInfo = () => {\n const ua = navigator.userAgent || navigator.vendor || window.opera;\n\n if (/windows phone/i.test(ua)) {\n return \"Windows Phone\";\n }\n if (/win/i.test(ua)) {\n return \"Windows\";\n }\n if (/android/i.test(ua)) {\n return \"Android\";\n }\n if (/iPad|iPhone|iPod/.test(ua) && !window.MSStream) {\n return \"iOS\";\n }\n if (/Macintosh|MacIntel|MacPPC|Mac68K/.test(ua)) {\n return \"macOS\";\n }\n if (/Linux/.test(ua)) {\n return \"Linux\";\n }\n\n return \"Unknown OS\";\n}\n// 识别是上传视频的链接\nexport const isValidOssVideoUrl = (url) => {\n try {\n const u = new URL(url.indexOf('http') === -1 ? `https:${url}` : url);\n\n // 域名和协议必须匹配\n // const hostOk = (\n // u.protocol === 'https:' &&\n // u.hostname === 'sd-cms-bmp.oss-accelerate.aliyuncs.com' &&\n // u.port === '443'\n // );\n\n // 路径必须匹配 /mbp/数字/video/文件名.扩展名\n const pathOk = /^\\/mbp\\/\\d+\\/video\\/[^/?#]+\\.[^/?#]+$/i.test(u.pathname);\n\n // return hostOk && pathOk;\n return pathOk;\n } catch {\n return false; // 非法 URL\n }\n}\nexport const toReadableString = (data) => {\n try {\n return JSON.stringify(data, null, 2);\n } catch (e) {\n return String(data);\n }\n}\n\nexport const getRequestBodySize = (body) => {\n if (!body) return 0;\n try {\n if (typeof body === \"string\") return new TextEncoder().encode(body).length;\n if (body instanceof Blob) return body.size;\n if (body instanceof ArrayBuffer) return body.byteLength;\n if (ArrayBuffer.isView(body)) return body.byteLength;\n if (body instanceof URLSearchParams) return new TextEncoder().encode(body.toString()).length;\n\n if (body instanceof FormData) {\n let total = 0;\n for (const [key, value] of body.entries()) {\n total += new TextEncoder().encode(key).length;\n if (typeof value === \"string\") {\n total += new TextEncoder().encode(value).length;\n } else if (value instanceof Blob) {\n total += value.size;\n }\n }\n return total;\n }\n } catch (error) {\n return 0;\n }\n\n return 0;\n}\nexport const getRequestBodySizeFetch = (body) => {\n if (!body) return 0;\n try {\n if (typeof body === \"string\") return new TextEncoder().encode(body).length;\n if (body instanceof Blob) return body.size;\n if (body instanceof ArrayBuffer) return body.byteLength;\n if (ArrayBuffer.isView(body)) return body.byteLength;\n if (body instanceof URLSearchParams) return new TextEncoder().encode(body.toString()).length;\n\n if (body instanceof FormData) {\n let total = 0;\n for (const [key, value] of body.entries()) {\n total += new TextEncoder().encode(key).length;\n if (typeof value === \"string\") {\n total += new TextEncoder().encode(value).length;\n } else if (value instanceof Blob) {\n total += value.size;\n }\n }\n return total;\n }\n } catch (error) {\n return 0;\n }\n\n return 0;\n}\n\n","import {detectionWhiteScreen,getFullBrowserInfo,getOSInfo,toReadableString} from '../util/tool.js';\n\nconst publicParams = {\n browserInfo: getFullBrowserInfo(),\n platform:getOSInfo(),\n}\n\nexport default publicParams;","import { lazyReportCache } from \"../report/index.js\";\nimport {detectionWhiteScreen,getFullBrowserInfo,getOSInfo,toReadableString} from '../util/tool.js';\nimport {version} from '../config/index.js';\nimport publicParams from '../config/publicParams.js';\n\nconst browserInfor = publicParams.browserInfor;\n\nconst reportData = {\n user_agent:browserInfor?.name+browserInfor?.version,\n platform:publicParams.platform,\n}\n\n/**\n * 这个正则表达式用于匹配 JavaScript 错误栈中的堆栈跟踪信息中的单个条目,其中包含文件名、行号和列号等信息。\n * 具体来说,它匹配以下格式的文本:\n * at functionName (filename:lineNumber:columnNumber)\n * at filename:lineNumber:columnNumber\n * at http://example.com/filename:lineNumber:columnNumber\n * at https://example.com/filename:lineNumber:columnNumber\n */\nconst FULL_MATCH =\n /^\\s*at (?:(.*?) ?\\()?((?:file|https?|blob|chrome-extension|address|native|eval|webpack|<anonymous>|[-a-z]+:|.*bundle|\\/).*?)(?::(\\d+))?(?::(\\d+))?\\)?\\s*$/i;\n\n//限制追溯的错误堆栈数量\nconst STACK_TRACE_LIMIT = 10;\n\n//通过正则表达式解析一行的错误信息\nfunction parseStackLine(line) { \n const lineMatch = line.match(FULL_MATCH);\n if (!lineMatch) return {};\n const filename = lineMatch[2] || '<anonymous>';\n const functionName = lineMatch[1] || '';\n const lineno = parseInt(lineMatch[3], 10) || undefined;\n const colno = parseInt(lineMatch[4], 10) || undefined;\n\n return {\n filename,\n functionName,\n lineno,\n colno\n }\n}\n\n//解析错误堆栈\nfunction parseStackFrames(error) { \n const { stack } = error;\n //如果没有stack直接返回[]\n if (!stack) return [];\n const frames = [];\n\n for (const line of stack.split('\\n').slice(1)) { \n const frame = parseStackLine(line); //分析一行的错误信息\n if (frame.filename) { \n //放入到堆栈错误信息数组中\n frames.push(frame);\n }\n }\n return frames.slice(0, STACK_TRACE_LIMIT);\n} \n\n\nexport default function error() {\n //资源错误没有冒泡,所以只能在捕获阶段采集获取错误\n window.addEventListener('error', async function (event) {\n const target = event.target;\n\n //要判断是资源错误,还是js错误,很简单,直接判断事件对象有没有src或者href属性就可以了\n if (target && (target.src || target.href)) {\n //上报资源错误 todo...\n const data = {\n error_type: 'resource',\n ...reportData,\n msg:toReadableString(`加载${target.tagName}失败:${target.src || target.href}`),\n version,\n }\n lazyReportCache('error', data)\n }\n else {\n const errs = parseStackFrames(event.error);\n let msg = event.message;\n if(errs?.[0]){\n const { filename,functionName,lineno, colno } = errs[0];\n msg = `${event.message},${filename},line:${lineno}:${colno}`;\n }\n \n const data = {\n error_type: 'js',\n msg:toReadableString(msg),\n ...reportData,\n version,\n }\n \n lazyReportCache('error', data)\n const isWhite = await detectionWhiteScreen();\n if(isWhite){\n lazyReportCache('error', {...data,error_type:'whiteScreen'})\n }\n }\n }, true)\n \n //promise错误\n window.addEventListener('unhandledrejection', function (event) {\n const reason = event.reason;\n const errs = parseStackFrames(reason);\n let msg = reason;\n\n if(errs?.[0]){\n const {filename,functionName,lineno,colno} = errs[0]; \n msg = `${event?.reason?.message || event?.reason},${filename},line:${lineno}:${colno}`;\n }\n \n const data = {\n error_type: 'js',\n msg:toReadableString(msg),\n ...reportData,\n version,\n }\n\n lazyReportCache('error', data)\n })\n}\n","let e=-1;const t=t=>{addEventListener(\"pageshow\",(n=>{n.persisted&&(e=n.timeStamp,t(n))}),!0)},n=(e,t,n,i)=>{let s,o;return r=>{t.value>=0&&(r||i)&&(o=t.value-(s??0),(o||void 0===s)&&(s=t.value,t.delta=o,t.rating=((e,t)=>e>t[1]?\"poor\":e>t[0]?\"needs-improvement\":\"good\")(t.value,n),e(t)))}},i=e=>{requestAnimationFrame((()=>requestAnimationFrame((()=>e()))))},s=()=>{const e=performance.getEntriesByType(\"navigation\")[0];if(e&&e.responseStart>0&&e.responseStart<performance.now())return e},o=()=>{const e=s();return e?.activationStart??0},r=(t,n=-1)=>{const i=s();let r=\"navigate\";e>=0?r=\"back-forward-cache\":i&&(document.prerendering||o()>0?r=\"prerender\":document.wasDiscarded?r=\"restore\":i.type&&(r=i.type.replace(/_/g,\"-\")));return{name:t,value:n,rating:\"good\",delta:0,entries:[],id:`v5-${Date.now()}-${Math.floor(8999999999999*Math.random())+1e12}`,navigationType:r}},c=new WeakMap;function a(e,t){return c.get(e)||c.set(e,new t),c.get(e)}class d{t;i=0;o=[];h(e){if(e.hadRecentInput)return;const t=this.o[0],n=this.o.at(-1);this.i&&t&&n&&e.startTime-n.startTime<1e3&&e.startTime-t.startTime<5e3?(this.i+=e.value,this.o.push(e)):(this.i=e.value,this.o=[e]),this.t?.(e)}}const h=(e,t,n={})=>{try{if(PerformanceObserver.supportedEntryTypes.includes(e)){const i=new PerformanceObserver((e=>{Promise.resolve().then((()=>{t(e.getEntries())}))}));return i.observe({type:e,buffered:!0,...n}),i}}catch{}},f=e=>{let t=!1;return()=>{t||(e(),t=!0)}};let u=-1;const l=new Set,m=()=>\"hidden\"!==document.visibilityState||document.prerendering?1/0:0,p=e=>{if(\"hidden\"===document.visibilityState){if(\"visibilitychange\"===e.type)for(const e of l)e();isFinite(u)||(u=\"visibilitychange\"===e.type?e.timeStamp:0,removeEventListener(\"prerenderingchange\",p,!0))}},v=()=>{if(u<0){const e=o(),n=document.prerendering?void 0:globalThis.performance.getEntriesByType(\"visibility-state\").filter((t=>\"hidden\"===t.name&&t.startTime>e))[0]?.startTime;u=n??m(),addEventListener(\"visibilitychange\",p,!0),addEventListener(\"prerenderingchange\",p,!0),t((()=>{setTimeout((()=>{u=m()}))}))}return{get firstHiddenTime(){return u},onHidden(e){l.add(e)}}},g=e=>{document.prerendering?addEventListener(\"prerenderingchange\",(()=>e()),!0):e()},y=[1800,3e3],E=(e,s={})=>{g((()=>{const c=v();let a,d=r(\"FCP\");const f=h(\"paint\",(e=>{for(const t of e)\"first-contentful-paint\"===t.name&&(f.disconnect(),t.startTime<c.firstHiddenTime&&(d.value=Math.max(t.startTime-o(),0),d.entries.push(t),a(!0)))}));f&&(a=n(e,d,y,s.reportAllChanges),t((t=>{d=r(\"FCP\"),a=n(e,d,y,s.reportAllChanges),i((()=>{d.value=performance.now()-t.timeStamp,a(!0)}))})))}))},b=[.1,.25],L=(e,s={})=>{const o=v();E(f((()=>{let c,f=r(\"CLS\",0);const u=a(s,d),l=e=>{for(const t of e)u.h(t);u.i>f.value&&(f.value=u.i,f.entries=u.o,c())},m=h(\"layout-shift\",l);m&&(c=n(e,f,b,s.reportAllChanges),o.onHidden((()=>{l(m.takeRecords()),c(!0)})),t((()=>{u.i=0,f=r(\"CLS\",0),c=n(e,f,b,s.reportAllChanges),i((()=>c()))})),setTimeout(c))})))};let P=0,T=1/0,_=0;const M=e=>{for(const t of e)t.interactionId&&(T=Math.min(T,t.interactionId),_=Math.max(_,t.interactionId),P=_?(_-T)/7+1:0)};let w;const C=()=>w?P:performance.interactionCount??0,I=()=>{\"interactionCount\"in performance||w||(w=h(\"event\",M,{type:\"event\",buffered:!0,durationThreshold:0}))};let F=0;class k{u=[];l=new Map;m;p;v(){F=C(),this.u.length=0,this.l.clear()}L(){const e=Math.min(this.u.length-1,Math.floor((C()-F)/50));return this.u[e]}h(e){if(this.m?.(e),!e.interactionId&&\"first-input\"!==e.entryType)return;const t=this.u.at(-1);let n=this.l.get(e.interactionId);if(n||this.u.length<10||e.duration>t.P){if(n?e.duration>n.P?(n.entries=[e],n.P=e.duration):e.duration===n.P&&e.startTime===n.entries[0].startTime&&n.entries.push(e):(n={id:e.interactionId,entries:[e],P:e.duration},this.l.set(n.id,n),this.u.push(n)),this.u.sort(((e,t)=>t.P-e.P)),this.u.length>10){const e=this.u.splice(10);for(const t of e)this.l.delete(t.id)}this.p?.(n)}}}const A=e=>{const t=globalThis.requestIdleCallback||setTimeout;\"hidden\"===document.visibilityState?e():(e=f(e),addEventListener(\"visibilitychange\",e,{once:!0,capture:!0}),t((()=>{e(),removeEventListener(\"visibilitychange\",e,{capture:!0})})))},B=[200,500],S=(e,i={})=>{if(!globalThis.PerformanceEventTiming||!(\"interactionId\"in PerformanceEventTiming.prototype))return;const s=v();g((()=>{I();let o,c=r(\"INP\");const d=a(i,k),f=e=>{A((()=>{for(const t of e)d.h(t);const t=d.L();t&&t.P!==c.value&&(c.value=t.P,c.entries=t.entries,o())}))},u=h(\"event\",f,{durationThreshold:i.durationThreshold??40});o=n(e,c,B,i.reportAllChanges),u&&(u.observe({type:\"first-input\",buffered:!0}),s.onHidden((()=>{f(u.takeRecords()),o(!0)})),t((()=>{d.v(),c=r(\"INP\"),o=n(e,c,B,i.reportAllChanges)})))}))};class N{m;h(e){this.m?.(e)}}const q=[2500,4e3],x=(e,s={})=>{g((()=>{const c=v();let d,u=r(\"LCP\");const l=a(s,N),m=e=>{s.reportAllChanges||(e=e.slice(-1));for(const t of e)l.h(t),t.startTime<c.firstHiddenTime&&(u.value=Math.max(t.startTime-o(),0),u.entries=[t],d())},p=h(\"largest-contentful-paint\",m);if(p){d=n(e,u,q,s.reportAllChanges);const o=f((()=>{m(p.takeRecords()),p.disconnect(),d(!0)})),c=e=>{e.isTrusted&&(A(o),removeEventListener(e.type,c,{capture:!0}))};for(const e of[\"keydown\",\"click\",\"visibilitychange\"])addEventListener(e,c,{capture:!0});t((t=>{u=r(\"LCP\"),d=n(e,u,q,s.reportAllChanges),i((()=>{u.value=performance.now()-t.timeStamp,d(!0)}))}))}}))},H=[800,1800],O=e=>{document.prerendering?g((()=>O(e))):\"complete\"!==document.readyState?addEventListener(\"load\",(()=>O(e)),!0):setTimeout(e)},$=(e,i={})=>{let c=r(\"TTFB\"),a=n(e,c,H,i.reportAllChanges);O((()=>{const d=s();d&&(c.value=Math.max(d.responseStart-o(),0),c.entries=[d],a(!0),t((()=>{c=r(\"TTFB\",0),a=n(e,c,H,i.reportAllChanges),a(!0)})))}))};export{b as CLSThresholds,y as FCPThresholds,B as INPThresholds,q as LCPThresholds,H as TTFBThresholds,L as onCLS,E as onFCP,S as onINP,x as onLCP,$ as onTTFB};\n","import { onCLS, onFCP, onLCP, onTTFB,onINP } from \"web-vitals\";\nimport { lazyReportCache } from \"../report/index.js\";\n\nexport default function performance() {\n onCLS(sendToAnalytics);\n onINP(sendToAnalytics);\n onLCP(sendToAnalytics);\n onFCP(sendToAnalytics);\n onTTFB(sendToAnalytics);\n}\n\nfunction sendToAnalytics(metric) {\n const data = {\n name: metric.name,\n value: metric.value,\n // rating: metric.rating,\n }\n lazyReportCache('performance', data);\n}\n\n","import { lazyReportCache } from '../report/index.js';\nimport {isValidOssVideoUrl,getRequestBodySize} from '../util/tool.js';\n\nconst originalPrototype = XMLHttpRequest.prototype;\nconst originalOpen = originalPrototype.open;\nconst originalSend = originalPrototype.send;\n\nfunction overWriteOpenAndSend() { \n originalPrototype.open = function newOpen(...args) { \n this.url = args[1];\n this.method = args[0];\n originalOpen.apply(this, args);\n }\n originalPrototype.send = function newSend(...args) { \n this.startTime = Date.now();\n\n const body = args[0];\n this.requestSize = getRequestBodySize(body);\n\n const onLoadEnd = () => { \n this.endTime = Date.now();\n this.duration = this.endTime - this.startTime;\n\n const { status, duration, startTime, endTime, method,response,requestSize } = this;\n let { url } = this;\n let code = status;\n let request_url = url;\n try {\n code = JSON.parse(response).code;\n }catch {\n \n }\n if(isValidOssVideoUrl(request_url)){\n request_url = `https://sd-cms-bmp.oss-accelerate.aliyuncs.com:443/mbp/video`\n }\n\n let reportData = {\n status,\n duration,\n // startTime,\n // endTime,\n request_url,\n method: method || 'GET',\n code,\n // success: status >= 200 && status < 300,\n // sub_type: 'xhr',\n // request_size: parseInt(requestSize/1000),\n }\n try {\n reportData.request_size = parseInt(requestSize/1000);\n } catch (error) {\n \n }\n\n lazyReportCache('api', reportData);\n\n this.removeEventListener('loadend', onLoadEnd, true);\n }\n\n //当请求结束时触发,无论请求成功 (load) 还是失败 (abort 或 error)\n this.addEventListener('loadend', onLoadEnd, true);\n originalSend.apply(this, args);\n }\n\n\n}\n\nexport default function xhr() { \n overWriteOpenAndSend();\n}\n","import { lazyReportCache} from '../report/index.js';\nimport {isValidOssVideoUrl,getRequestBodySize} from '../util/tool.js';\n\nconst originalFetch = window.fetch;\n\nfunction overWriteFetch() { \n window.fetch = function newFetch(url, config) { \n const startTime = Date.now();\n let request_url = url;\n if(isValidOssVideoUrl(request_url)){\n request_url = `https://sd-cms-bmp.oss-accelerate.aliyuncs.com:443/mbp/video`\n }\n\n const reportData = {\n // startTime,\n request_url,\n method: config?.method || 'GET',\n // sub_type: 'fetch',\n // request_size: parseInt(getRequestBodySize(config?.body)/1000),\n }\n try {\n reportData.request_size = parseInt(getRequestBodySize(config?.body)/1000);\n } catch (error) {\n \n }\n\n return originalFetch(url, config)\n .then(res => { \n const endTime = Date.now();\n reportData.duration = (endTime - startTime);\n reportData.status = res.status;\n \n const clonedRes = res.clone();\n if(fiterUrl(url)){\n if (!clonedRes.ok) {\n reportData.code = reportData.status;\n lazyReportCache('api', reportData);\n }else{\n clonedRes.json().then(data => {\n reportData.code = data.code;\n lazyReportCache('api', reportData);\n })\n }\n }\n \n return res;\n })\n .catch(err => { \n const endTime = Date.now();\n reportData.duration = (endTime - startTime);\n reportData.status = 0;\n reportData.code = reportData.status;\n\n lazyReportCache('api', reportData);\n\n return err;\n })\n }\n}\n\nfunction fiterUrl(url) { \n let bool = true;\n if(url.indexOf('.js.map') !== -1 || url.indexOf('.log.aliyuncs.com') !== -1){\n bool = false;\n }\n return bool;\n}\n\nexport default function fetch() { \n overWriteFetch();\n}\n","import xhr from './xhr.js';\nimport fetch from './fetch.js';\n\nexport default function api() { \n xhr();\n fetch();\n}\n","// 发送日志到阿里云SLS - 使用Track API\nexport async function sendLogsToSLS(logs: any[], {project,endpoint,logstore}:{project:string,endpoint:string,logstore:string}) {\n if (!project || !endpoint || !logstore) return\n const timestamp = Math.floor(Date.now() / 1000);\n\n // 构建日志数据 - 使用Track API格式\n const logData = {\n __logs__: logs.map((item: any) => ({\n __time__: timestamp,\n ...Object.keys(item).reduce((acc: any, key) => {\n acc[key] = String(item[key]);\n return acc;\n }, {})\n })),\n __topic__: 'default',\n __source__: 'frontend'\n };\n\n const body = JSON.stringify(logData);\n const url = `https://${project}.${endpoint}/logstores/${logstore}/track?APIVersion=0.6.0`;\n\n const response = await fetch(url, {\n method: 'POST',\n headers: {\n // 'Content-Type': 'application/x-protobuf',\n 'Content-Type': 'application/json', \n 'x-log-apiversion': '0.6.0',\n 'x-log-bodyrawsize': body.length.toString()\n },\n body: body\n });\n\n const responseText = await response.text();\n // console.log('SLS Response:', response.status, responseText);\n\n if (!response.ok) {\n throw new Error(`SLS API error: ${response.status} ${response.statusText} - ${responseText}`);\n }\n\n return response;\n}","import config from '../config/index.js'\nimport getUniqueID from \"../util/getUniqueID.js\";\nimport { getCacheSLS,addCacheSLS,clearCacheSLS } from '../util/cache.js';\nimport { sendLogsToSLS } from '../util/slsLogger.js';\nimport publicParams from '../config/publicParams.js';\n\nconst uniqueID = getUniqueID();\n/**\n * 由于我们有很多内容需要上报,\n * 所以我这里为了简单区分和上报\n * 用type来区分上报的内容是什么\n * @param {string} type 上报类型 “error” | \"action\" | \"api\" | \"performance\"\n * @param {Object} data 上报信息\n * @param {boolean} isImmediate 是否立即上报,默认为false\n */\nexport function report(type, data, isImmediate = false) { \n if (config.reportUrl === null) { \n console.error(\"请先配置上报地址\");\n return;\n }\n \n const reportData = [{\n user_id: Number(config.userId) || 0, //用户id\n source: config.source, //来源\n type, //上报类型\n url: window.location.pathname, //当前页面\n data, //上报信息\n }];\n \n //立即上传\n if (isImmediate) { \n sendLog(reportData)\n return;\n }\n \n // 浏览器空闲时间进行上报\n if (window.requestIdleCallback) {\n window.requestIdleCallback(() => {\n sendLog(reportData)\n }, { timeout: 3000 });\n }else { \n sendLog(reportData)\n }\n \n}\n\nlet timer = null;\n//延迟上传,一定时间之后再进行上传\nexport function lazyReportCacheSLS(type, data,isImmediate ,timeout = 3000) { \n data = JSON.stringify({\n ...publicParams,\n ...data,\n });\n //把数据加入到map缓存中\n addCacheSLS(type, data);\n\n if(isImmediate){\n reportFn(isImmediate);\n return;\n }\n \n clearTimeout(timer);\n timer = setTimeout(() => { \n reportFn();\n },timeout)\n}\n\nfunction reportFn(isImmediate = false){\n //获取缓存中的数据\n const dataMap = getCacheSLS();\n\n if (dataMap.size) { \n for (const [type, data] of dataMap) { \n report(type, data,isImmediate);\n }\n\n clearCacheSLS();\n }\n}\n\nfunction sendLog(reportData){\n sendLogsToSLS(reportData, {\n project: config.slsProject,\n endpoint: config.slsEndpoint,\n logstore: config.slsLogstore\n }).catch(err => {\n console.error('[reporting-lib] SLS上报失败:', err);\n });\n}\n","/**\n * 追踪页面停留时间\n * @param onLeave 离开时的回调函数,接收停留时长(毫秒)和离开原因\n * @param options 配置选项\n * @param options.minDuration 最小上报时长(毫秒),低于此值不上报,默认 1000\n * @param options.debounceMs 防抖时间(毫秒),防止短时间内重复上报,默认 300\n * @returns 返回包含 manualLeave、reset、stop 和 getCurrentDuration 方法的对象\n */\nimport { PageLeaveMeta } from \"../util/pageDuration.js\";\n\ntype TimeoutHandle = ReturnType<typeof setTimeout> | null;\n\nexport function trackPageStayTime(\n onLeave: (duration: number, reason: string, meta: PageLeaveMeta) => void,\n options: { minDuration?: number; debounceMs?: number } = {},\n) {\n const { minDuration = 1000, debounceMs = 300 } = options;\n let isReported = false; // 防止重复上报\n let debounceTimer: TimeoutHandle = null;\n let lastVisibleTime = Date.now(); // 上次可见的时间点\n let lastPagePath = (() => {\n try {\n return window.location?.pathname || \"/\";\n } catch {\n return \"/\";\n }\n })();\n let currentPageTag: string | undefined;\n let hasInitializedPageTag = false;\n\n const report = (reason: string, duration: number, meta: PageLeaveMeta) => {\n // 防止重复上报\n if (isReported) return;\n\n // 防抖处理\n if (debounceTimer) {\n clearTimeout(debounceTimer);\n }\n\n debounceTimer = setTimeout(() => {\n if (isReported) return;\n\n // 只有超过最小时长才上报\n if (duration >= minDuration) {\n try {\n onLeave(duration, reason, meta);\n isReported = true;\n } catch (error) {\n console.error('[trackPageStayTime] onLeave callback error:', error);\n }\n }\n }, debounceMs);\n };\n\n // 1. 标签页可见性变化(切走 / 切回来)\n const handleVisibility = () => {\n if (document.visibilityState === 'hidden') {\n // 切走:计算当前会话时间并触发上报\n const endTime = Date.now();\n const duration = endTime - lastVisibleTime;\n report(\"visibilitychange-hidden\", duration, {\n startTime: lastVisibleTime,\n endTime,\n pagePath: lastPagePath,\n pageTag: currentPageTag,\n });\n } else if (document.visibilityState === 'visible') {\n // 切回来:重新开始计时\n lastVisibleTime = Date.now();\n try {\n lastPagePath = window.location?.pathname || lastPagePath;\n } catch {\n // ignore\n }\n // 保持 currentPageTag 不变\n // 重置上报状态,允许下次切走时再次上报\n isReported = false;\n }\n };\n\n document.addEventListener(\"visibilitychange\", handleVisibility);\n\n // 2. pagehide(包含 BFCache 场景)\n const handlePageHide = (e: PageTransitionEvent) => {\n // 如果页面可能进入 BFCache,使用 persisted 标记\n const endTime = Date.now();\n const duration = endTime - lastVisibleTime;\n const meta: PageLeaveMeta = {\n startTime: lastVisibleTime,\n endTime,\n pagePath: lastPagePath,\n pageTag: currentPageTag,\n };\n if (e.persisted) {\n // BFCache 场景:计算时间并上报\n report(\"pagehide-bfcache\", duration, meta);\n } else {\n // 普通离开场景\n report(\"pagehide\", duration, meta);\n }\n };\n window.addEventListener(\"pagehide\", handlePageHide);\n\n // 3. beforeunload(刷新 / 关闭浏览器)\n // 注意:beforeunload 中只能做同步操作,异步操作可能无法执行\n const handleBeforeUnload = () => {\n // 立即计算并上报(不使用防抖)\n if (!isReported) {\n const endTime = Date.now();\n const duration = endTime - lastVisibleTime;\n const meta: PageLeaveMeta = {\n startTime: lastVisibleTime,\n endTime,\n pagePath: lastPagePath,\n pageTag: currentPageTag,\n };\n\n if (duration >= minDuration) {\n try {\n // 使用 sendBeacon 或同步方式上报\n onLeave(duration, \"beforeunload\", meta);\n isReported = true;\n } catch (error) {\n console.error('[trackPageStayTime] onLeave callback error:', error);\n }\n }\n }\n };\n window.addEventListener(\"beforeunload\", handleBeforeUnload);\n\n // 4. 路由切换(SPA)- 注意:popstate 只监听浏览器前进/后退\n // 对于 Umi 等框架,建议在路由守卫中手动调用 manualLeave\n const handlePopState = () => {\n const endTime = Date.now();\n const duration = endTime - lastVisibleTime;\n report(\"popstate\", duration, {\n startTime: lastVisibleTime,\n endTime,\n pagePath: lastPagePath,\n pageTag: currentPageTag,\n });\n };\n window.addEventListener(\"popstate\", handlePopState);\n\n // 重置计时器(用于路由切换后重新开始计时)\n const reset = () => {\n lastVisibleTime = Date.now();\n try {\n lastPagePath = window.location?.pathname || lastPagePath;\n } catch {\n // ignore\n }\n // 重置后沿用当前 tab 标记\n isReported = false;\n // 清理防抖定时器\n if (debounceTimer) {\n clearTimeout(debounceTimer);\n debounceTimer = null;\n }\n };\n\n // 5. 手动提供一个 API,方便在路由跳转中主动调用\n const manualLeave = (reason = \"manual\") => {\n const endTime = Date.now();\n const duration = endTime - lastVisibleTime;\n\n report(reason, duration, {\n startTime: lastVisibleTime,\n endTime,\n pagePath: lastPagePath,\n pageTag: currentPageTag,\n });\n \n // 如果是路由切换,上报后重置计时器,以便新页面重新开始计时\n if (reason === 'route-change') {\n // 延迟重置,确保上报完成\n setTimeout(() => {\n reset();\n }, debounceMs + 50);\n }\n };\n\n const setPageTag = (tag?: string) => {\n currentPageTag = tag || undefined;\n if (tag) {\n hasInitializedPageTag = true;\n }\n };\n\n const switchPageTag = (tag: string, reason = \"page-tag-change\") => {\n if (currentPageTag && currentPageTag !== tag) {\n isReported = false;\n manualLeave(reason);\n lastVisibleTime = Date.now();\n } else if (!hasInitializedPageTag) {\n // 首次设置 tag,重置起始时间,防止把之前停留算到旧页面\n lastVisibleTime = Date.now();\n isReported = false;\n }\n setPageTag(tag);\n };\n\n // 停止追踪\n const stop = () => {\n // 清理防抖定时器\n if (debounceTimer) {\n clearTimeout(debounceTimer);\n debounceTimer = null;\n }\n // 移除事件监听\n document.removeEventListener(\"visibilitychange\", handleVisibility);\n window.removeEventListener(\"pagehide\", handlePageHide);\n window.removeEventListener(\"beforeunload\", handleBeforeUnload);\n window.removeEventListener(\"popstate\", handlePopState);\n };\n\n // 获取当前累计停留时间(不触发上报)\n const getCurrentDuration = (): number => {\n const now = Date.now();\n const currentSessionTime = document.visibilityState === 'visible' \n ? now - lastVisibleTime \n : 0;\n return currentSessionTime;\n };\n\n return {\n manualLeave,\n reset,\n stop,\n getCurrentDuration,\n setPageTag,\n switchPageTag,\n };\n}\n\n","export type PageLeaveMeta = {\n startTime: number;\n endTime: number;\n pagePath?: string; // 离开的页面路径(不含域名),如果有则优先使用\n pageTag?: string; // 额外标记(例如 tab key)\n};\n\ntype FormatPageName = (\n pageName: string,\n context: {\n duration: number;\n reason: string;\n startTime: number;\n endTime: number;\n pagePath?: string;\n pageTag?: string;\n },\n) => string;\n\nexport interface BuildPayloadOptions {\n formatPageName?: FormatPageName;\n}\n\nexport interface PageDurationPayload {\n pageName: string;\n duration: number;\n startTime: number;\n endTime: number;\n}\n\nexport const getBasePageName = (fallbackPath?: string) => {\n try {\n if (fallbackPath) return fallbackPath || \"/\";\n const { pathname = \"/\" } = window.location || {};\n return pathname || \"/\";\n } catch {\n return \"/\";\n }\n};\n\nexport const buildPageDurationPayload = (\n duration: number,\n reason: string,\n meta: PageLeaveMeta,\n options: BuildPayloadOptions = {},\n): PageDurationPayload => {\n const { startTime, endTime, pagePath, pageTag } = meta;\n const basePageName = getBasePageName(pagePath);\n const decoratedName = pageTag ? `${basePageName}#${pageTag}` : basePageName;\n const { formatPageName } = options;\n const pageName =\n typeof formatPageName === \"function\"\n ? formatPageName(decoratedName, { duration, reason, ...meta })\n : decoratedName;\n\n return {\n pageName,\n duration,\n startTime,\n endTime,\n };\n};\n\n","import { trackPageStayTime } from \"./pageStayTime.js\";\nimport { PageLeaveMeta, buildPageDurationPayload } from \"../util/pageDuration.js\";\nimport { lazyReportCacheSLS as sendReportToSLS } from \"../report/reportSLS.js\";\nimport type { TrackPageStayTimeOptions, HistoryInstance } from \"../types/index.js\";\nimport config from \"../config/index.js\";\n\nlet pageStayTracker: ReturnType<typeof trackPageStayTime> | null = null;\nlet historyUnlisten: (() => void) | null = null;\n\ninterface PageStayTimeOptions {\n enabled?: boolean; // 是否启用,默认 false\n minDuration?: number; // 最小上报时长(毫秒),默认 1000\n debounceMs?: number; // 防抖时间(毫秒),默认 300\n onLeave?: (duration: number, reason: string, meta?: PageLeaveMeta) => void; // 离开时的回调\n}\n\n/**\n * 初始化页面停留时间追踪\n * @param options 配置选项\n * @param historyInstance 路由 history 实例(可选)\n * @param defaultOnLeave 默认的上报回调函数(可选)\n */\nexport function initPageStayTimeTracker(\n options: PageStayTimeOptions = {},\n historyInstance?: HistoryInstance,\n defaultOnLeave?: (duration: number, reason: string) => void,\n) {\n const { enabled, minDuration, debounceMs, onLeave } = options;\n \n if (enabled) {\n // 如果已经初始化过,先停止之前的追踪\n if (pageStayTracker) {\n pageStayTracker.stop();\n pageStayTracker = null;\n }\n\n // 创建页面停留时间追踪器\n const finalOnLeave =\n onLeave ||\n defaultOnLeave ||\n ((duration: number, reason: string, meta?: PageLeaveMeta) => {\n \n });\n\n pageStayTracker = trackPageStayTime(finalOnLeave, {\n minDuration,\n debounceMs,\n });\n\n // 如果传入了 history,自动监听路由变化\n if (historyInstance && historyInstance.listen) {\n // 如果之前有监听,先取消\n if (historyUnlisten) {\n historyUnlisten();\n historyUnlisten = null;\n }\n\n // 监听路由变化\n historyUnlisten = historyInstance.listen(({ location, action }) => {\n // 路由切换时,上报当前页面的停留时间\n // action: 'PUSH' | 'POP' | 'REPLACE'\n if (pageStayTracker && (action === 'PUSH' || action === 'REPLACE')) {\n pageStayTracker.manualLeave('route-change');\n }\n });\n }\n } else if (pageStayTracker) {\n // 如果禁用了,停止追踪\n pageStayTracker.stop();\n pageStayTracker = null;\n if (historyUnlisten) {\n historyUnlisten();\n historyUnlisten = null;\n }\n }\n}\n\nexport function switchPageStayTag(tag: string, reason?: string) {\n pageStayTracker?.switchPageTag(tag, reason);\n}\n\n/**\n * 初始化页面停留时间追踪(带默认上报逻辑)\n * @param trackOptions 追踪配置选项\n * @param historyInstance 路由 history 实例(可选)\n */\nexport function initPageStayTracking(\n trackOptions?: TrackPageStayTimeOptions,\n historyInstance?: HistoryInstance\n) {\n if (!trackOptions) return;\n \n const defaultOnLeave = (duration: number, reason: string, meta?: PageLeaveMeta) => {\n const payload = buildPageDurationPayload(\n duration,\n reason,\n meta || { startTime: 0, endTime: 0 },\n { formatPageName: trackOptions?.formatPageName }\n );\n sendReportToSLS('pv', payload);\n };\n \n initPageStayTimeTracker(trackOptions, historyInstance, defaultOnLeave);\n}\n\n/**\n * 停止页面停留时间追踪\n */\nexport function stopPageStayTimeTracker() {\n if (pageStayTracker) {\n pageStayTracker.stop();\n pageStayTracker = null;\n }\n if (historyUnlisten) {\n historyUnlisten();\n historyUnlisten = null;\n }\n}\n\n/**\n * 监听路由变化(仅监听,不做其他操作)\n * @param callback 路由变化时的回调函数\n * @param historyInstance 路由 history 实例(可选,如果不传则使用 init 时传入的 history)\n * @returns 返回取消监听的函数\n */\nexport function listenRouteChange(\n callback: (location: { location: any; action: string }) => void,\n historyInstance?: HistoryInstance\n): () => void {\n // 如果没有传入 history,从 config 中获取\n const history = historyInstance || ((config as any).history as HistoryInstance | null);\n \n if (!history || !history.listen) {\n console.warn('[reporting-lib] No history instance available. Please provide history in init() or pass it as parameter.');\n return () => {};\n }\n\n const unlisten = history.listen(callback);\n return unlisten;\n}\n\n","import config,{ setConfig } from \"./config/index.js\";\nimport error from \"./error/index.js\";\nimport performance from \"./performance/index.js\";\nimport api from \"./api/index.js\";\nimport { lazyReportCacheSLS as sendReportToSLS } from \"./report/reportSLS.js\";\nimport { switchPageStayTag, initPageStayTracking, listenRouteChange } from \"./performance/pageStayTimeTracker.js\";\nimport type { InitOptions, HistoryInstance } from \"./types/index.js\";\n\nlet isInit = false;\n\nconst monitor = {\n init(options: InitOptions = {}) {\n setConfig(options); //配置全局参数\n \n // 初始化页面停留时间追踪(仅在显式传入配置时执行)\n initPageStayTracking(options.trackPageStayTime, options.history);\n \n // 多次初始化只执行一次挂载监听的逻辑\n if(!isInit){\n error(); //错误监听处理\n performance(); //性能监控\n api(); //api远程请求数据采集\n isInit = true;\n }\n },\n /**\n * 自定义上报到阿里云SLS\n * @param type 上报类型\n * @param data 上报数据\n * @param options 配置选项\n * @param options.immediate 是否立即上报(默认 false)\n * @param options.timeout 延迟上报时间,单位ms(默认 3000)\n */\n reportToSLS(type: string, data: Record<string, any> = {}, options: { immediate?: boolean; timeout?: number } = {}) {\n const { immediate = false, timeout = 3000 } = options;\n sendReportToSLS(type, data,immediate, timeout);\n },\n /**\n * 切换页面标签(例如 Tab),自动结束上一标签并重置计时\n * @param tag 标识名称,如 tab key\n * @param reason 可选,默认为 'page-tag-change'\n */\n switchPageTag(tag: string, reason = \"page-tag-change\") {\n switchPageStayTag(tag, reason);\n },\n /**\n * 监听路由变化(仅监听,不做其他操作)\n * @param callback 路由变化时的回调函数,接收 { location, action } 参数\n * @param historyInstance 路由 history 实例(可选,如果不传则使用 init 时传入的 history)\n * @returns 返回取消监听的函数\n */\n listenRouteChange(\n callback: (location: { location: any; action: string }) => void,\n historyInstance?: HistoryInstance\n ) {\n return listenRouteChange(callback, historyInstance);\n },\n};\n\nexport default monitor;\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/config/index.js","../src/util/cache.js","../src/report/index.js","../src/util/tool.js","../src/config/publicParams.js","../src/error/index.js","../../node_modules/.pnpm/web-vitals@5.1.0/node_modules/web-vitals/dist/web-vitals.js","../src/performance/index.js","../src/api/xhr.js","../src/api/fetch.js","../src/api/index.js","../src/util/slsLogger.ts","../src/report/reportSLS.js","../src/performance/pageStayTime.ts","../src/util/pageDuration.ts","../src/performance/pageStayTimeTracker.ts","../src/index.ts"],"names":["config","version","config_default","setConfig","options","key","cache","cacheSLS","getCache","addCache","type","data","clearCache","getCacheSLS","addCacheSLS","clearCacheSLS","report","isImmediate","reportData","sendBeacon","timer","lazyReportCache","timeout","dataMap","reportUrl","reportWithXHR","xhr","detectWhiteScreen","samplePoints","whiteTags","onDetected","isWhiteScreen","detail","threshold","viewportWidth","viewportHeight","points","i","whiteCount","x","y","el","tag","isWhite","debounce","fn","delay","immediate","args","context","debouncedDetectWhiteScreen","resolve","pendingPromise","detectionWhiteScreen","getFullBrowserInfo","ua","name","getOSInfo","isValidOssVideoUrl","url","u","toReadableString","getRequestBodySize","body","total","value","publicParams","publicParams_default","browserInfor","FULL_MATCH","STACK_TRACE_LIMIT","parseStackLine","line","lineMatch","filename","functionName","lineno","colno","parseStackFrames","error","stack","frames","frame","event","target","errs","msg","reason","e","t","n","s","o","r","c","a","d","h","f","l","m","p","v","g","E","b","L","P","T","_","M","w","C","I","F","k","A","B","S","N","q","H","O","$","performance","sendToAnalytics","metric","originalPrototype","originalOpen","originalSend","overWriteOpenAndSend","onLoadEnd","status","duration","startTime","endTime","method","response","requestSize","code","request_url","originalFetch","overWriteFetch","res","clonedRes","fiterUrl","err","bool","fetch","api","sendLogsToSLS","logs","project","endpoint","logstore","timestamp","logData","item","acc","responseText","sendLog","lazyReportCacheSLS","reportFn","trackPageStayTime","onLeave","minDuration","debounceMs","isReported","debounceTimer","lastVisibleTime","lastPagePath","currentPageTag","hasInitializedPageTag","meta","handleVisibility","handlePageHide","handleBeforeUnload","handlePopState","reset","manualLeave","setPageTag","now","getBasePageName","fallbackPath","pathname","buildPageDurationPayload","pagePath","pageTag","basePageName","decoratedName","formatPageName","pageStayTracker","historyUnlisten","initPageStayTimeTracker","historyInstance","defaultOnLeave","enabled","location","action","switchPageStayTag","initPageStayTracking","trackOptions","payload","listenRouteChange","callback","history","isInit","monitor","index_default"],"mappings":"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","file":"index.js","sourcesContent":["const config = {\n // 项目名称\n source:'mbp', //使用平台\n userId: '', //用户信息(支持 string | number)\n //上报地址\n reportUrl: 'http://localhost:3001/report/actions',\n //是否全埋点\n trackerAll: false,\n slsProject: '',\n slsEndpoint: '',\n slsLogstore: '',\n // 路由 history 实例\n history: null\n};\n\nexport let version = '';\n\nexport default config;\n\nexport function setConfig(options) { \n for (const key in config) { \n if (options[key]) { \n config[key] = options[key];\n }\n }\n if(options['version']){\n version = options['version'];\n }\n}\n","//把上报的数据存储在map键值对中\n//key就是上报的类型\n//value就是上报的数据,是一个数组\nconst cache = new Map();\nconst cacheSLS = new Map();\n\nexport function getCache() { \n return cache;\n}\n\nexport function addCache(type, data) { \n //如果有这个类型的数据,就往数组中添加\n //没有就在map中创建新的类型,并且将data放入到数组中\n cache.get(type)? cache.get(type).push(data) : cache.set(type, [data]);\n}\n\nexport function clearCache() { \n cache.clear();\n}\n\nexport function getCacheSLS() { \n return cacheSLS;\n}\n\nexport function addCacheSLS(type, data) { \n //如果有这个类型的数据,就往数组中添加\n //没有就在map中创建新的类型,并且将data放入到数组中\n cacheSLS.get(type)? cacheSLS.get(type).push(data) : cacheSLS.set(type, [data]);\n}\n\nexport function clearCacheSLS() { \n cacheSLS.clear();\n}\n","import config from '../config/index.js'\nimport getUniqueID from \"../util/getUniqueID.js\";\nimport { getCache,addCache,clearCache } from '../util/cache.js';\n\nconst uniqueID = getUniqueID();\n/**\n * 由于我们有很多内容需要上报,\n * 所以我这里为了简单区分和上报\n * 用type来区分上报的内容是什么\n * @param {string} type 上报类型 “error” | \"action\" | \"api\" | \"performance\"\n * @param {Object} data 上报信息\n * @param {boolean} isImmediate 是否立即上报,默认为false\n */\nexport function report(type, data, isImmediate = false) { \n if (config.reportUrl === null) { \n console.error(\"请先配置上报地址\");\n return;\n }\n\n const reportData = JSON.stringify({\n user_id: Number(config.userId) || 0, //用户id\n source: config.source, //来源\n type, //上报类型\n url: window.location.pathname, //当前页面\n data, //上报信息\n })\n \n //立即上传\n if (isImmediate) { \n sendBeacon(config.reportUrl, reportData);\n return;\n }\n \n // 浏览器空闲时间进行上报\n if (window.requestIdleCallback) {\n window.requestIdleCallback(() => {\n sendBeacon(config.reportUrl, reportData);\n }, { timeout: 3000 });\n }else { \n setTimeout(() => { \n sendBeacon(config.reportUrl, reportData);\n })\n }\n \n}\n\nlet timer = null;\n//延迟上传,一定时间之后再进行上传\nexport function lazyReportCache(type, data, timeout = 3000) { \n //把数据加入到map缓存中\n addCache(type, data);\n \n clearTimeout(timer);\n timer = setTimeout(() => { \n //获取缓存中的数据\n const dataMap = getCache();\n\n if (dataMap.size) { \n for (const [type, data] of dataMap) { \n report(type, data);\n }\n\n clearCache();\n }\n\n },timeout)\n}\n\n\n//Navigator.sendBeacon()方式上报\nfunction sendBeacon(reportUrl, reportData) {\n if (navigator.sendBeacon) {\n navigator.sendBeacon(reportUrl, reportData);\n }\n else { \n reportWithXHR(reportUrl, reportData);\n }\n \n} \n\n// XMLHttpRequest方式上报\nfunction reportWithXHR(reportUrl, reportData) { \n const xhr = new XMLHttpRequest();\n xhr.open('POST', reportUrl, true);\n xhr.setRequestHeader('Content-Type', 'application/json');\n xhr.send(reportData);\n}\n","export const detectWhiteScreen = ({\n samplePoints = 6,\n whiteTags = ['HTML', 'BODY', \"IFRAME\"],\n onDetected = (isWhiteScreen, detail) => { },\n threshold = 0.9,\n} = {}) => {\n const viewportWidth = window.innerWidth;\n const viewportHeight = window.innerHeight;\n\n const points = [];\n\n for (let i = 1; i <= samplePoints; i++) {\n points.push([\n viewportWidth / 2,\n (viewportHeight / (samplePoints + 1)) * i,\n ]);\n }\n\n let whiteCount = 0;\n const detail = [];\n\n points.forEach(([x, y]) => {\n const el = document.elementFromPoint(x, y);\n const tag = el?.tagName || 'NULL';\n detail.push({ x, y, tag });\n\n if (!el || whiteTags.includes(tag)) {\n whiteCount++;\n }\n });\n\n const isWhite = whiteCount / samplePoints >= threshold;\n\n onDetected(isWhite, detail);\n};\n\nexport const debounce = (fn, delay = 300, immediate = false) => {\n let timer = null;\n\n return function (...args) {\n const context = this;\n\n if (timer) clearTimeout(timer);\n\n if (immediate && !timer) {\n fn.apply(context, args);\n }\n\n timer = setTimeout(() => {\n if (!immediate) {\n fn.apply(context, args);\n }\n timer = null;\n }, delay);\n };\n};\n\nconst debouncedDetectWhiteScreen = debounce((resolve) => {\n detectWhiteScreen({\n onDetected: (isWhite, detail) => {\n resolve(isWhite);\n pendingPromise = null;\n },\n });\n}, 1000);\n\nlet pendingPromise = null;\nexport const detectionWhiteScreen = () => {\n if (!pendingPromise) {\n pendingPromise = new Promise((resolve) => {\n setTimeout(() => {\n debouncedDetectWhiteScreen(resolve);\n }, 3000);\n })\n }\n return pendingPromise;\n};\n\nexport const getFullBrowserInfo = () => {\n const ua = navigator.userAgent;\n let name = 'Unknown';\n let version = 'Unknown';\n\n if (/edg/i.test(ua)) {\n name = 'Edge';\n version = ua.match(/edg\\/([\\d\\.]+)/i)?.[1];\n } else if (/opr/i.test(ua)) {\n name = 'Opera';\n version = ua.match(/opr\\/([\\d\\.]+)/i)?.[1];\n } else if (/chrome/i.test(ua)) {\n name = 'Chrome';\n version = ua.match(/chrome\\/([\\d\\.]+)/i)?.[1];\n } else if (/firefox/i.test(ua)) {\n name = 'Firefox';\n version = ua.match(/firefox\\/([\\d\\.]+)/i)?.[1];\n } else if (/safari/i.test(ua) && !/chrome/i.test(ua)) {\n name = 'Safari';\n version = ua.match(/version\\/([\\d\\.]+)/i)?.[1];\n } else if (/msie/i.test(ua) || /trident/i.test(ua)) {\n name = 'Internet Explorer';\n version = ua.match(/(msie\\s|rv:)([\\d\\.]+)/i)?.[2];\n }\n\n return { name, version };\n}\nexport const getOSInfo = () => {\n const ua = navigator.userAgent || navigator.vendor || window.opera;\n\n if (/windows phone/i.test(ua)) {\n return \"Windows Phone\";\n }\n if (/win/i.test(ua)) {\n return \"Windows\";\n }\n if (/android/i.test(ua)) {\n return \"Android\";\n }\n if (/iPad|iPhone|iPod/.test(ua) && !window.MSStream) {\n return \"iOS\";\n }\n if (/Macintosh|MacIntel|MacPPC|Mac68K/.test(ua)) {\n return \"macOS\";\n }\n if (/Linux/.test(ua)) {\n return \"Linux\";\n }\n\n return \"Unknown OS\";\n}\n// 识别是上传视频的链接\nexport const isValidOssVideoUrl = (url) => {\n try {\n const u = new URL(url.indexOf('http') === -1 ? `https:${url}` : url);\n\n // 域名和协议必须匹配\n // const hostOk = (\n // u.protocol === 'https:' &&\n // u.hostname === 'sd-cms-bmp.oss-accelerate.aliyuncs.com' &&\n // u.port === '443'\n // );\n\n // 路径必须匹配 /mbp/数字/video/文件名.扩展名\n const pathOk = /^\\/mbp\\/\\d+\\/video\\/[^/?#]+\\.[^/?#]+$/i.test(u.pathname);\n\n // return hostOk && pathOk;\n return pathOk;\n } catch {\n return false; // 非法 URL\n }\n}\nexport const toReadableString = (data) => {\n try {\n return JSON.stringify(data, null, 2);\n } catch (e) {\n return String(data);\n }\n}\n\nexport const getRequestBodySize = (body) => {\n if (!body) return 0;\n try {\n if (typeof body === \"string\") return new TextEncoder().encode(body).length;\n if (body instanceof Blob) return body.size;\n if (body instanceof ArrayBuffer) return body.byteLength;\n if (ArrayBuffer.isView(body)) return body.byteLength;\n if (body instanceof URLSearchParams) return new TextEncoder().encode(body.toString()).length;\n\n if (body instanceof FormData) {\n let total = 0;\n for (const [key, value] of body.entries()) {\n total += new TextEncoder().encode(key).length;\n if (typeof value === \"string\") {\n total += new TextEncoder().encode(value).length;\n } else if (value instanceof Blob) {\n total += value.size;\n }\n }\n return total;\n }\n } catch (error) {\n return 0;\n }\n\n return 0;\n}\nexport const getRequestBodySizeFetch = (body) => {\n if (!body) return 0;\n try {\n if (typeof body === \"string\") return new TextEncoder().encode(body).length;\n if (body instanceof Blob) return body.size;\n if (body instanceof ArrayBuffer) return body.byteLength;\n if (ArrayBuffer.isView(body)) return body.byteLength;\n if (body instanceof URLSearchParams) return new TextEncoder().encode(body.toString()).length;\n\n if (body instanceof FormData) {\n let total = 0;\n for (const [key, value] of body.entries()) {\n total += new TextEncoder().encode(key).length;\n if (typeof value === \"string\") {\n total += new TextEncoder().encode(value).length;\n } else if (value instanceof Blob) {\n total += value.size;\n }\n }\n return total;\n }\n } catch (error) {\n return 0;\n }\n\n return 0;\n}\n\n","import {detectionWhiteScreen,getFullBrowserInfo,getOSInfo,toReadableString} from '../util/tool.js';\n\nconst publicParams = {\n browserInfo: getFullBrowserInfo(),\n platform:getOSInfo(),\n}\n\nexport default publicParams;","import { lazyReportCache } from \"../report/index.js\";\nimport {detectionWhiteScreen,getFullBrowserInfo,getOSInfo,toReadableString} from '../util/tool.js';\nimport {version} from '../config/index.js';\nimport publicParams from '../config/publicParams.js';\n\nconst browserInfor = publicParams.browserInfor;\n\nconst reportData = {\n user_agent:browserInfor?.name+browserInfor?.version,\n platform:publicParams.platform,\n}\n\n/**\n * 这个正则表达式用于匹配 JavaScript 错误栈中的堆栈跟踪信息中的单个条目,其中包含文件名、行号和列号等信息。\n * 具体来说,它匹配以下格式的文本:\n * at functionName (filename:lineNumber:columnNumber)\n * at filename:lineNumber:columnNumber\n * at http://example.com/filename:lineNumber:columnNumber\n * at https://example.com/filename:lineNumber:columnNumber\n */\nconst FULL_MATCH =\n /^\\s*at (?:(.*?) ?\\()?((?:file|https?|blob|chrome-extension|address|native|eval|webpack|<anonymous>|[-a-z]+:|.*bundle|\\/).*?)(?::(\\d+))?(?::(\\d+))?\\)?\\s*$/i;\n\n//限制追溯的错误堆栈数量\nconst STACK_TRACE_LIMIT = 10;\n\n//通过正则表达式解析一行的错误信息\nfunction parseStackLine(line) { \n const lineMatch = line.match(FULL_MATCH);\n if (!lineMatch) return {};\n const filename = lineMatch[2] || '<anonymous>';\n const functionName = lineMatch[1] || '';\n const lineno = parseInt(lineMatch[3], 10) || undefined;\n const colno = parseInt(lineMatch[4], 10) || undefined;\n\n return {\n filename,\n functionName,\n lineno,\n colno\n }\n}\n\n//解析错误堆栈\nfunction parseStackFrames(error) { \n const { stack } = error;\n //如果没有stack直接返回[]\n if (!stack) return [];\n const frames = [];\n\n for (const line of stack.split('\\n').slice(1)) { \n const frame = parseStackLine(line); //分析一行的错误信息\n if (frame.filename) { \n //放入到堆栈错误信息数组中\n frames.push(frame);\n }\n }\n return frames.slice(0, STACK_TRACE_LIMIT);\n} \n\n\nexport default function error() {\n //资源错误没有冒泡,所以只能在捕获阶段采集获取错误\n window.addEventListener('error', async function (event) {\n const target = event.target;\n\n //要判断是资源错误,还是js错误,很简单,直接判断事件对象有没有src或者href属性就可以了\n if (target && (target.src || target.href)) {\n //上报资源错误 todo...\n const data = {\n error_type: 'resource',\n ...reportData,\n msg:toReadableString(`加载${target.tagName}失败:${target.src || target.href}`),\n version,\n }\n lazyReportCache('error', data)\n }\n else {\n const errs = parseStackFrames(event.error);\n let msg = event.message;\n if(errs?.[0]){\n const { filename,functionName,lineno, colno } = errs[0];\n msg = `${event.message},${filename},line:${lineno}:${colno}`;\n }\n \n const data = {\n error_type: 'js',\n msg:toReadableString(msg),\n ...reportData,\n version,\n }\n \n lazyReportCache('error', data)\n const isWhite = await detectionWhiteScreen();\n if(isWhite){\n lazyReportCache('error', {...data,error_type:'whiteScreen'})\n }\n }\n }, true)\n \n //promise错误\n window.addEventListener('unhandledrejection', function (event) {\n const reason = event.reason;\n const errs = parseStackFrames(reason);\n let msg = reason;\n\n if(errs?.[0]){\n const {filename,functionName,lineno,colno} = errs[0]; \n msg = `${event?.reason?.message || event?.reason},${filename},line:${lineno}:${colno}`;\n }\n \n const data = {\n error_type: 'js',\n msg:toReadableString(msg),\n ...reportData,\n version,\n }\n\n lazyReportCache('error', data)\n })\n}\n","let e=-1;const t=t=>{addEventListener(\"pageshow\",(n=>{n.persisted&&(e=n.timeStamp,t(n))}),!0)},n=(e,t,n,i)=>{let s,o;return r=>{t.value>=0&&(r||i)&&(o=t.value-(s??0),(o||void 0===s)&&(s=t.value,t.delta=o,t.rating=((e,t)=>e>t[1]?\"poor\":e>t[0]?\"needs-improvement\":\"good\")(t.value,n),e(t)))}},i=e=>{requestAnimationFrame((()=>requestAnimationFrame((()=>e()))))},s=()=>{const e=performance.getEntriesByType(\"navigation\")[0];if(e&&e.responseStart>0&&e.responseStart<performance.now())return e},o=()=>{const e=s();return e?.activationStart??0},r=(t,n=-1)=>{const i=s();let r=\"navigate\";e>=0?r=\"back-forward-cache\":i&&(document.prerendering||o()>0?r=\"prerender\":document.wasDiscarded?r=\"restore\":i.type&&(r=i.type.replace(/_/g,\"-\")));return{name:t,value:n,rating:\"good\",delta:0,entries:[],id:`v5-${Date.now()}-${Math.floor(8999999999999*Math.random())+1e12}`,navigationType:r}},c=new WeakMap;function a(e,t){return c.get(e)||c.set(e,new t),c.get(e)}class d{t;i=0;o=[];h(e){if(e.hadRecentInput)return;const t=this.o[0],n=this.o.at(-1);this.i&&t&&n&&e.startTime-n.startTime<1e3&&e.startTime-t.startTime<5e3?(this.i+=e.value,this.o.push(e)):(this.i=e.value,this.o=[e]),this.t?.(e)}}const h=(e,t,n={})=>{try{if(PerformanceObserver.supportedEntryTypes.includes(e)){const i=new PerformanceObserver((e=>{Promise.resolve().then((()=>{t(e.getEntries())}))}));return i.observe({type:e,buffered:!0,...n}),i}}catch{}},f=e=>{let t=!1;return()=>{t||(e(),t=!0)}};let u=-1;const l=new Set,m=()=>\"hidden\"!==document.visibilityState||document.prerendering?1/0:0,p=e=>{if(\"hidden\"===document.visibilityState){if(\"visibilitychange\"===e.type)for(const e of l)e();isFinite(u)||(u=\"visibilitychange\"===e.type?e.timeStamp:0,removeEventListener(\"prerenderingchange\",p,!0))}},v=()=>{if(u<0){const e=o(),n=document.prerendering?void 0:globalThis.performance.getEntriesByType(\"visibility-state\").filter((t=>\"hidden\"===t.name&&t.startTime>e))[0]?.startTime;u=n??m(),addEventListener(\"visibilitychange\",p,!0),addEventListener(\"prerenderingchange\",p,!0),t((()=>{setTimeout((()=>{u=m()}))}))}return{get firstHiddenTime(){return u},onHidden(e){l.add(e)}}},g=e=>{document.prerendering?addEventListener(\"prerenderingchange\",(()=>e()),!0):e()},y=[1800,3e3],E=(e,s={})=>{g((()=>{const c=v();let a,d=r(\"FCP\");const f=h(\"paint\",(e=>{for(const t of e)\"first-contentful-paint\"===t.name&&(f.disconnect(),t.startTime<c.firstHiddenTime&&(d.value=Math.max(t.startTime-o(),0),d.entries.push(t),a(!0)))}));f&&(a=n(e,d,y,s.reportAllChanges),t((t=>{d=r(\"FCP\"),a=n(e,d,y,s.reportAllChanges),i((()=>{d.value=performance.now()-t.timeStamp,a(!0)}))})))}))},b=[.1,.25],L=(e,s={})=>{const o=v();E(f((()=>{let c,f=r(\"CLS\",0);const u=a(s,d),l=e=>{for(const t of e)u.h(t);u.i>f.value&&(f.value=u.i,f.entries=u.o,c())},m=h(\"layout-shift\",l);m&&(c=n(e,f,b,s.reportAllChanges),o.onHidden((()=>{l(m.takeRecords()),c(!0)})),t((()=>{u.i=0,f=r(\"CLS\",0),c=n(e,f,b,s.reportAllChanges),i((()=>c()))})),setTimeout(c))})))};let P=0,T=1/0,_=0;const M=e=>{for(const t of e)t.interactionId&&(T=Math.min(T,t.interactionId),_=Math.max(_,t.interactionId),P=_?(_-T)/7+1:0)};let w;const C=()=>w?P:performance.interactionCount??0,I=()=>{\"interactionCount\"in performance||w||(w=h(\"event\",M,{type:\"event\",buffered:!0,durationThreshold:0}))};let F=0;class k{u=[];l=new Map;m;p;v(){F=C(),this.u.length=0,this.l.clear()}L(){const e=Math.min(this.u.length-1,Math.floor((C()-F)/50));return this.u[e]}h(e){if(this.m?.(e),!e.interactionId&&\"first-input\"!==e.entryType)return;const t=this.u.at(-1);let n=this.l.get(e.interactionId);if(n||this.u.length<10||e.duration>t.P){if(n?e.duration>n.P?(n.entries=[e],n.P=e.duration):e.duration===n.P&&e.startTime===n.entries[0].startTime&&n.entries.push(e):(n={id:e.interactionId,entries:[e],P:e.duration},this.l.set(n.id,n),this.u.push(n)),this.u.sort(((e,t)=>t.P-e.P)),this.u.length>10){const e=this.u.splice(10);for(const t of e)this.l.delete(t.id)}this.p?.(n)}}}const A=e=>{const t=globalThis.requestIdleCallback||setTimeout;\"hidden\"===document.visibilityState?e():(e=f(e),addEventListener(\"visibilitychange\",e,{once:!0,capture:!0}),t((()=>{e(),removeEventListener(\"visibilitychange\",e,{capture:!0})})))},B=[200,500],S=(e,i={})=>{if(!globalThis.PerformanceEventTiming||!(\"interactionId\"in PerformanceEventTiming.prototype))return;const s=v();g((()=>{I();let o,c=r(\"INP\");const d=a(i,k),f=e=>{A((()=>{for(const t of e)d.h(t);const t=d.L();t&&t.P!==c.value&&(c.value=t.P,c.entries=t.entries,o())}))},u=h(\"event\",f,{durationThreshold:i.durationThreshold??40});o=n(e,c,B,i.reportAllChanges),u&&(u.observe({type:\"first-input\",buffered:!0}),s.onHidden((()=>{f(u.takeRecords()),o(!0)})),t((()=>{d.v(),c=r(\"INP\"),o=n(e,c,B,i.reportAllChanges)})))}))};class N{m;h(e){this.m?.(e)}}const q=[2500,4e3],x=(e,s={})=>{g((()=>{const c=v();let d,u=r(\"LCP\");const l=a(s,N),m=e=>{s.reportAllChanges||(e=e.slice(-1));for(const t of e)l.h(t),t.startTime<c.firstHiddenTime&&(u.value=Math.max(t.startTime-o(),0),u.entries=[t],d())},p=h(\"largest-contentful-paint\",m);if(p){d=n(e,u,q,s.reportAllChanges);const o=f((()=>{m(p.takeRecords()),p.disconnect(),d(!0)})),c=e=>{e.isTrusted&&(A(o),removeEventListener(e.type,c,{capture:!0}))};for(const e of[\"keydown\",\"click\",\"visibilitychange\"])addEventListener(e,c,{capture:!0});t((t=>{u=r(\"LCP\"),d=n(e,u,q,s.reportAllChanges),i((()=>{u.value=performance.now()-t.timeStamp,d(!0)}))}))}}))},H=[800,1800],O=e=>{document.prerendering?g((()=>O(e))):\"complete\"!==document.readyState?addEventListener(\"load\",(()=>O(e)),!0):setTimeout(e)},$=(e,i={})=>{let c=r(\"TTFB\"),a=n(e,c,H,i.reportAllChanges);O((()=>{const d=s();d&&(c.value=Math.max(d.responseStart-o(),0),c.entries=[d],a(!0),t((()=>{c=r(\"TTFB\",0),a=n(e,c,H,i.reportAllChanges),a(!0)})))}))};export{b as CLSThresholds,y as FCPThresholds,B as INPThresholds,q as LCPThresholds,H as TTFBThresholds,L as onCLS,E as onFCP,S as onINP,x as onLCP,$ as onTTFB};\n","import { onCLS, onFCP, onLCP, onTTFB,onINP } from \"web-vitals\";\nimport { lazyReportCache } from \"../report/index.js\";\n\nexport default function performance() {\n onCLS(sendToAnalytics);\n onINP(sendToAnalytics);\n onLCP(sendToAnalytics);\n onFCP(sendToAnalytics);\n onTTFB(sendToAnalytics);\n}\n\nfunction sendToAnalytics(metric) {\n const data = {\n name: metric.name,\n value: metric.value,\n // rating: metric.rating,\n }\n lazyReportCache('performance', data);\n}\n\n","import { lazyReportCache } from '../report/index.js';\nimport {isValidOssVideoUrl,getRequestBodySize} from '../util/tool.js';\n\nconst originalPrototype = XMLHttpRequest.prototype;\nconst originalOpen = originalPrototype.open;\nconst originalSend = originalPrototype.send;\n\nfunction overWriteOpenAndSend() { \n originalPrototype.open = function newOpen(...args) { \n this.url = args[1];\n this.method = args[0];\n originalOpen.apply(this, args);\n }\n originalPrototype.send = function newSend(...args) { \n this.startTime = Date.now();\n\n const body = args[0];\n this.requestSize = getRequestBodySize(body);\n\n const onLoadEnd = () => { \n this.endTime = Date.now();\n this.duration = this.endTime - this.startTime;\n\n const { status, duration, startTime, endTime, method,response,requestSize } = this;\n let { url } = this;\n let code = status;\n let request_url = url;\n try {\n code = JSON.parse(response).code;\n }catch {\n \n }\n if(isValidOssVideoUrl(request_url)){\n request_url = `https://sd-cms-bmp.oss-accelerate.aliyuncs.com:443/mbp/video`\n }\n\n let reportData = {\n status,\n duration,\n // startTime,\n // endTime,\n request_url,\n method: method || 'GET',\n code,\n // success: status >= 200 && status < 300,\n // sub_type: 'xhr',\n // request_size: parseInt(requestSize/1000),\n }\n try {\n reportData.request_size = parseInt(requestSize/1000);\n } catch (error) {\n \n }\n\n lazyReportCache('api', reportData);\n\n this.removeEventListener('loadend', onLoadEnd, true);\n }\n\n //当请求结束时触发,无论请求成功 (load) 还是失败 (abort 或 error)\n this.addEventListener('loadend', onLoadEnd, true);\n originalSend.apply(this, args);\n }\n\n\n}\n\nexport default function xhr() { \n overWriteOpenAndSend();\n}\n","import { lazyReportCache} from '../report/index.js';\nimport {isValidOssVideoUrl,getRequestBodySize} from '../util/tool.js';\n\nconst originalFetch = window.fetch;\n\nfunction overWriteFetch() { \n window.fetch = function newFetch(url, config) { \n const startTime = Date.now();\n let request_url = url;\n if(isValidOssVideoUrl(request_url)){\n request_url = `https://sd-cms-bmp.oss-accelerate.aliyuncs.com:443/mbp/video`\n }\n\n const reportData = {\n // startTime,\n request_url,\n method: config?.method || 'GET',\n // sub_type: 'fetch',\n // request_size: parseInt(getRequestBodySize(config?.body)/1000),\n }\n try {\n reportData.request_size = parseInt(getRequestBodySize(config?.body)/1000);\n } catch (error) {\n \n }\n\n return originalFetch(url, config)\n .then(res => { \n const endTime = Date.now();\n reportData.duration = (endTime - startTime);\n reportData.status = res.status;\n \n const clonedRes = res.clone();\n if(fiterUrl(url)){\n if (!clonedRes.ok) {\n reportData.code = reportData.status;\n lazyReportCache('api', reportData);\n }else{\n clonedRes.json().then(data => {\n reportData.code = data.code;\n lazyReportCache('api', reportData);\n })\n }\n }\n \n return res;\n })\n .catch(err => { \n const endTime = Date.now();\n reportData.duration = (endTime - startTime);\n reportData.status = 0;\n reportData.code = reportData.status;\n\n lazyReportCache('api', reportData);\n\n return err;\n })\n }\n}\n\nfunction fiterUrl(url) { \n let bool = true;\n if(url.indexOf('.js.map') !== -1 || url.indexOf('.log.aliyuncs.com') !== -1){\n bool = false;\n }\n return bool;\n}\n\nexport default function fetch() { \n overWriteFetch();\n}\n","import xhr from './xhr.js';\nimport fetch from './fetch.js';\n\nexport default function api() { \n xhr();\n fetch();\n}\n","// 发送日志到阿里云SLS - 使用Track API\nexport async function sendLogsToSLS(logs: any[], {project,endpoint,logstore}:{project:string,endpoint:string,logstore:string}) {\n if (!project || !endpoint || !logstore) return\n const timestamp = Math.floor(Date.now() / 1000);\n\n // 构建日志数据 - 使用Track API格式\n const logData = {\n __logs__: logs.map((item: any) => ({\n __time__: timestamp,\n ...Object.keys(item).reduce((acc: any, key) => {\n acc[key] = String(item[key]);\n return acc;\n }, {})\n })),\n __topic__: 'default',\n __source__: 'frontend'\n };\n\n const body = JSON.stringify(logData);\n const url = `https://${project}.${endpoint}/logstores/${logstore}/track?APIVersion=0.6.0`;\n\n const response = await fetch(url, {\n method: 'POST',\n headers: {\n // 'Content-Type': 'application/x-protobuf',\n 'Content-Type': 'application/json', \n 'x-log-apiversion': '0.6.0',\n 'x-log-bodyrawsize': body.length.toString()\n },\n body: body\n });\n\n const responseText = await response.text();\n // console.log('SLS Response:', response.status, responseText);\n\n if (!response.ok) {\n throw new Error(`SLS API error: ${response.status} ${response.statusText} - ${responseText}`);\n }\n\n return response;\n}","import config from '../config/index.js'\nimport getUniqueID from \"../util/getUniqueID.js\";\nimport { getCacheSLS,addCacheSLS,clearCacheSLS } from '../util/cache.js';\nimport { sendLogsToSLS } from '../util/slsLogger.js';\nimport publicParams from '../config/publicParams.js';\n\nconst uniqueID = getUniqueID();\n/**\n * 由于我们有很多内容需要上报,\n * 所以我这里为了简单区分和上报\n * 用type来区分上报的内容是什么\n * @param {string} type 上报类型 “error” | \"action\" | \"api\" | \"performance\"\n * @param {Object} data 上报信息\n * @param {boolean} isImmediate 是否立即上报,默认为false\n */\nexport function report(type, data, isImmediate = false) { \n if (config.reportUrl === null) { \n console.error(\"请先配置上报地址\");\n return;\n }\n \n const reportData = [{\n user_id: Number(config.userId) || 0, //用户id\n source: config.source, //来源\n type, //上报类型\n url: window.location.pathname, //当前页面\n data, //上报信息\n }];\n \n //立即上传\n if (isImmediate) { \n sendLog(reportData)\n return;\n }\n \n // 浏览器空闲时间进行上报\n if (window.requestIdleCallback) {\n window.requestIdleCallback(() => {\n sendLog(reportData)\n }, { timeout: 3000 });\n }else { \n sendLog(reportData)\n }\n \n}\n\nlet timer = null;\n//延迟上传,一定时间之后再进行上传\nexport function lazyReportCacheSLS(type, data,isImmediate ,timeout = 3000) { \n data = JSON.stringify({\n ...publicParams,\n ...data,\n });\n //把数据加入到map缓存中\n addCacheSLS(type, data);\n\n if(isImmediate){\n reportFn(isImmediate);\n return;\n }\n \n clearTimeout(timer);\n timer = setTimeout(() => { \n reportFn();\n },timeout)\n}\n\nfunction reportFn(isImmediate = false){\n //获取缓存中的数据\n const dataMap = getCacheSLS();\n\n if (dataMap.size) { \n for (const [type, data] of dataMap) { \n report(type, data,isImmediate);\n }\n\n clearCacheSLS();\n }\n}\n\nfunction sendLog(reportData){\n sendLogsToSLS(reportData, {\n project: config.slsProject,\n endpoint: config.slsEndpoint,\n logstore: config.slsLogstore\n }).catch(err => {\n console.error('[reporting-lib] SLS上报失败:', err);\n });\n}\n","/**\n * 追踪页面停留时间\n * @param onLeave 离开时的回调函数,接收停留时长(毫秒)和离开原因\n * @param options 配置选项\n * @param options.minDuration 最小上报时长(毫秒),低于此值不上报,默认 1000\n * @param options.debounceMs 防抖时间(毫秒),防止短时间内重复上报,默认 300\n * @returns 返回包含 manualLeave、reset、stop 和 getCurrentDuration 方法的对象\n */\nimport { PageLeaveMeta } from \"../util/pageDuration.js\";\n\ntype TimeoutHandle = ReturnType<typeof setTimeout> | null;\n\nexport function trackPageStayTime(\n onLeave: (duration: number, reason: string, meta: PageLeaveMeta) => void,\n options: { minDuration?: number; debounceMs?: number } = {},\n) {\n const { minDuration = 1000, debounceMs = 300 } = options;\n let isReported = false; // 防止重复上报\n let debounceTimer: TimeoutHandle = null;\n let lastVisibleTime = Date.now(); // 上次可见的时间点\n let lastPagePath = (() => {\n try {\n return window.location?.pathname || \"/\";\n } catch {\n return \"/\";\n }\n })();\n let currentPageTag: string | undefined;\n let hasInitializedPageTag = false;\n\n const report = (reason: string, duration: number, meta: PageLeaveMeta) => {\n // 防止重复上报\n if (isReported) return;\n\n // 防抖处理\n if (debounceTimer) {\n clearTimeout(debounceTimer);\n }\n\n debounceTimer = setTimeout(() => {\n if (isReported) return;\n\n // 只有超过最小时长才上报\n if (duration >= minDuration) {\n try {\n onLeave(duration, reason, meta);\n isReported = true;\n } catch (error) {\n console.error('[trackPageStayTime] onLeave callback error:', error);\n }\n }\n }, debounceMs);\n };\n\n // 1. 标签页可见性变化(切走 / 切回来)\n const handleVisibility = () => {\n if (document.visibilityState === 'hidden') {\n // 切走:计算当前会话时间并触发上报\n const endTime = Date.now();\n const duration = endTime - lastVisibleTime;\n report(\"visibilitychange-hidden\", duration, {\n startTime: lastVisibleTime,\n endTime,\n pagePath: lastPagePath,\n pageTag: currentPageTag,\n });\n } else if (document.visibilityState === 'visible') {\n // 切回来:重新开始计时\n lastVisibleTime = Date.now();\n try {\n lastPagePath = window.location?.pathname || lastPagePath;\n } catch {\n // ignore\n }\n // 保持 currentPageTag 不变\n // 重置上报状态,允许下次切走时再次上报\n isReported = false;\n }\n };\n\n document.addEventListener(\"visibilitychange\", handleVisibility);\n\n // 2. pagehide(包含 BFCache 场景)\n const handlePageHide = (e: PageTransitionEvent) => {\n // 如果页面可能进入 BFCache,使用 persisted 标记\n const endTime = Date.now();\n const duration = endTime - lastVisibleTime;\n const meta: PageLeaveMeta = {\n startTime: lastVisibleTime,\n endTime,\n pagePath: lastPagePath,\n pageTag: currentPageTag,\n };\n if (e.persisted) {\n // BFCache 场景:计算时间并上报\n report(\"pagehide-bfcache\", duration, meta);\n } else {\n // 普通离开场景\n report(\"pagehide\", duration, meta);\n }\n };\n window.addEventListener(\"pagehide\", handlePageHide);\n\n // 3. beforeunload(刷新 / 关闭浏览器)\n // 注意:beforeunload 中只能做同步操作,异步操作可能无法执行\n const handleBeforeUnload = () => {\n // 立即计算并上报(不使用防抖)\n if (!isReported) {\n const endTime = Date.now();\n const duration = endTime - lastVisibleTime;\n const meta: PageLeaveMeta = {\n startTime: lastVisibleTime,\n endTime,\n pagePath: lastPagePath,\n pageTag: currentPageTag,\n };\n\n if (duration >= minDuration) {\n try {\n // 使用 sendBeacon 或同步方式上报\n onLeave(duration, \"beforeunload\", meta);\n isReported = true;\n } catch (error) {\n console.error('[trackPageStayTime] onLeave callback error:', error);\n }\n }\n }\n };\n window.addEventListener(\"beforeunload\", handleBeforeUnload);\n\n // 4. 路由切换(SPA)- 注意:popstate 只监听浏览器前进/后退\n // 对于 Umi 等框架,建议在路由守卫中手动调用 manualLeave\n const handlePopState = () => {\n const endTime = Date.now();\n const duration = endTime - lastVisibleTime;\n report(\"popstate\", duration, {\n startTime: lastVisibleTime,\n endTime,\n pagePath: lastPagePath,\n pageTag: currentPageTag,\n });\n };\n window.addEventListener(\"popstate\", handlePopState);\n\n // 重置计时器(用于路由切换后重新开始计时)\n const reset = () => {\n lastVisibleTime = Date.now();\n try {\n lastPagePath = window.location?.pathname || lastPagePath;\n } catch {\n // ignore\n }\n // 重置后沿用当前 tab 标记\n isReported = false;\n // 清理防抖定时器\n if (debounceTimer) {\n clearTimeout(debounceTimer);\n debounceTimer = null;\n }\n };\n\n // 5. 手动提供一个 API,方便在路由跳转中主动调用\n const manualLeave = (reason = \"manual\") => {\n const endTime = Date.now();\n const duration = endTime - lastVisibleTime;\n\n report(reason, duration, {\n startTime: lastVisibleTime,\n endTime,\n pagePath: lastPagePath,\n pageTag: currentPageTag,\n });\n \n // 如果是路由切换,上报后重置计时器,以便新页面重新开始计时\n if (reason === 'route-change') {\n // 延迟重置,确保上报完成\n setTimeout(() => {\n reset();\n }, debounceMs + 50);\n }\n };\n\n const setPageTag = (tag?: string) => {\n currentPageTag = tag || undefined;\n if (tag) {\n hasInitializedPageTag = true;\n }\n };\n\n const switchPageTag = (tag: string, reason = \"page-tag-change\") => {\n if (currentPageTag && currentPageTag !== tag) {\n isReported = false;\n manualLeave(reason);\n lastVisibleTime = Date.now();\n } else if (!hasInitializedPageTag) {\n // 首次设置 tag,重置起始时间,防止把之前停留算到旧页面\n lastVisibleTime = Date.now();\n isReported = false;\n }\n setPageTag(tag);\n };\n\n // 停止追踪\n const stop = () => {\n // 清理防抖定时器\n if (debounceTimer) {\n clearTimeout(debounceTimer);\n debounceTimer = null;\n }\n // 移除事件监听\n document.removeEventListener(\"visibilitychange\", handleVisibility);\n window.removeEventListener(\"pagehide\", handlePageHide);\n window.removeEventListener(\"beforeunload\", handleBeforeUnload);\n window.removeEventListener(\"popstate\", handlePopState);\n };\n\n // 获取当前累计停留时间(不触发上报)\n const getCurrentDuration = (): number => {\n const now = Date.now();\n const currentSessionTime = document.visibilityState === 'visible' \n ? now - lastVisibleTime \n : 0;\n return currentSessionTime;\n };\n\n return {\n manualLeave,\n reset,\n stop,\n getCurrentDuration,\n setPageTag,\n switchPageTag,\n };\n}\n\n","export type PageLeaveMeta = {\n startTime: number;\n endTime: number;\n pagePath?: string; // 离开的页面路径(不含域名),如果有则优先使用\n pageTag?: string; // 额外标记(例如 tab key)\n};\n\ntype FormatPageName = (\n pageName: string,\n context: {\n duration: number;\n reason: string;\n startTime: number;\n endTime: number;\n pagePath?: string;\n pageTag?: string;\n },\n) => string;\n\nexport interface BuildPayloadOptions {\n formatPageName?: FormatPageName;\n}\n\nexport interface PageDurationPayload {\n pageName: string;\n duration: number;\n startTime: number;\n endTime: number;\n}\n\nexport const getBasePageName = (fallbackPath?: string) => {\n try {\n if (fallbackPath) return fallbackPath || \"/\";\n const { pathname = \"/\" } = window.location || {};\n return pathname || \"/\";\n } catch {\n return \"/\";\n }\n};\n\nexport const buildPageDurationPayload = (\n duration: number,\n reason: string,\n meta: PageLeaveMeta,\n options: BuildPayloadOptions = {},\n): PageDurationPayload => {\n const { startTime, endTime, pagePath, pageTag } = meta;\n const basePageName = getBasePageName(pagePath);\n const decoratedName = pageTag ? `${basePageName}#${pageTag}` : basePageName;\n const { formatPageName } = options;\n const pageName =\n typeof formatPageName === \"function\"\n ? formatPageName(decoratedName, { duration, reason, ...meta })\n : decoratedName;\n\n return {\n pageName,\n duration,\n startTime,\n endTime,\n };\n};\n\n","import { trackPageStayTime } from \"./pageStayTime.js\";\nimport { PageLeaveMeta, buildPageDurationPayload } from \"../util/pageDuration.js\";\nimport { lazyReportCacheSLS as sendReportToSLS } from \"../report/reportSLS.js\";\nimport type { TrackPageStayTimeOptions, HistoryInstance } from \"../types/index.js\";\nimport config from \"../config/index.js\";\n\nlet pageStayTracker: ReturnType<typeof trackPageStayTime> | null = null;\nlet historyUnlisten: (() => void) | null = null;\n\ninterface PageStayTimeOptions {\n enabled?: boolean; // 是否启用,默认 false\n minDuration?: number; // 最小上报时长(毫秒),默认 1000\n debounceMs?: number; // 防抖时间(毫秒),默认 300\n onLeave?: (duration: number, reason: string, meta?: PageLeaveMeta) => void; // 离开时的回调\n}\n\n/**\n * 初始化页面停留时间追踪\n * @param options 配置选项\n * @param historyInstance 路由 history 实例(可选)\n * @param defaultOnLeave 默认的上报回调函数(可选)\n */\nexport function initPageStayTimeTracker(\n options: PageStayTimeOptions = {},\n historyInstance?: HistoryInstance,\n defaultOnLeave?: (duration: number, reason: string) => void,\n) {\n const { enabled, minDuration, debounceMs, onLeave } = options;\n \n if (enabled) {\n // 如果已经初始化过,先停止之前的追踪\n if (pageStayTracker) {\n pageStayTracker.stop();\n pageStayTracker = null;\n }\n\n // 创建页面停留时间追踪器\n const finalOnLeave =\n onLeave ||\n defaultOnLeave ||\n ((duration: number, reason: string, meta?: PageLeaveMeta) => {\n \n });\n\n pageStayTracker = trackPageStayTime(finalOnLeave, {\n minDuration,\n debounceMs,\n });\n\n // 如果传入了 history,自动监听路由变化\n if (historyInstance && historyInstance.listen) {\n // 如果之前有监听,先取消\n if (historyUnlisten) {\n historyUnlisten();\n historyUnlisten = null;\n }\n\n // 监听路由变化\n historyUnlisten = historyInstance.listen(({ location, action }) => {\n // 路由切换时,上报当前页面的停留时间\n // action: 'PUSH' | 'POP' | 'REPLACE'\n if (pageStayTracker && (action === 'PUSH' || action === 'REPLACE')) {\n pageStayTracker.manualLeave('route-change');\n }\n });\n }\n } else if (pageStayTracker) {\n // 如果禁用了,停止追踪\n pageStayTracker.stop();\n pageStayTracker = null;\n if (historyUnlisten) {\n historyUnlisten();\n historyUnlisten = null;\n }\n }\n}\n\nexport function switchPageStayTag(tag: string, reason?: string) {\n pageStayTracker?.switchPageTag(tag, reason);\n}\n\n/**\n * 初始化页面停留时间追踪(带默认上报逻辑)\n * @param trackOptions 追踪配置选项\n * @param historyInstance 路由 history 实例(可选)\n */\nexport function initPageStayTracking(\n trackOptions?: TrackPageStayTimeOptions,\n historyInstance?: HistoryInstance\n) {\n if (!trackOptions) return;\n \n const defaultOnLeave = (duration: number, reason: string, meta?: PageLeaveMeta) => {\n const payload = buildPageDurationPayload(\n duration,\n reason,\n meta || { startTime: 0, endTime: 0 },\n { formatPageName: trackOptions?.formatPageName }\n );\n sendReportToSLS('pd', payload);\n };\n \n initPageStayTimeTracker(trackOptions, historyInstance, defaultOnLeave);\n}\n\n/**\n * 停止页面停留时间追踪\n */\nexport function stopPageStayTimeTracker() {\n if (pageStayTracker) {\n pageStayTracker.stop();\n pageStayTracker = null;\n }\n if (historyUnlisten) {\n historyUnlisten();\n historyUnlisten = null;\n }\n}\n\n/**\n * 监听路由变化(仅监听,不做其他操作)\n * @param callback 路由变化时的回调函数\n * @param historyInstance 路由 history 实例(可选,如果不传则使用 init 时传入的 history)\n * @returns 返回取消监听的函数\n */\nexport function listenRouteChange(\n callback: (location: { location: any; action: string }) => void,\n historyInstance?: HistoryInstance\n): () => void {\n // 如果没有传入 history,从 config 中获取\n const history = historyInstance || ((config as any).history as HistoryInstance | null);\n \n if (!history || !history.listen) {\n console.warn('[reporting-lib] No history instance available. Please provide history in init() or pass it as parameter.');\n return () => {};\n }\n\n const unlisten = history.listen(callback);\n return unlisten;\n}\n\n","import config,{ setConfig } from \"./config/index.js\";\nimport error from \"./error/index.js\";\nimport performance from \"./performance/index.js\";\nimport api from \"./api/index.js\";\nimport { lazyReportCacheSLS as sendReportToSLS } from \"./report/reportSLS.js\";\nimport { switchPageStayTag, initPageStayTracking, listenRouteChange } from \"./performance/pageStayTimeTracker.js\";\nimport type { InitOptions, HistoryInstance } from \"./types/index.js\";\n\nlet isInit = false;\n\nconst monitor = {\n init(options: InitOptions = {}) {\n setConfig(options); //配置全局参数\n \n // 初始化页面停留时间追踪(仅在显式传入配置时执行)\n initPageStayTracking(options.trackPageStayTime, options.history);\n \n // 多次初始化只执行一次挂载监听的逻辑\n if(!isInit){\n error(); //错误监听处理\n performance(); //性能监控\n api(); //api远程请求数据采集\n isInit = true;\n }\n },\n /**\n * 自定义上报到阿里云SLS\n * @param type 上报类型\n * @param data 上报数据\n * @param options 配置选项\n * @param options.immediate 是否立即上报(默认 false)\n * @param options.timeout 延迟上报时间,单位ms(默认 3000)\n */\n reportToSLS(type: string, data: Record<string, any> = {}, options: { immediate?: boolean; timeout?: number } = {}) {\n const { immediate = false, timeout = 3000 } = options;\n sendReportToSLS(type, data,immediate, timeout);\n },\n /**\n * 切换页面标签(例如 Tab),自动结束上一标签并重置计时\n * @param tag 标识名称,如 tab key\n * @param reason 可选,默认为 'page-tag-change'\n */\n switchPageTag(tag: string, reason = \"page-tag-change\") {\n switchPageStayTag(tag, reason);\n },\n /**\n * 监听路由变化(仅监听,不做其他操作)\n * @param callback 路由变化时的回调函数,接收 { location, action } 参数\n * @param historyInstance 路由 history 实例(可选,如果不传则使用 init 时传入的 history)\n * @returns 返回取消监听的函数\n */\n listenRouteChange(\n callback: (location: { location: any; action: string }) => void,\n historyInstance?: HistoryInstance\n ) {\n return listenRouteChange(callback, historyInstance);\n },\n};\n\nexport default monitor;\n"]}
|
|
@@ -67,7 +67,7 @@ export function initPageStayTracking(trackOptions, historyInstance) {
|
|
|
67
67
|
return;
|
|
68
68
|
const defaultOnLeave = (duration, reason, meta) => {
|
|
69
69
|
const payload = buildPageDurationPayload(duration, reason, meta || { startTime: 0, endTime: 0 }, { formatPageName: trackOptions?.formatPageName });
|
|
70
|
-
sendReportToSLS('
|
|
70
|
+
sendReportToSLS('pd', payload);
|
|
71
71
|
};
|
|
72
72
|
initPageStayTimeTracker(trackOptions, historyInstance, defaultOnLeave);
|
|
73
73
|
}
|