UNPKG

uxm

Version:

User experience metrics

2 lines (1 loc) 3.3 kB
var n="undefined"!=typeof window?window.performance:null;function e(){var n="undefined"!=typeof navigator?navigator.connection||navigator.mozConnection||navigator.webkitConnection:null;return n?n.effectiveType:null}function t(){if(!n||void 0===window.PerformancePaintTiming)return null;var e=n.getEntriesByType("paint").find(function(n){return"first-paint"===n.name});return e?Math.round(e.startTime):null}function r(){if(!n||void 0===window.PerformancePaintTiming)return null;var e=n.getEntriesByType("paint").find(function(n){return"first-contentful-paint"===n.name});return e?Math.round(e.startTime):null}function o(){if(!n)return null;var e=n.getEntriesByType("navigation");return e&&e[0]?Math.round(e[0].responseStart):null}function i(){if(!n)return null;var e=n.getEntriesByType("navigation");return e&&e[0]?Math.round(e[0].domContentLoadedEventEnd):null}function a(){if(!n)return null;var e=n.getEntriesByType("navigation");return e&&e[0]?Math.round(e[0].loadEventEnd):null}function u(n){void 0===n&&(n=d()),n=n.toLowerCase();var e=function(e){return-1!==n.indexOf(e)},t=e("windows"),r=t&&e("phone"),o=t&&e("touch")&&!r,i=!t&&e("iphone"),a=e("ipod"),u=e("ipad"),s=!t&&e("android"),l=s&&e("mobile"),f=s&&!e("mobile");return l||i||a||r?"phone":u||f||o?"tablet":"desktop"}function s(){return window.location.href}function d(){return window.navigator.userAgent}function l(){var n="undefined"!=typeof navigator?navigator.deviceMemory:void 0;return void 0===n?null:n>1?"full":"lite"}function f(){if(!n||"undefined"==typeof PerformanceMark)return null;var e=n.getEntriesByType("mark").map(function(n){return{type:"mark",name:n.name,startTime:Math.round(n.startTime)}}),t=n.getEntriesByType("measure").map(function(n){return{type:"measure",name:n.name,startTime:Math.round(n.startTime),duration:Math.round(n.duration)}});return e.concat(t)}function c(){return n&&"undefined"!=typeof PerformanceResourceTiming?n.getEntriesByType("navigation").concat(n.getEntriesByType("resource")).map(function(n){return{url:n.name,type:n.initiatorType,size:n.transferSize,startTime:Math.round(n.startTime),duration:Math.round(n.duration)}}):null}function m(){return void 0===window.__lt?null:window.__lt.e.map(function(n){return{startTime:Math.round(n.startTime),duration:Math.round(n.duration)}})}exports.uxm=function n(p){void 0===p&&(p={});var g={deviceType:u(),effectiveConnectionType:e(),timeToFirstByte:o(),firstPaint:t(),firstContentfulPaint:r(),domContentLoaded:i(),onLoad:a()};return g.onLoad?((p.url||p.all)&&(g.url=s()),(p.userAgent||p.all)&&(g.userAgent=d()),(p.deviceMemory||p.all)&&(g.deviceMemory=l()),(p.userTiming||p.all)&&(g.userTiming=f()),(p.longTasks||p.all)&&(g.longTasks=m()),(p.resources||p.all)&&(g.resources=c()),Promise.resolve(g)):new Promise(function(n){return setTimeout(n,250)}).then(function(){return n(p)})},exports.mark=function(e){n&&n.mark&&n.mark(e)},exports.measure=function(e,t){if(n&&n.measure)try{n.measure(e,t)}catch(n){console.error(n)}},exports.getEffectiveConnectionType=e,exports.getFirstPaint=t,exports.getFirstContentfulPaint=r,exports.getTimeToFirstByte=o,exports.getDomContentLoaded=i,exports.getOnLoad=a,exports.getDeviceType=u,exports.getUrl=s,exports.getUserAgent=d,exports.getDeviceMemory=l,exports.getUserTiming=f,exports.getResources=c,exports.getLongTasks=m;