@embrace-io/web-sdk
Version:
3 lines (2 loc) • 2.83 kB
JavaScript
import{EMB_TYPES as e,KEY_EMB_TYPE as t}from"../../../constants/attributes.js";import{WEB_VITALS_ID_TO_LISTENER as a,CORE_WEB_VITALS as i,ALL_WEB_VITALS as n,EMB_WEB_VITALS_PREFIX as r}from"./constants.js";import{EmbraceInstrumentationBase as o}from"../../EmbraceInstrumentationBase/EmbraceInstrumentationBase.js";import{ATTR_URL_FULL as l}from"@opentelemetry/semantic-conventions";class s extends o{constructor({diag:e,perf:t,trackingLevel:r="core",listeners:o=a,urlDocument:l=window.document}={}){super({instrumentationName:"WebVitalsInstrumentation",instrumentationVersion:"1.0.0",diag:e,perf:t,config:{}}),this._listeners=o,this._urlDocument=l,this._metricsToTrack="core"===r?[...i]:[...n],this._config.enabled&&this.enable()}disable(){}enable(){this._metricsToTrack.forEach((a=>{var i,n;null===(n=(i=this._listeners)[a])||void 0===n||n.call(i,(i=>{const n=this.sessionManager.getSessionSpan();if(!n)return;const o=this._getTimeForMetric(i),s=Object.assign({[t]:e.WebVital,[l]:this._urlDocument.URL,"emb.web_vital.navigation_type":i.navigationType,"emb.web_vital.name":i.name,"emb.web_vital.rating":i.rating,"emb.web_vital.id":i.id,"emb.web_vital.delta":i.delta,"emb.web_vital.value":i.value},((e,t)=>{const a={},i=[];if("CLS"===e){const e=t.attribution;i.push({key:"largestShiftTarget",value:e.largestShiftTarget},{key:"largestShiftValue",value:e.largestShiftValue})}else if("INP"===e){const e=t.attribution;i.push({key:"interactionTarget",value:e.interactionTarget},{key:"interactionType",value:e.interactionType},{key:"nextPaintTime",value:e.nextPaintTime},{key:"inputDelay",value:e.inputDelay},{key:"processingDuration",value:e.processingDuration},{key:"presentationDelay",value:e.presentationDelay},{key:"totalScriptDuration",value:e.totalScriptDuration},{key:"totalStyleAndLayoutDuration",value:e.totalStyleAndLayoutDuration},{key:"totalPaintDuration",value:e.totalPaintDuration},{key:"totalUnattributedDuration",value:e.totalUnattributedDuration},{key:"loadState",value:e.loadState})}else if("LCP"===e){const e=t.attribution;i.push({key:"target",value:e.target},{key:"url",value:e.url},{key:"timeToFirstByte",value:e.timeToFirstByte},{key:"resourceLoadDelay",value:e.resourceLoadDelay},{key:"resourceLoadDuration",value:e.resourceLoadDuration},{key:"elementRenderDelay",value:e.elementRenderDelay})}return i.forEach((e=>{void 0!==e.value&&(a[`emb.web_vital.attribution.${e.key}`]=e.value)})),a})(a,i));n.addEvent(`${r}-report-${a}`,s,o)}))}))}_getTimeForMetric(e){return"CLS"===e.name&&e.attribution.largestShiftTime?this.perf.epochMillisFromOriginOffset(e.attribution.largestShiftTime):"INP"===e.name&&e.attribution.interactionTime?this.perf.epochMillisFromOriginOffset(e.attribution.interactionTime):this.perf.getNowMillis()}}export{s as WebVitalsInstrumentation};
//# sourceMappingURL=WebVitalsInstrumentation.js.map