@cloudcare/browser-rum-slim 3.3.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.
Files changed (309) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +15 -0
  3. package/bundle/dataflux-rum-slim.js +1 -0
  4. package/cjs/boot/buildEnv.js +11 -0
  5. package/cjs/boot/buildEnv.js.map +1 -0
  6. package/cjs/boot/perStartRum.js +227 -0
  7. package/cjs/boot/perStartRum.js.map +1 -0
  8. package/cjs/boot/rum.js +180 -0
  9. package/cjs/boot/rum.js.map +1 -0
  10. package/cjs/boot/rum.slim.entry.js +13 -0
  11. package/cjs/boot/rum.slim.entry.js.map +1 -0
  12. package/cjs/boot/rumEntryFactory.js +15 -0
  13. package/cjs/boot/rumEntryFactory.js.map +1 -0
  14. package/cjs/boot/rumPublicApi.js +285 -0
  15. package/cjs/boot/rumPublicApi.js.map +1 -0
  16. package/cjs/boot/rumRecorderApiStub.js +19 -0
  17. package/cjs/boot/rumRecorderApiStub.js.map +1 -0
  18. package/cjs/boot/rumSlimConfiguration.js +16 -0
  19. package/cjs/boot/rumSlimConfiguration.js.map +1 -0
  20. package/cjs/constants.js +41 -0
  21. package/cjs/constants.js.map +1 -0
  22. package/cjs/domain/assembly.js +172 -0
  23. package/cjs/domain/assembly.js.map +1 -0
  24. package/cjs/domain/configuration.js +272 -0
  25. package/cjs/domain/configuration.js.map +1 -0
  26. package/cjs/domain/contexts/commonContext.js +14 -0
  27. package/cjs/domain/contexts/commonContext.js.map +1 -0
  28. package/cjs/domain/contexts/displayContext.js +22 -0
  29. package/cjs/domain/contexts/displayContext.js.map +1 -0
  30. package/cjs/domain/contexts/foregroundContexts.js +111 -0
  31. package/cjs/domain/contexts/foregroundContexts.js.map +1 -0
  32. package/cjs/domain/contexts/internalContext.js +47 -0
  33. package/cjs/domain/contexts/internalContext.js.map +1 -0
  34. package/cjs/domain/contexts/pageStateHistory.js +111 -0
  35. package/cjs/domain/contexts/pageStateHistory.js.map +1 -0
  36. package/cjs/domain/contexts/urlContexts.js +73 -0
  37. package/cjs/domain/contexts/urlContexts.js.map +1 -0
  38. package/cjs/domain/contexts/viewContexts.js +51 -0
  39. package/cjs/domain/contexts/viewContexts.js.map +1 -0
  40. package/cjs/domain/domMutationObservable.js +69 -0
  41. package/cjs/domain/domMutationObservable.js.map +1 -0
  42. package/cjs/domain/encoderStreamId.js +11 -0
  43. package/cjs/domain/encoderStreamId.js.map +1 -0
  44. package/cjs/domain/firstInputPolyfill.js +83 -0
  45. package/cjs/domain/firstInputPolyfill.js.map +1 -0
  46. package/cjs/domain/initViewportObservable.js +44 -0
  47. package/cjs/domain/initViewportObservable.js.map +1 -0
  48. package/cjs/domain/locationChangeObservable.js +57 -0
  49. package/cjs/domain/locationChangeObservable.js.map +1 -0
  50. package/cjs/domain/performanceObservable.js +124 -0
  51. package/cjs/domain/performanceObservable.js.map +1 -0
  52. package/cjs/domain/performanceUtils.js +47 -0
  53. package/cjs/domain/performanceUtils.js.map +1 -0
  54. package/cjs/domain/requestCollection.js +127 -0
  55. package/cjs/domain/requestCollection.js.map +1 -0
  56. package/cjs/domain/rumEventsCollection/actions/actionCollection.js +89 -0
  57. package/cjs/domain/rumEventsCollection/actions/actionCollection.js.map +1 -0
  58. package/cjs/domain/rumEventsCollection/actions/clickChain.js +69 -0
  59. package/cjs/domain/rumEventsCollection/actions/clickChain.js.map +1 -0
  60. package/cjs/domain/rumEventsCollection/actions/computeFrustration.js +75 -0
  61. package/cjs/domain/rumEventsCollection/actions/computeFrustration.js.map +1 -0
  62. package/cjs/domain/rumEventsCollection/actions/getActionNameFromElement.js +232 -0
  63. package/cjs/domain/rumEventsCollection/actions/getActionNameFromElement.js.map +1 -0
  64. package/cjs/domain/rumEventsCollection/actions/getSelectorsFromElement.js +220 -0
  65. package/cjs/domain/rumEventsCollection/actions/getSelectorsFromElement.js.map +1 -0
  66. package/cjs/domain/rumEventsCollection/actions/interactionSelectorCache.js +28 -0
  67. package/cjs/domain/rumEventsCollection/actions/interactionSelectorCache.js.map +1 -0
  68. package/cjs/domain/rumEventsCollection/actions/listenActionEvents.js +73 -0
  69. package/cjs/domain/rumEventsCollection/actions/listenActionEvents.js.map +1 -0
  70. package/cjs/domain/rumEventsCollection/actions/trackClickActions.js +253 -0
  71. package/cjs/domain/rumEventsCollection/actions/trackClickActions.js.map +1 -0
  72. package/cjs/domain/rumEventsCollection/error/errorCollection.js +90 -0
  73. package/cjs/domain/rumEventsCollection/error/errorCollection.js.map +1 -0
  74. package/cjs/domain/rumEventsCollection/error/trackConsoleError.js +18 -0
  75. package/cjs/domain/rumEventsCollection/error/trackConsoleError.js.map +1 -0
  76. package/cjs/domain/rumEventsCollection/error/trackReportError.js +25 -0
  77. package/cjs/domain/rumEventsCollection/error/trackReportError.js.map +1 -0
  78. package/cjs/domain/rumEventsCollection/longTask/longAnimationFrameCollection.js +61 -0
  79. package/cjs/domain/rumEventsCollection/longTask/longAnimationFrameCollection.js.map +1 -0
  80. package/cjs/domain/rumEventsCollection/longTask/longTaskCollection.js +44 -0
  81. package/cjs/domain/rumEventsCollection/longTask/longTaskCollection.js.map +1 -0
  82. package/cjs/domain/rumEventsCollection/resource/matchRequestResourceEntry.js +74 -0
  83. package/cjs/domain/rumEventsCollection/resource/matchRequestResourceEntry.js.map +1 -0
  84. package/cjs/domain/rumEventsCollection/resource/resourceCollection.js +239 -0
  85. package/cjs/domain/rumEventsCollection/resource/resourceCollection.js.map +1 -0
  86. package/cjs/domain/rumEventsCollection/resource/resourceTrackerManager.js +237 -0
  87. package/cjs/domain/rumEventsCollection/resource/resourceTrackerManager.js.map +1 -0
  88. package/cjs/domain/rumEventsCollection/resource/resourceUtils.js +240 -0
  89. package/cjs/domain/rumEventsCollection/resource/resourceUtils.js.map +1 -0
  90. package/cjs/domain/rumEventsCollection/resource/retrieveInitialDocumentResourceTiming.js +25 -0
  91. package/cjs/domain/rumEventsCollection/resource/retrieveInitialDocumentResourceTiming.js.map +1 -0
  92. package/cjs/domain/rumEventsCollection/view/interactionCountPolyfill.js +54 -0
  93. package/cjs/domain/rumEventsCollection/view/interactionCountPolyfill.js.map +1 -0
  94. package/cjs/domain/rumEventsCollection/view/trackCommonViewMetrics.js +48 -0
  95. package/cjs/domain/rumEventsCollection/view/trackCommonViewMetrics.js.map +1 -0
  96. package/cjs/domain/rumEventsCollection/view/trackCumulativeLayoutShift.js +125 -0
  97. package/cjs/domain/rumEventsCollection/view/trackCumulativeLayoutShift.js.map +1 -0
  98. package/cjs/domain/rumEventsCollection/view/trackFirstContentfulPaint.js +27 -0
  99. package/cjs/domain/rumEventsCollection/view/trackFirstContentfulPaint.js.map +1 -0
  100. package/cjs/domain/rumEventsCollection/view/trackFirstHidden.js +55 -0
  101. package/cjs/domain/rumEventsCollection/view/trackFirstHidden.js.map +1 -0
  102. package/cjs/domain/rumEventsCollection/view/trackFirstInput.js +47 -0
  103. package/cjs/domain/rumEventsCollection/view/trackFirstInput.js.map +1 -0
  104. package/cjs/domain/rumEventsCollection/view/trackInitialViewTimings.js +51 -0
  105. package/cjs/domain/rumEventsCollection/view/trackInitialViewTimings.js.map +1 -0
  106. package/cjs/domain/rumEventsCollection/view/trackInteractionToNextPaint.js +162 -0
  107. package/cjs/domain/rumEventsCollection/view/trackInteractionToNextPaint.js.map +1 -0
  108. package/cjs/domain/rumEventsCollection/view/trackLargestContentfulPaint.js +61 -0
  109. package/cjs/domain/rumEventsCollection/view/trackLargestContentfulPaint.js.map +1 -0
  110. package/cjs/domain/rumEventsCollection/view/trackLoadingTime.js +51 -0
  111. package/cjs/domain/rumEventsCollection/view/trackLoadingTime.js.map +1 -0
  112. package/cjs/domain/rumEventsCollection/view/trackNavigationTimings.js +57 -0
  113. package/cjs/domain/rumEventsCollection/view/trackNavigationTimings.js.map +1 -0
  114. package/cjs/domain/rumEventsCollection/view/trackScrollMetrics.js +92 -0
  115. package/cjs/domain/rumEventsCollection/view/trackScrollMetrics.js.map +1 -0
  116. package/cjs/domain/rumEventsCollection/view/trackViewEventCounts.js +21 -0
  117. package/cjs/domain/rumEventsCollection/view/trackViewEventCounts.js.map +1 -0
  118. package/cjs/domain/rumEventsCollection/view/trackViews.js +269 -0
  119. package/cjs/domain/rumEventsCollection/view/trackViews.js.map +1 -0
  120. package/cjs/domain/rumEventsCollection/view/viewCollection.js +131 -0
  121. package/cjs/domain/rumEventsCollection/view/viewCollection.js.map +1 -0
  122. package/cjs/domain/rumSessionManager.js +187 -0
  123. package/cjs/domain/rumSessionManager.js.map +1 -0
  124. package/cjs/domain/tracing/ddtraceTracer.js +46 -0
  125. package/cjs/domain/tracing/ddtraceTracer.js.map +1 -0
  126. package/cjs/domain/tracing/getDocumentTraceId.js +80 -0
  127. package/cjs/domain/tracing/getDocumentTraceId.js.map +1 -0
  128. package/cjs/domain/tracing/jaegerTracer.js +48 -0
  129. package/cjs/domain/tracing/jaegerTracer.js.map +1 -0
  130. package/cjs/domain/tracing/sampler.js +69 -0
  131. package/cjs/domain/tracing/sampler.js.map +1 -0
  132. package/cjs/domain/tracing/skywalkingTracer.js +96 -0
  133. package/cjs/domain/tracing/skywalkingTracer.js.map +1 -0
  134. package/cjs/domain/tracing/traceIdentifier.js +66 -0
  135. package/cjs/domain/tracing/traceIdentifier.js.map +1 -0
  136. package/cjs/domain/tracing/tracer.js +133 -0
  137. package/cjs/domain/tracing/tracer.js.map +1 -0
  138. package/cjs/domain/tracing/w3cTraceParentTracer.js +74 -0
  139. package/cjs/domain/tracing/w3cTraceParentTracer.js.map +1 -0
  140. package/cjs/domain/tracing/zipkinMultiTracer.js +48 -0
  141. package/cjs/domain/tracing/zipkinMultiTracer.js.map +1 -0
  142. package/cjs/domain/tracing/zipkinSingleTracer.js +47 -0
  143. package/cjs/domain/tracing/zipkinSingleTracer.js.map +1 -0
  144. package/cjs/domain/trackEventCounts.js +55 -0
  145. package/cjs/domain/trackEventCounts.js.map +1 -0
  146. package/cjs/domain/usr/index.js +44 -0
  147. package/cjs/domain/usr/index.js.map +1 -0
  148. package/cjs/domain/waitPageActivityEnd.js +151 -0
  149. package/cjs/domain/waitPageActivityEnd.js.map +1 -0
  150. package/cjs/index.js +13 -0
  151. package/cjs/index.js.map +1 -0
  152. package/cjs/transport/startRumBatch.js +26 -0
  153. package/cjs/transport/startRumBatch.js.map +1 -0
  154. package/cjs/transport/startRumEventBridge.js +15 -0
  155. package/cjs/transport/startRumEventBridge.js.map +1 -0
  156. package/esm/boot/buildEnv.js +5 -0
  157. package/esm/boot/buildEnv.js.map +1 -0
  158. package/esm/boot/perStartRum.js +221 -0
  159. package/esm/boot/perStartRum.js.map +1 -0
  160. package/esm/boot/rum.js +173 -0
  161. package/esm/boot/rum.js.map +1 -0
  162. package/esm/boot/rum.slim.entry.js +7 -0
  163. package/esm/boot/rum.slim.entry.js.map +1 -0
  164. package/esm/boot/rumEntryFactory.js +9 -0
  165. package/esm/boot/rumEntryFactory.js.map +1 -0
  166. package/esm/boot/rumPublicApi.js +279 -0
  167. package/esm/boot/rumPublicApi.js.map +1 -0
  168. package/esm/boot/rumRecorderApiStub.js +13 -0
  169. package/esm/boot/rumRecorderApiStub.js.map +1 -0
  170. package/esm/boot/rumSlimConfiguration.js +10 -0
  171. package/esm/boot/rumSlimConfiguration.js.map +1 -0
  172. package/esm/constants.js +35 -0
  173. package/esm/constants.js.map +1 -0
  174. package/esm/domain/assembly.js +166 -0
  175. package/esm/domain/assembly.js.map +1 -0
  176. package/esm/domain/configuration.js +266 -0
  177. package/esm/domain/configuration.js.map +1 -0
  178. package/esm/domain/contexts/commonContext.js +8 -0
  179. package/esm/domain/contexts/commonContext.js.map +1 -0
  180. package/esm/domain/contexts/displayContext.js +16 -0
  181. package/esm/domain/contexts/displayContext.js.map +1 -0
  182. package/esm/domain/contexts/foregroundContexts.js +103 -0
  183. package/esm/domain/contexts/foregroundContexts.js.map +1 -0
  184. package/esm/domain/contexts/internalContext.js +41 -0
  185. package/esm/domain/contexts/internalContext.js.map +1 -0
  186. package/esm/domain/contexts/pageStateHistory.js +104 -0
  187. package/esm/domain/contexts/pageStateHistory.js.map +1 -0
  188. package/esm/domain/contexts/urlContexts.js +67 -0
  189. package/esm/domain/contexts/urlContexts.js.map +1 -0
  190. package/esm/domain/contexts/viewContexts.js +44 -0
  191. package/esm/domain/contexts/viewContexts.js.map +1 -0
  192. package/esm/domain/domMutationObservable.js +62 -0
  193. package/esm/domain/domMutationObservable.js.map +1 -0
  194. package/esm/domain/encoderStreamId.js +5 -0
  195. package/esm/domain/encoderStreamId.js.map +1 -0
  196. package/esm/domain/firstInputPolyfill.js +77 -0
  197. package/esm/domain/firstInputPolyfill.js.map +1 -0
  198. package/esm/domain/initViewportObservable.js +36 -0
  199. package/esm/domain/initViewportObservable.js.map +1 -0
  200. package/esm/domain/locationChangeObservable.js +51 -0
  201. package/esm/domain/locationChangeObservable.js.map +1 -0
  202. package/esm/domain/performanceObservable.js +116 -0
  203. package/esm/domain/performanceObservable.js.map +1 -0
  204. package/esm/domain/performanceUtils.js +40 -0
  205. package/esm/domain/performanceUtils.js.map +1 -0
  206. package/esm/domain/requestCollection.js +119 -0
  207. package/esm/domain/requestCollection.js.map +1 -0
  208. package/esm/domain/rumEventsCollection/actions/actionCollection.js +83 -0
  209. package/esm/domain/rumEventsCollection/actions/actionCollection.js.map +1 -0
  210. package/esm/domain/rumEventsCollection/actions/clickChain.js +62 -0
  211. package/esm/domain/rumEventsCollection/actions/clickChain.js.map +1 -0
  212. package/esm/domain/rumEventsCollection/actions/computeFrustration.js +67 -0
  213. package/esm/domain/rumEventsCollection/actions/computeFrustration.js.map +1 -0
  214. package/esm/domain/rumEventsCollection/actions/getActionNameFromElement.js +225 -0
  215. package/esm/domain/rumEventsCollection/actions/getActionNameFromElement.js.map +1 -0
  216. package/esm/domain/rumEventsCollection/actions/getSelectorsFromElement.js +212 -0
  217. package/esm/domain/rumEventsCollection/actions/getSelectorsFromElement.js.map +1 -0
  218. package/esm/domain/rumEventsCollection/actions/interactionSelectorCache.js +20 -0
  219. package/esm/domain/rumEventsCollection/actions/interactionSelectorCache.js.map +1 -0
  220. package/esm/domain/rumEventsCollection/actions/listenActionEvents.js +67 -0
  221. package/esm/domain/rumEventsCollection/actions/listenActionEvents.js.map +1 -0
  222. package/esm/domain/rumEventsCollection/actions/trackClickActions.js +244 -0
  223. package/esm/domain/rumEventsCollection/actions/trackClickActions.js.map +1 -0
  224. package/esm/domain/rumEventsCollection/error/errorCollection.js +83 -0
  225. package/esm/domain/rumEventsCollection/error/errorCollection.js.map +1 -0
  226. package/esm/domain/rumEventsCollection/error/trackConsoleError.js +12 -0
  227. package/esm/domain/rumEventsCollection/error/trackConsoleError.js.map +1 -0
  228. package/esm/domain/rumEventsCollection/error/trackReportError.js +19 -0
  229. package/esm/domain/rumEventsCollection/error/trackReportError.js.map +1 -0
  230. package/esm/domain/rumEventsCollection/longTask/longAnimationFrameCollection.js +55 -0
  231. package/esm/domain/rumEventsCollection/longTask/longAnimationFrameCollection.js.map +1 -0
  232. package/esm/domain/rumEventsCollection/longTask/longTaskCollection.js +38 -0
  233. package/esm/domain/rumEventsCollection/longTask/longTaskCollection.js.map +1 -0
  234. package/esm/domain/rumEventsCollection/resource/matchRequestResourceEntry.js +69 -0
  235. package/esm/domain/rumEventsCollection/resource/matchRequestResourceEntry.js.map +1 -0
  236. package/esm/domain/rumEventsCollection/resource/resourceCollection.js +233 -0
  237. package/esm/domain/rumEventsCollection/resource/resourceCollection.js.map +1 -0
  238. package/esm/domain/rumEventsCollection/resource/resourceTrackerManager.js +231 -0
  239. package/esm/domain/rumEventsCollection/resource/resourceTrackerManager.js.map +1 -0
  240. package/esm/domain/rumEventsCollection/resource/resourceUtils.js +218 -0
  241. package/esm/domain/rumEventsCollection/resource/resourceUtils.js.map +1 -0
  242. package/esm/domain/rumEventsCollection/resource/retrieveInitialDocumentResourceTiming.js +19 -0
  243. package/esm/domain/rumEventsCollection/resource/retrieveInitialDocumentResourceTiming.js.map +1 -0
  244. package/esm/domain/rumEventsCollection/view/interactionCountPolyfill.js +47 -0
  245. package/esm/domain/rumEventsCollection/view/interactionCountPolyfill.js.map +1 -0
  246. package/esm/domain/rumEventsCollection/view/trackCommonViewMetrics.js +42 -0
  247. package/esm/domain/rumEventsCollection/view/trackCommonViewMetrics.js.map +1 -0
  248. package/esm/domain/rumEventsCollection/view/trackCumulativeLayoutShift.js +117 -0
  249. package/esm/domain/rumEventsCollection/view/trackCumulativeLayoutShift.js.map +1 -0
  250. package/esm/domain/rumEventsCollection/view/trackFirstContentfulPaint.js +20 -0
  251. package/esm/domain/rumEventsCollection/view/trackFirstContentfulPaint.js.map +1 -0
  252. package/esm/domain/rumEventsCollection/view/trackFirstHidden.js +49 -0
  253. package/esm/domain/rumEventsCollection/view/trackFirstHidden.js.map +1 -0
  254. package/esm/domain/rumEventsCollection/view/trackFirstInput.js +41 -0
  255. package/esm/domain/rumEventsCollection/view/trackFirstInput.js.map +1 -0
  256. package/esm/domain/rumEventsCollection/view/trackInitialViewTimings.js +44 -0
  257. package/esm/domain/rumEventsCollection/view/trackInitialViewTimings.js.map +1 -0
  258. package/esm/domain/rumEventsCollection/view/trackInteractionToNextPaint.js +153 -0
  259. package/esm/domain/rumEventsCollection/view/trackInteractionToNextPaint.js.map +1 -0
  260. package/esm/domain/rumEventsCollection/view/trackLargestContentfulPaint.js +54 -0
  261. package/esm/domain/rumEventsCollection/view/trackLargestContentfulPaint.js.map +1 -0
  262. package/esm/domain/rumEventsCollection/view/trackLoadingTime.js +45 -0
  263. package/esm/domain/rumEventsCollection/view/trackLoadingTime.js.map +1 -0
  264. package/esm/domain/rumEventsCollection/view/trackNavigationTimings.js +51 -0
  265. package/esm/domain/rumEventsCollection/view/trackNavigationTimings.js.map +1 -0
  266. package/esm/domain/rumEventsCollection/view/trackScrollMetrics.js +84 -0
  267. package/esm/domain/rumEventsCollection/view/trackScrollMetrics.js.map +1 -0
  268. package/esm/domain/rumEventsCollection/view/trackViewEventCounts.js +15 -0
  269. package/esm/domain/rumEventsCollection/view/trackViewEventCounts.js.map +1 -0
  270. package/esm/domain/rumEventsCollection/view/trackViews.js +262 -0
  271. package/esm/domain/rumEventsCollection/view/trackViews.js.map +1 -0
  272. package/esm/domain/rumEventsCollection/view/viewCollection.js +125 -0
  273. package/esm/domain/rumEventsCollection/view/viewCollection.js.map +1 -0
  274. package/esm/domain/rumSessionManager.js +179 -0
  275. package/esm/domain/rumSessionManager.js.map +1 -0
  276. package/esm/domain/tracing/ddtraceTracer.js +40 -0
  277. package/esm/domain/tracing/ddtraceTracer.js.map +1 -0
  278. package/esm/domain/tracing/getDocumentTraceId.js +69 -0
  279. package/esm/domain/tracing/getDocumentTraceId.js.map +1 -0
  280. package/esm/domain/tracing/jaegerTracer.js +42 -0
  281. package/esm/domain/tracing/jaegerTracer.js.map +1 -0
  282. package/esm/domain/tracing/sampler.js +61 -0
  283. package/esm/domain/tracing/sampler.js.map +1 -0
  284. package/esm/domain/tracing/skywalkingTracer.js +90 -0
  285. package/esm/domain/tracing/skywalkingTracer.js.map +1 -0
  286. package/esm/domain/tracing/traceIdentifier.js +57 -0
  287. package/esm/domain/tracing/traceIdentifier.js.map +1 -0
  288. package/esm/domain/tracing/tracer.js +124 -0
  289. package/esm/domain/tracing/tracer.js.map +1 -0
  290. package/esm/domain/tracing/w3cTraceParentTracer.js +69 -0
  291. package/esm/domain/tracing/w3cTraceParentTracer.js.map +1 -0
  292. package/esm/domain/tracing/zipkinMultiTracer.js +42 -0
  293. package/esm/domain/tracing/zipkinMultiTracer.js.map +1 -0
  294. package/esm/domain/tracing/zipkinSingleTracer.js +41 -0
  295. package/esm/domain/tracing/zipkinSingleTracer.js.map +1 -0
  296. package/esm/domain/trackEventCounts.js +49 -0
  297. package/esm/domain/trackEventCounts.js.map +1 -0
  298. package/esm/domain/usr/index.js +38 -0
  299. package/esm/domain/usr/index.js.map +1 -0
  300. package/esm/domain/waitPageActivityEnd.js +142 -0
  301. package/esm/domain/waitPageActivityEnd.js.map +1 -0
  302. package/esm/index.js +3 -0
  303. package/esm/index.js.map +1 -0
  304. package/esm/transport/startRumBatch.js +20 -0
  305. package/esm/transport/startRumBatch.js.map +1 -0
  306. package/esm/transport/startRumEventBridge.js +9 -0
  307. package/esm/transport/startRumEventBridge.js.map +1 -0
  308. package/package.json +39 -0
  309. package/types/index.d.ts +134 -0
@@ -0,0 +1,41 @@
1
+ import { elapsed, find, isElementNode } from '@cloudcare/browser-core';
2
+ import { getSelectorFromElement } from '../actions/getSelectorsFromElement';
3
+ import { RumPerformanceEntryType, createPerformanceObservable } from '../../performanceObservable';
4
+ /**
5
+ * Track the first input occurring during the initial View to return:
6
+ * - First Input Delay
7
+ * - First Input Time
8
+ * Callback is called at most one time.
9
+ * Documentation: https://web.dev/fid/
10
+ * Reference implementation: https://github.com/GoogleChrome/web-vitals/blob/master/src/getFID.ts
11
+ */
12
+ export function trackFirstInput(configuration, firstHidden, callback) {
13
+ var performanceFirstInputSubscription = createPerformanceObservable(configuration, {
14
+ type: RumPerformanceEntryType.FIRST_INPUT,
15
+ buffered: true
16
+ }).subscribe(function (entries) {
17
+ var firstInputEntry = find(entries, function (entry) {
18
+ return entry.entryType === RumPerformanceEntryType.FIRST_INPUT && entry.startTime < firstHidden.getTimeStamp();
19
+ });
20
+ if (firstInputEntry) {
21
+ var firstInputDelay = elapsed(firstInputEntry.startTime, firstInputEntry.processingStart);
22
+ var firstInputTargetSelector;
23
+ if (firstInputEntry.target && isElementNode(firstInputEntry.target)) {
24
+ firstInputTargetSelector = getSelectorFromElement(firstInputEntry.target, configuration.actionNameAttribute);
25
+ }
26
+ callback({
27
+ // Ensure firstInputDelay to be positive, see
28
+ // https://bugs.chromium.org/p/chromium/issues/detail?id=1185815
29
+ delay: firstInputDelay >= 0 ? firstInputDelay : 0,
30
+ time: firstInputEntry.startTime,
31
+ targetSelector: firstInputTargetSelector
32
+ });
33
+ }
34
+ });
35
+ return {
36
+ stop: function stop() {
37
+ performanceFirstInputSubscription.unsubscribe();
38
+ }
39
+ };
40
+ }
41
+ //# sourceMappingURL=trackFirstInput.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trackFirstInput.js","names":["elapsed","find","isElementNode","getSelectorFromElement","RumPerformanceEntryType","createPerformanceObservable","trackFirstInput","configuration","firstHidden","callback","performanceFirstInputSubscription","type","FIRST_INPUT","buffered","subscribe","entries","firstInputEntry","entry","entryType","startTime","getTimeStamp","firstInputDelay","processingStart","firstInputTargetSelector","target","actionNameAttribute","delay","time","targetSelector","stop","unsubscribe"],"sources":["../../../../../rum/src/domain/rumEventsCollection/view/trackFirstInput.js"],"sourcesContent":["import { elapsed, find, isElementNode } from '@cloudcare/browser-core'\nimport { getSelectorFromElement } from '../actions/getSelectorsFromElement'\nimport {\n RumPerformanceEntryType,\n createPerformanceObservable\n} from '../../performanceObservable'\n/**\n * Track the first input occurring during the initial View to return:\n * - First Input Delay\n * - First Input Time\n * Callback is called at most one time.\n * Documentation: https://web.dev/fid/\n * Reference implementation: https://github.com/GoogleChrome/web-vitals/blob/master/src/getFID.ts\n */\nexport function trackFirstInput(configuration, firstHidden, callback) {\n const performanceFirstInputSubscription = createPerformanceObservable(\n configuration,\n {\n type: RumPerformanceEntryType.FIRST_INPUT,\n buffered: true\n }\n ).subscribe(function (entries) {\n var firstInputEntry = find(entries, function (entry) {\n return (\n entry.entryType === RumPerformanceEntryType.FIRST_INPUT &&\n entry.startTime < firstHidden.getTimeStamp()\n )\n })\n if (firstInputEntry) {\n var firstInputDelay = elapsed(\n firstInputEntry.startTime,\n firstInputEntry.processingStart\n )\n var firstInputTargetSelector\n if (firstInputEntry.target && isElementNode(firstInputEntry.target)) {\n firstInputTargetSelector = getSelectorFromElement(\n firstInputEntry.target,\n configuration.actionNameAttribute\n )\n }\n callback({\n // Ensure firstInputDelay to be positive, see\n // https://bugs.chromium.org/p/chromium/issues/detail?id=1185815\n delay: firstInputDelay >= 0 ? firstInputDelay : 0,\n time: firstInputEntry.startTime,\n targetSelector: firstInputTargetSelector\n })\n }\n })\n return {\n stop: function () {\n performanceFirstInputSubscription.unsubscribe()\n }\n }\n}\n"],"mappings":"AAAA,SAASA,OAAO,EAAEC,IAAI,EAAEC,aAAa,QAAQ,yBAAyB;AACtE,SAASC,sBAAsB,QAAQ,oCAAoC;AAC3E,SACEC,uBAAuB,EACvBC,2BAA2B,QACtB,6BAA6B;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,eAAeA,CAACC,aAAa,EAAEC,WAAW,EAAEC,QAAQ,EAAE;EACpE,IAAMC,iCAAiC,GAAGL,2BAA2B,CACnEE,aAAa,EACb;IACEI,IAAI,EAAEP,uBAAuB,CAACQ,WAAW;IACzCC,QAAQ,EAAE;EACZ,CACF,CAAC,CAACC,SAAS,CAAC,UAAUC,OAAO,EAAE;IAC7B,IAAIC,eAAe,GAAGf,IAAI,CAACc,OAAO,EAAE,UAAUE,KAAK,EAAE;MACnD,OACEA,KAAK,CAACC,SAAS,KAAKd,uBAAuB,CAACQ,WAAW,IACvDK,KAAK,CAACE,SAAS,GAAGX,WAAW,CAACY,YAAY,CAAC,CAAC;IAEhD,CAAC,CAAC;IACF,IAAIJ,eAAe,EAAE;MACnB,IAAIK,eAAe,GAAGrB,OAAO,CAC3BgB,eAAe,CAACG,SAAS,EACzBH,eAAe,CAACM,eAClB,CAAC;MACD,IAAIC,wBAAwB;MAC5B,IAAIP,eAAe,CAACQ,MAAM,IAAItB,aAAa,CAACc,eAAe,CAACQ,MAAM,CAAC,EAAE;QACnED,wBAAwB,GAAGpB,sBAAsB,CAC/Ca,eAAe,CAACQ,MAAM,EACtBjB,aAAa,CAACkB,mBAChB,CAAC;MACH;MACAhB,QAAQ,CAAC;QACP;QACA;QACAiB,KAAK,EAAEL,eAAe,IAAI,CAAC,GAAGA,eAAe,GAAG,CAAC;QACjDM,IAAI,EAAEX,eAAe,CAACG,SAAS;QAC/BS,cAAc,EAAEL;MAClB,CAAC,CAAC;IACJ;EACF,CAAC,CAAC;EACF,OAAO;IACLM,IAAI,EAAE,SAANA,IAAIA,CAAA,EAAc;MAChBnB,iCAAiC,CAACoB,WAAW,CAAC,CAAC;IACjD;EACF,CAAC;AACH","ignoreList":[]}
@@ -0,0 +1,44 @@
1
+ import { ONE_MINUTE } from '@cloudcare/browser-core';
2
+ import { trackFirstContentfulPaint } from './trackFirstContentfulPaint';
3
+ import { trackFirstInput } from './trackFirstInput';
4
+ import { trackNavigationTimings } from './trackNavigationTimings';
5
+ import { trackLargestContentfulPaint } from './trackLargestContentfulPaint';
6
+ import { trackFirstHidden } from './trackFirstHidden';
7
+ export var KEEP_TRACKING_TIMINGS_AFTER_VIEW_DELAY = 5 * ONE_MINUTE;
8
+ export function trackInitialViewMetrics(configuration, viewStart, setLoadEvent, scheduleViewUpdate) {
9
+ var initialViewMetrics = {};
10
+ var _trackNavigationTimings = trackNavigationTimings(configuration, function (navigationTimings) {
11
+ setLoadEvent(navigationTimings.loadEvent);
12
+ initialViewMetrics.navigationTimings = navigationTimings;
13
+ scheduleViewUpdate();
14
+ });
15
+ var firstHidden = trackFirstHidden(viewStart);
16
+ var stopNavigationTracking = _trackNavigationTimings.stop;
17
+ var _trackFirstContentfulPaint = trackFirstContentfulPaint(configuration, firstHidden, function (firstContentfulPaint) {
18
+ initialViewMetrics.firstContentfulPaint = firstContentfulPaint;
19
+ scheduleViewUpdate();
20
+ });
21
+ var stopFCPTracking = _trackFirstContentfulPaint.stop;
22
+ var _trackLargestContentfulPaint = trackLargestContentfulPaint(configuration, firstHidden, window, function (largestContentfulPaint) {
23
+ initialViewMetrics.largestContentfulPaint = largestContentfulPaint;
24
+ scheduleViewUpdate();
25
+ });
26
+ var stopLCPTracking = _trackLargestContentfulPaint.stop;
27
+ var _trackFirstInput = trackFirstInput(configuration, firstHidden, function (firstInput) {
28
+ initialViewMetrics.firstInput = firstInput;
29
+ scheduleViewUpdate();
30
+ });
31
+ var stopFIDTracking = _trackFirstInput.stop;
32
+ function stop() {
33
+ stopNavigationTracking();
34
+ stopFCPTracking();
35
+ stopLCPTracking();
36
+ stopFIDTracking();
37
+ firstHidden.stop();
38
+ }
39
+ return {
40
+ stop: stop,
41
+ initialViewMetrics: initialViewMetrics
42
+ };
43
+ }
44
+ //# sourceMappingURL=trackInitialViewTimings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trackInitialViewTimings.js","names":["ONE_MINUTE","trackFirstContentfulPaint","trackFirstInput","trackNavigationTimings","trackLargestContentfulPaint","trackFirstHidden","KEEP_TRACKING_TIMINGS_AFTER_VIEW_DELAY","trackInitialViewMetrics","configuration","viewStart","setLoadEvent","scheduleViewUpdate","initialViewMetrics","_trackNavigationTimings","navigationTimings","loadEvent","firstHidden","stopNavigationTracking","stop","_trackFirstContentfulPaint","firstContentfulPaint","stopFCPTracking","_trackLargestContentfulPaint","window","largestContentfulPaint","stopLCPTracking","_trackFirstInput","firstInput","stopFIDTracking"],"sources":["../../../../../rum/src/domain/rumEventsCollection/view/trackInitialViewTimings.js"],"sourcesContent":["import { ONE_MINUTE } from '@cloudcare/browser-core'\nimport { trackFirstContentfulPaint } from './trackFirstContentfulPaint'\nimport { trackFirstInput } from './trackFirstInput'\nimport { trackNavigationTimings } from './trackNavigationTimings'\nimport { trackLargestContentfulPaint } from './trackLargestContentfulPaint'\nimport { trackFirstHidden } from './trackFirstHidden'\n\nexport var KEEP_TRACKING_TIMINGS_AFTER_VIEW_DELAY = 5 * ONE_MINUTE\nexport function trackInitialViewMetrics(\n configuration,\n viewStart,\n setLoadEvent,\n scheduleViewUpdate\n) {\n var initialViewMetrics = {}\n var _trackNavigationTimings = trackNavigationTimings(\n configuration,\n function (navigationTimings) {\n setLoadEvent(navigationTimings.loadEvent)\n initialViewMetrics.navigationTimings = navigationTimings\n scheduleViewUpdate()\n }\n )\n var firstHidden = trackFirstHidden(viewStart)\n var stopNavigationTracking = _trackNavigationTimings.stop\n var _trackFirstContentfulPaint = trackFirstContentfulPaint(\n configuration,\n firstHidden,\n function (firstContentfulPaint) {\n initialViewMetrics.firstContentfulPaint = firstContentfulPaint\n scheduleViewUpdate()\n }\n )\n var stopFCPTracking = _trackFirstContentfulPaint.stop\n var _trackLargestContentfulPaint = trackLargestContentfulPaint(\n configuration,\n firstHidden,\n window,\n function (largestContentfulPaint) {\n initialViewMetrics.largestContentfulPaint = largestContentfulPaint\n scheduleViewUpdate()\n }\n )\n var stopLCPTracking = _trackLargestContentfulPaint.stop\n var _trackFirstInput = trackFirstInput(\n configuration,\n firstHidden,\n function (firstInput) {\n initialViewMetrics.firstInput = firstInput\n scheduleViewUpdate()\n }\n )\n var stopFIDTracking = _trackFirstInput.stop\n function stop() {\n stopNavigationTracking()\n stopFCPTracking()\n stopLCPTracking()\n stopFIDTracking()\n firstHidden.stop()\n }\n\n return {\n stop: stop,\n initialViewMetrics: initialViewMetrics\n }\n}\n"],"mappings":"AAAA,SAASA,UAAU,QAAQ,yBAAyB;AACpD,SAASC,yBAAyB,QAAQ,6BAA6B;AACvE,SAASC,eAAe,QAAQ,mBAAmB;AACnD,SAASC,sBAAsB,QAAQ,0BAA0B;AACjE,SAASC,2BAA2B,QAAQ,+BAA+B;AAC3E,SAASC,gBAAgB,QAAQ,oBAAoB;AAErD,OAAO,IAAIC,sCAAsC,GAAG,CAAC,GAAGN,UAAU;AAClE,OAAO,SAASO,uBAAuBA,CACrCC,aAAa,EACbC,SAAS,EACTC,YAAY,EACZC,kBAAkB,EAClB;EACA,IAAIC,kBAAkB,GAAG,CAAC,CAAC;EAC3B,IAAIC,uBAAuB,GAAGV,sBAAsB,CAClDK,aAAa,EACb,UAAUM,iBAAiB,EAAE;IAC3BJ,YAAY,CAACI,iBAAiB,CAACC,SAAS,CAAC;IACzCH,kBAAkB,CAACE,iBAAiB,GAAGA,iBAAiB;IACxDH,kBAAkB,CAAC,CAAC;EACtB,CACF,CAAC;EACD,IAAIK,WAAW,GAAGX,gBAAgB,CAACI,SAAS,CAAC;EAC7C,IAAIQ,sBAAsB,GAAGJ,uBAAuB,CAACK,IAAI;EACzD,IAAIC,0BAA0B,GAAGlB,yBAAyB,CACxDO,aAAa,EACbQ,WAAW,EACX,UAAUI,oBAAoB,EAAE;IAC9BR,kBAAkB,CAACQ,oBAAoB,GAAGA,oBAAoB;IAC9DT,kBAAkB,CAAC,CAAC;EACtB,CACF,CAAC;EACD,IAAIU,eAAe,GAAGF,0BAA0B,CAACD,IAAI;EACrD,IAAII,4BAA4B,GAAGlB,2BAA2B,CAC5DI,aAAa,EACbQ,WAAW,EACXO,MAAM,EACN,UAAUC,sBAAsB,EAAE;IAChCZ,kBAAkB,CAACY,sBAAsB,GAAGA,sBAAsB;IAClEb,kBAAkB,CAAC,CAAC;EACtB,CACF,CAAC;EACD,IAAIc,eAAe,GAAGH,4BAA4B,CAACJ,IAAI;EACvD,IAAIQ,gBAAgB,GAAGxB,eAAe,CACpCM,aAAa,EACbQ,WAAW,EACX,UAAUW,UAAU,EAAE;IACpBf,kBAAkB,CAACe,UAAU,GAAGA,UAAU;IAC1ChB,kBAAkB,CAAC,CAAC;EACtB,CACF,CAAC;EACD,IAAIiB,eAAe,GAAGF,gBAAgB,CAACR,IAAI;EAC3C,SAASA,IAAIA,CAAA,EAAG;IACdD,sBAAsB,CAAC,CAAC;IACxBI,eAAe,CAAC,CAAC;IACjBI,eAAe,CAAC,CAAC;IACjBG,eAAe,CAAC,CAAC;IACjBZ,WAAW,CAACE,IAAI,CAAC,CAAC;EACpB;EAEA,OAAO;IACLA,IAAI,EAAEA,IAAI;IACVN,kBAAkB,EAAEA;EACtB,CAAC;AACH","ignoreList":[]}
@@ -0,0 +1,153 @@
1
+ import { noop, ViewLoadingType, ONE_MINUTE, elapsed, isElementNode } from '@cloudcare/browser-core';
2
+ import { getSelectorFromElement } from '../actions/getSelectorsFromElement';
3
+ import { getInteractionCount, initInteractionCountPolyfill } from './interactionCountPolyfill';
4
+ import { RumPerformanceEntryType, supportPerformanceTimingEvent, createPerformanceObservable } from '../../performanceObservable';
5
+ import { getInteractionSelector } from '../actions/interactionSelectorCache';
6
+ // Arbitrary value to prevent unnecessary memory usage on views with lots of interactions.
7
+ var MAX_INTERACTION_ENTRIES = 10;
8
+ export var MAX_INP_VALUE = 1 * ONE_MINUTE;
9
+
10
+ /**
11
+ * Track the interaction to next paint (INP).
12
+ * To avoid outliers, return the p98 worst interaction of the view.
13
+ * Documentation: https://web.dev/inp/
14
+ * Reference implementation: https://github.com/GoogleChrome/web-vitals/blob/main/src/onINP.ts
15
+ */
16
+ export function trackInteractionToNextPaint(configuration, viewStart, viewLoadingType) {
17
+ if (!isInteractionToNextPaintSupported()) {
18
+ return {
19
+ getInteractionToNextPaint: function getInteractionToNextPaint() {
20
+ return undefined;
21
+ },
22
+ setViewEnd: noop,
23
+ stop: noop
24
+ };
25
+ }
26
+ var _trackViewInteractionCount = trackViewInteractionCount(viewLoadingType);
27
+ var getViewInteractionCount = _trackViewInteractionCount.getViewInteractionCount;
28
+ var stopViewInteractionCount = _trackViewInteractionCount.stopViewInteractionCount;
29
+ var viewEnd = Infinity;
30
+ var longestInteractions = trackLongestInteractions(getViewInteractionCount);
31
+ var interactionToNextPaint = -1;
32
+ var interactionToNextPaintTargetSelector;
33
+ var interactionToNextPaintStartTime;
34
+ function handleEntries(entries) {
35
+ for (var _i = 0, entries_1 = entries; _i < entries_1.length; _i++) {
36
+ var entry = entries_1[_i];
37
+ if (entry.interactionId && entry.startTime >= viewStart && entry.startTime <= viewEnd) {
38
+ longestInteractions.process(entry);
39
+ }
40
+ }
41
+ var newInteraction = longestInteractions.estimateP98Interaction();
42
+ if (newInteraction && newInteraction.duration !== interactionToNextPaint) {
43
+ interactionToNextPaint = newInteraction.duration;
44
+ interactionToNextPaintStartTime = elapsed(viewStart, newInteraction.startTime);
45
+ interactionToNextPaintTargetSelector = getInteractionSelector(newInteraction.startTime);
46
+ if (!interactionToNextPaintTargetSelector && newInteraction.target && isElementNode(newInteraction.target)) {
47
+ interactionToNextPaintTargetSelector = getSelectorFromElement(newInteraction.target, configuration.actionNameAttribute);
48
+ }
49
+ }
50
+ }
51
+ var firstInputSubscription = createPerformanceObservable(configuration, {
52
+ type: RumPerformanceEntryType.FIRST_INPUT,
53
+ buffered: true
54
+ }).subscribe(handleEntries);
55
+ var eventSubscription = createPerformanceObservable(configuration, {
56
+ type: RumPerformanceEntryType.EVENT,
57
+ // durationThreshold only impact PerformanceEventTiming entries used for INP computation which requires a threshold at 40 (default is 104ms)
58
+ // cf: https://github.com/GoogleChrome/web-vitals/blob/3806160ffbc93c3c4abf210a167b81228172b31c/src/onINP.ts#L202-L210
59
+ durationThreshold: 40,
60
+ buffered: true
61
+ }).subscribe(handleEntries);
62
+ return {
63
+ getInteractionToNextPaint: function getInteractionToNextPaint() {
64
+ // If no INP duration where captured because of the performanceObserver 40ms threshold
65
+ // but the view interaction count > 0 then report 0
66
+ if (interactionToNextPaint >= 0) {
67
+ return {
68
+ value: Math.min(interactionToNextPaint, MAX_INP_VALUE),
69
+ targetSelector: interactionToNextPaintTargetSelector,
70
+ time: interactionToNextPaintStartTime
71
+ };
72
+ } else if (getViewInteractionCount()) {
73
+ return {
74
+ value: 0
75
+ };
76
+ }
77
+ },
78
+ setViewEnd: function setViewEnd(viewEndTime) {
79
+ viewEnd = viewEndTime;
80
+ stopViewInteractionCount();
81
+ },
82
+ stop: function stop() {
83
+ eventSubscription.unsubscribe();
84
+ firstInputSubscription.unsubscribe();
85
+ }
86
+ };
87
+ }
88
+ function trackLongestInteractions(getViewInteractionCount) {
89
+ var longestInteractions = [];
90
+ function sortAndTrimLongestInteractions() {
91
+ longestInteractions.sort(function (a, b) {
92
+ return b.duration - a.duration;
93
+ }).splice(MAX_INTERACTION_ENTRIES);
94
+ }
95
+ return {
96
+ /**
97
+ * Process the performance entry:
98
+ * - if its duration is long enough, add the performance entry to the list of worst interactions
99
+ * - if an entry with the same interaction id exists and its duration is lower than the new one, then replace it in the list of worst interactions
100
+ */
101
+ process: function process(entry) {
102
+ var interactionIndex = longestInteractions.findIndex(function (interaction) {
103
+ return entry.interactionId === interaction.interactionId;
104
+ });
105
+ var minLongestInteraction = longestInteractions[longestInteractions.length - 1];
106
+ if (interactionIndex !== -1) {
107
+ if (entry.duration > longestInteractions[interactionIndex].duration) {
108
+ longestInteractions[interactionIndex] = entry;
109
+ sortAndTrimLongestInteractions();
110
+ }
111
+ } else if (longestInteractions.length < MAX_INTERACTION_ENTRIES || entry.duration > minLongestInteraction.duration) {
112
+ longestInteractions.push(entry);
113
+ sortAndTrimLongestInteractions();
114
+ }
115
+ },
116
+ /**
117
+ * Compute the p98 longest interaction.
118
+ * For better performance the computation is based on 10 longest interactions and the interaction count of the current view.
119
+ */
120
+ estimateP98Interaction: function estimateP98Interaction() {
121
+ var interactionIndex = Math.min(longestInteractions.length - 1, Math.floor(getViewInteractionCount() / 50));
122
+ return longestInteractions[interactionIndex];
123
+ }
124
+ };
125
+ }
126
+ export function trackViewInteractionCount(viewLoadingType) {
127
+ initInteractionCountPolyfill();
128
+ var previousInteractionCount = viewLoadingType === ViewLoadingType.INITIAL_LOAD ? 0 : getInteractionCount();
129
+ var state = {
130
+ stopped: false
131
+ };
132
+ function computeViewInteractionCount() {
133
+ return getInteractionCount() - previousInteractionCount;
134
+ }
135
+ return {
136
+ getViewInteractionCount: function getViewInteractionCount() {
137
+ if (state.stopped) {
138
+ return state.interactionCount;
139
+ }
140
+ return computeViewInteractionCount();
141
+ },
142
+ stopViewInteractionCount: function stopViewInteractionCount() {
143
+ state = {
144
+ stopped: true,
145
+ interactionCount: computeViewInteractionCount()
146
+ };
147
+ }
148
+ };
149
+ }
150
+ export function isInteractionToNextPaintSupported() {
151
+ return supportPerformanceTimingEvent('event') && window.PerformanceEventTiming && 'interactionId' in PerformanceEventTiming.prototype;
152
+ }
153
+ //# sourceMappingURL=trackInteractionToNextPaint.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trackInteractionToNextPaint.js","names":["noop","ViewLoadingType","ONE_MINUTE","elapsed","isElementNode","getSelectorFromElement","getInteractionCount","initInteractionCountPolyfill","RumPerformanceEntryType","supportPerformanceTimingEvent","createPerformanceObservable","getInteractionSelector","MAX_INTERACTION_ENTRIES","MAX_INP_VALUE","trackInteractionToNextPaint","configuration","viewStart","viewLoadingType","isInteractionToNextPaintSupported","getInteractionToNextPaint","undefined","setViewEnd","stop","_trackViewInteractionCount","trackViewInteractionCount","getViewInteractionCount","stopViewInteractionCount","viewEnd","Infinity","longestInteractions","trackLongestInteractions","interactionToNextPaint","interactionToNextPaintTargetSelector","interactionToNextPaintStartTime","handleEntries","entries","_i","entries_1","length","entry","interactionId","startTime","process","newInteraction","estimateP98Interaction","duration","target","actionNameAttribute","firstInputSubscription","type","FIRST_INPUT","buffered","subscribe","eventSubscription","EVENT","durationThreshold","value","Math","min","targetSelector","time","viewEndTime","unsubscribe","sortAndTrimLongestInteractions","sort","a","b","splice","interactionIndex","findIndex","interaction","minLongestInteraction","push","floor","previousInteractionCount","INITIAL_LOAD","state","stopped","computeViewInteractionCount","interactionCount","window","PerformanceEventTiming","prototype"],"sources":["../../../../../rum/src/domain/rumEventsCollection/view/trackInteractionToNextPaint.js"],"sourcesContent":["import {\n noop,\n ViewLoadingType,\n ONE_MINUTE,\n elapsed,\n isElementNode\n} from '@cloudcare/browser-core'\nimport { getSelectorFromElement } from '../actions/getSelectorsFromElement'\nimport {\n getInteractionCount,\n initInteractionCountPolyfill\n} from './interactionCountPolyfill'\nimport {\n RumPerformanceEntryType,\n supportPerformanceTimingEvent,\n createPerformanceObservable\n} from '../../performanceObservable'\nimport { getInteractionSelector } from '../actions/interactionSelectorCache'\n// Arbitrary value to prevent unnecessary memory usage on views with lots of interactions.\nvar MAX_INTERACTION_ENTRIES = 10\n\nexport var MAX_INP_VALUE = 1 * ONE_MINUTE\n\n/**\n * Track the interaction to next paint (INP).\n * To avoid outliers, return the p98 worst interaction of the view.\n * Documentation: https://web.dev/inp/\n * Reference implementation: https://github.com/GoogleChrome/web-vitals/blob/main/src/onINP.ts\n */\nexport function trackInteractionToNextPaint(\n configuration,\n viewStart,\n viewLoadingType\n) {\n if (!isInteractionToNextPaintSupported()) {\n return {\n getInteractionToNextPaint: function () {\n return undefined\n },\n setViewEnd: noop,\n stop: noop\n }\n }\n\n var _trackViewInteractionCount = trackViewInteractionCount(viewLoadingType)\n var getViewInteractionCount =\n _trackViewInteractionCount.getViewInteractionCount\n var stopViewInteractionCount =\n _trackViewInteractionCount.stopViewInteractionCount\n\n let viewEnd = Infinity\n var longestInteractions = trackLongestInteractions(getViewInteractionCount)\n var interactionToNextPaint = -1\n var interactionToNextPaintTargetSelector\n var interactionToNextPaintStartTime\n function handleEntries(entries) {\n for (var _i = 0, entries_1 = entries; _i < entries_1.length; _i++) {\n var entry = entries_1[_i]\n if (\n entry.interactionId &&\n entry.startTime >= viewStart &&\n entry.startTime <= viewEnd\n ) {\n longestInteractions.process(entry)\n }\n }\n\n var newInteraction = longestInteractions.estimateP98Interaction()\n if (newInteraction && newInteraction.duration !== interactionToNextPaint) {\n interactionToNextPaint = newInteraction.duration\n interactionToNextPaintStartTime = elapsed(\n viewStart,\n newInteraction.startTime\n )\n interactionToNextPaintTargetSelector = getInteractionSelector(\n newInteraction.startTime\n )\n if (\n !interactionToNextPaintTargetSelector &&\n newInteraction.target &&\n isElementNode(newInteraction.target)\n ) {\n interactionToNextPaintTargetSelector = getSelectorFromElement(\n newInteraction.target,\n configuration.actionNameAttribute\n )\n }\n }\n }\n var firstInputSubscription = createPerformanceObservable(configuration, {\n type: RumPerformanceEntryType.FIRST_INPUT,\n buffered: true\n }).subscribe(handleEntries)\n\n var eventSubscription = createPerformanceObservable(configuration, {\n type: RumPerformanceEntryType.EVENT,\n // durationThreshold only impact PerformanceEventTiming entries used for INP computation which requires a threshold at 40 (default is 104ms)\n // cf: https://github.com/GoogleChrome/web-vitals/blob/3806160ffbc93c3c4abf210a167b81228172b31c/src/onINP.ts#L202-L210\n durationThreshold: 40,\n buffered: true\n }).subscribe(handleEntries)\n\n return {\n getInteractionToNextPaint: function () {\n // If no INP duration where captured because of the performanceObserver 40ms threshold\n // but the view interaction count > 0 then report 0\n if (interactionToNextPaint >= 0) {\n return {\n value: Math.min(interactionToNextPaint, MAX_INP_VALUE),\n targetSelector: interactionToNextPaintTargetSelector,\n time: interactionToNextPaintStartTime\n }\n } else if (getViewInteractionCount()) {\n return {\n value: 0\n }\n }\n },\n setViewEnd: function (viewEndTime) {\n viewEnd = viewEndTime\n stopViewInteractionCount()\n },\n stop: function () {\n eventSubscription.unsubscribe()\n firstInputSubscription.unsubscribe()\n }\n }\n}\n\nfunction trackLongestInteractions(getViewInteractionCount) {\n var longestInteractions = []\n\n function sortAndTrimLongestInteractions() {\n longestInteractions\n .sort(function (a, b) {\n return b.duration - a.duration\n })\n .splice(MAX_INTERACTION_ENTRIES)\n }\n\n return {\n /**\n * Process the performance entry:\n * - if its duration is long enough, add the performance entry to the list of worst interactions\n * - if an entry with the same interaction id exists and its duration is lower than the new one, then replace it in the list of worst interactions\n */\n process: function (entry) {\n var interactionIndex = longestInteractions.findIndex(function (\n interaction\n ) {\n return entry.interactionId === interaction.interactionId\n })\n\n var minLongestInteraction =\n longestInteractions[longestInteractions.length - 1]\n\n if (interactionIndex !== -1) {\n if (entry.duration > longestInteractions[interactionIndex].duration) {\n longestInteractions[interactionIndex] = entry\n sortAndTrimLongestInteractions()\n }\n } else if (\n longestInteractions.length < MAX_INTERACTION_ENTRIES ||\n entry.duration > minLongestInteraction.duration\n ) {\n longestInteractions.push(entry)\n sortAndTrimLongestInteractions()\n }\n },\n /**\n * Compute the p98 longest interaction.\n * For better performance the computation is based on 10 longest interactions and the interaction count of the current view.\n */\n estimateP98Interaction: function () {\n var interactionIndex = Math.min(\n longestInteractions.length - 1,\n Math.floor(getViewInteractionCount() / 50)\n )\n return longestInteractions[interactionIndex]\n }\n }\n}\n\nexport function trackViewInteractionCount(viewLoadingType) {\n initInteractionCountPolyfill()\n var previousInteractionCount =\n viewLoadingType === ViewLoadingType.INITIAL_LOAD ? 0 : getInteractionCount()\n var state = { stopped: false }\n\n function computeViewInteractionCount() {\n return getInteractionCount() - previousInteractionCount\n }\n return {\n getViewInteractionCount: function () {\n if (state.stopped) {\n return state.interactionCount\n }\n return computeViewInteractionCount()\n },\n stopViewInteractionCount: function () {\n state = {\n stopped: true,\n interactionCount: computeViewInteractionCount()\n }\n }\n }\n}\n\nexport function isInteractionToNextPaintSupported() {\n return (\n supportPerformanceTimingEvent('event') &&\n window.PerformanceEventTiming &&\n 'interactionId' in PerformanceEventTiming.prototype\n )\n}\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,54 @@
1
+ import { addEventListeners, DOM_EVENT, findLast, LifeCycleEventType, ONE_MINUTE } from '@cloudcare/browser-core';
2
+ import { getSelectorFromElement } from '../actions/getSelectorsFromElement';
3
+ import { RumPerformanceEntryType, createPerformanceObservable } from '../../performanceObservable';
4
+ /**
5
+ * Track the largest contentful paint (LCP) occurring during the initial View. This can yield
6
+ * multiple values, only the most recent one should be used.
7
+ * Documentation: https://web.dev/lcp/
8
+ * Reference implementation: https://github.com/GoogleChrome/web-vitals/blob/master/src/onLCP.ts
9
+ */
10
+ // It happens in some cases like sleep mode or some browser implementations
11
+ export var LCP_MAXIMUM_DELAY = 10 * ONE_MINUTE;
12
+ export function trackLargestContentfulPaint(configuration, firstHidden, eventTarget, callback) {
13
+ // Ignore entries that come after the first user interaction. According to the documentation, the
14
+ // browser should not send largest-contentful-paint entries after a user interact with the page,
15
+ // but the web-vitals reference implementation uses this as a safeguard.
16
+ var firstInteractionTimestamp = Infinity;
17
+ var _addEventListeners = addEventListeners(eventTarget, [DOM_EVENT.POINTER_DOWN, DOM_EVENT.KEY_DOWN], function (event) {
18
+ firstInteractionTimestamp = event.timeStamp;
19
+ }, {
20
+ capture: true,
21
+ once: true
22
+ });
23
+ var stopEventListener = _addEventListeners.stop;
24
+ var biggestLcpSize = 0;
25
+ var performanceLcpSubscription = createPerformanceObservable(configuration, {
26
+ type: RumPerformanceEntryType.LARGEST_CONTENTFUL_PAINT,
27
+ buffered: true
28
+ }).subscribe(function (entries) {
29
+ var lcpEntry = findLast(entries, function (entry) {
30
+ return entry.entryType === RumPerformanceEntryType.LARGEST_CONTENTFUL_PAINT && entry.startTime < firstInteractionTimestamp && entry.startTime < firstHidden.getTimeStamp() && entry.startTime < LCP_MAXIMUM_DELAY &&
31
+ // Ensure to get the LCP entry with the biggest size, see
32
+ // https://bugs.chromium.org/p/chromium/issues/detail?id=1516655
33
+ entry.size > biggestLcpSize;
34
+ });
35
+ if (lcpEntry) {
36
+ var lcpTargetSelector;
37
+ if (lcpEntry.element) {
38
+ lcpTargetSelector = getSelectorFromElement(lcpEntry.element, configuration.actionNameAttribute);
39
+ }
40
+ callback({
41
+ value: lcpEntry.startTime,
42
+ targetSelector: lcpTargetSelector
43
+ });
44
+ biggestLcpSize = lcpEntry.size;
45
+ }
46
+ });
47
+ return {
48
+ stop: function stop() {
49
+ stopEventListener();
50
+ performanceLcpSubscription.unsubscribe();
51
+ }
52
+ };
53
+ }
54
+ //# sourceMappingURL=trackLargestContentfulPaint.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trackLargestContentfulPaint.js","names":["addEventListeners","DOM_EVENT","findLast","LifeCycleEventType","ONE_MINUTE","getSelectorFromElement","RumPerformanceEntryType","createPerformanceObservable","LCP_MAXIMUM_DELAY","trackLargestContentfulPaint","configuration","firstHidden","eventTarget","callback","firstInteractionTimestamp","Infinity","_addEventListeners","POINTER_DOWN","KEY_DOWN","event","timeStamp","capture","once","stopEventListener","stop","biggestLcpSize","performanceLcpSubscription","type","LARGEST_CONTENTFUL_PAINT","buffered","subscribe","entries","lcpEntry","entry","entryType","startTime","getTimeStamp","size","lcpTargetSelector","element","actionNameAttribute","value","targetSelector","unsubscribe"],"sources":["../../../../../rum/src/domain/rumEventsCollection/view/trackLargestContentfulPaint.js"],"sourcesContent":["import {\n addEventListeners,\n DOM_EVENT,\n findLast,\n LifeCycleEventType,\n ONE_MINUTE\n} from '@cloudcare/browser-core'\nimport { getSelectorFromElement } from '../actions/getSelectorsFromElement'\nimport {\n RumPerformanceEntryType,\n createPerformanceObservable\n} from '../../performanceObservable'\n/**\n * Track the largest contentful paint (LCP) occurring during the initial View. This can yield\n * multiple values, only the most recent one should be used.\n * Documentation: https://web.dev/lcp/\n * Reference implementation: https://github.com/GoogleChrome/web-vitals/blob/master/src/onLCP.ts\n */\n// It happens in some cases like sleep mode or some browser implementations\nexport var LCP_MAXIMUM_DELAY = 10 * ONE_MINUTE\nexport function trackLargestContentfulPaint(\n configuration,\n firstHidden,\n eventTarget,\n callback\n) {\n // Ignore entries that come after the first user interaction. According to the documentation, the\n // browser should not send largest-contentful-paint entries after a user interact with the page,\n // but the web-vitals reference implementation uses this as a safeguard.\n var firstInteractionTimestamp = Infinity\n var _addEventListeners = addEventListeners(\n eventTarget,\n [DOM_EVENT.POINTER_DOWN, DOM_EVENT.KEY_DOWN],\n function (event) {\n firstInteractionTimestamp = event.timeStamp\n },\n { capture: true, once: true }\n )\n var stopEventListener = _addEventListeners.stop\n var biggestLcpSize = 0\n var performanceLcpSubscription = createPerformanceObservable(configuration, {\n type: RumPerformanceEntryType.LARGEST_CONTENTFUL_PAINT,\n buffered: true\n }).subscribe(function (entries) {\n var lcpEntry = findLast(entries, function (entry) {\n return (\n entry.entryType === RumPerformanceEntryType.LARGEST_CONTENTFUL_PAINT &&\n entry.startTime < firstInteractionTimestamp &&\n entry.startTime < firstHidden.getTimeStamp() &&\n entry.startTime < LCP_MAXIMUM_DELAY &&\n // Ensure to get the LCP entry with the biggest size, see\n // https://bugs.chromium.org/p/chromium/issues/detail?id=1516655\n entry.size > biggestLcpSize\n )\n })\n if (lcpEntry) {\n var lcpTargetSelector\n if (lcpEntry.element) {\n lcpTargetSelector = getSelectorFromElement(\n lcpEntry.element,\n configuration.actionNameAttribute\n )\n }\n callback({\n value: lcpEntry.startTime,\n targetSelector: lcpTargetSelector\n })\n biggestLcpSize = lcpEntry.size\n }\n })\n\n return {\n stop: function () {\n stopEventListener()\n performanceLcpSubscription.unsubscribe()\n }\n }\n}\n"],"mappings":"AAAA,SACEA,iBAAiB,EACjBC,SAAS,EACTC,QAAQ,EACRC,kBAAkB,EAClBC,UAAU,QACL,yBAAyB;AAChC,SAASC,sBAAsB,QAAQ,oCAAoC;AAC3E,SACEC,uBAAuB,EACvBC,2BAA2B,QACtB,6BAA6B;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,IAAIC,iBAAiB,GAAG,EAAE,GAAGJ,UAAU;AAC9C,OAAO,SAASK,2BAA2BA,CACzCC,aAAa,EACbC,WAAW,EACXC,WAAW,EACXC,QAAQ,EACR;EACA;EACA;EACA;EACA,IAAIC,yBAAyB,GAAGC,QAAQ;EACxC,IAAIC,kBAAkB,GAAGhB,iBAAiB,CACxCY,WAAW,EACX,CAACX,SAAS,CAACgB,YAAY,EAAEhB,SAAS,CAACiB,QAAQ,CAAC,EAC5C,UAAUC,KAAK,EAAE;IACfL,yBAAyB,GAAGK,KAAK,CAACC,SAAS;EAC7C,CAAC,EACD;IAAEC,OAAO,EAAE,IAAI;IAAEC,IAAI,EAAE;EAAK,CAC9B,CAAC;EACD,IAAIC,iBAAiB,GAAGP,kBAAkB,CAACQ,IAAI;EAC/C,IAAIC,cAAc,GAAG,CAAC;EACtB,IAAIC,0BAA0B,GAAGnB,2BAA2B,CAACG,aAAa,EAAE;IAC1EiB,IAAI,EAAErB,uBAAuB,CAACsB,wBAAwB;IACtDC,QAAQ,EAAE;EACZ,CAAC,CAAC,CAACC,SAAS,CAAC,UAAUC,OAAO,EAAE;IAC9B,IAAIC,QAAQ,GAAG9B,QAAQ,CAAC6B,OAAO,EAAE,UAAUE,KAAK,EAAE;MAChD,OACEA,KAAK,CAACC,SAAS,KAAK5B,uBAAuB,CAACsB,wBAAwB,IACpEK,KAAK,CAACE,SAAS,GAAGrB,yBAAyB,IAC3CmB,KAAK,CAACE,SAAS,GAAGxB,WAAW,CAACyB,YAAY,CAAC,CAAC,IAC5CH,KAAK,CAACE,SAAS,GAAG3B,iBAAiB;MACnC;MACA;MACAyB,KAAK,CAACI,IAAI,GAAGZ,cAAc;IAE/B,CAAC,CAAC;IACF,IAAIO,QAAQ,EAAE;MACZ,IAAIM,iBAAiB;MACrB,IAAIN,QAAQ,CAACO,OAAO,EAAE;QACpBD,iBAAiB,GAAGjC,sBAAsB,CACxC2B,QAAQ,CAACO,OAAO,EAChB7B,aAAa,CAAC8B,mBAChB,CAAC;MACH;MACA3B,QAAQ,CAAC;QACP4B,KAAK,EAAET,QAAQ,CAACG,SAAS;QACzBO,cAAc,EAAEJ;MAClB,CAAC,CAAC;MACFb,cAAc,GAAGO,QAAQ,CAACK,IAAI;IAChC;EACF,CAAC,CAAC;EAEF,OAAO;IACLb,IAAI,EAAE,SAANA,IAAIA,CAAA,EAAc;MAChBD,iBAAiB,CAAC,CAAC;MACnBG,0BAA0B,CAACiB,WAAW,CAAC,CAAC;IAC1C;EACF,CAAC;AACH","ignoreList":[]}
@@ -0,0 +1,45 @@
1
+ import { elapsed, ViewLoadingType } from '@cloudcare/browser-core';
2
+ import { waitPageActivityEnd } from '../../waitPageActivityEnd';
3
+ import { trackFirstHidden } from './trackFirstHidden';
4
+ export function trackLoadingTime(lifeCycle, domMutationObservable, configuration, loadType, viewStart, callback) {
5
+ var isWaitingForLoadEvent = loadType === ViewLoadingType.INITIAL_LOAD;
6
+ var isWaitingForActivityLoadingTime = true;
7
+ var loadingTimeCandidates = [];
8
+ var firstHidden = trackFirstHidden(viewStart);
9
+ function invokeCallbackIfAllCandidatesAreReceived() {
10
+ if (!isWaitingForActivityLoadingTime && !isWaitingForLoadEvent && loadingTimeCandidates.length > 0) {
11
+ var loadingTime = Math.max.apply(Math, loadingTimeCandidates);
12
+ if (loadingTime < firstHidden.getTimeStamp() - viewStart.relative) {
13
+ callback(loadingTime);
14
+ }
15
+ }
16
+ }
17
+ var _waitPageActivityEnd = waitPageActivityEnd(lifeCycle, domMutationObservable, configuration, function (event) {
18
+ if (isWaitingForActivityLoadingTime) {
19
+ isWaitingForActivityLoadingTime = false;
20
+ if (event.hadActivity) {
21
+ loadingTimeCandidates.push(elapsed(viewStart.timeStamp, event.end));
22
+ }
23
+ invokeCallbackIfAllCandidatesAreReceived();
24
+ }
25
+ });
26
+ var _stop = _waitPageActivityEnd.stop;
27
+ return {
28
+ setLoadEvent: function setLoadEvent(loadEvent) {
29
+ if (isWaitingForLoadEvent) {
30
+ isWaitingForLoadEvent = false;
31
+ loadingTimeCandidates.push(loadEvent);
32
+ invokeCallbackIfAllCandidatesAreReceived();
33
+ }
34
+ },
35
+ stop: function stop() {
36
+ _stop();
37
+ firstHidden.stop();
38
+ if (isWaitingForActivityLoadingTime) {
39
+ isWaitingForActivityLoadingTime = false;
40
+ invokeCallbackIfAllCandidatesAreReceived();
41
+ }
42
+ }
43
+ };
44
+ }
45
+ //# sourceMappingURL=trackLoadingTime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trackLoadingTime.js","names":["elapsed","ViewLoadingType","waitPageActivityEnd","trackFirstHidden","trackLoadingTime","lifeCycle","domMutationObservable","configuration","loadType","viewStart","callback","isWaitingForLoadEvent","INITIAL_LOAD","isWaitingForActivityLoadingTime","loadingTimeCandidates","firstHidden","invokeCallbackIfAllCandidatesAreReceived","length","loadingTime","Math","max","apply","getTimeStamp","relative","_waitPageActivityEnd","event","hadActivity","push","timeStamp","end","stop","setLoadEvent","loadEvent"],"sources":["../../../../../rum/src/domain/rumEventsCollection/view/trackLoadingTime.js"],"sourcesContent":["import { elapsed, ViewLoadingType } from '@cloudcare/browser-core'\nimport { waitPageActivityEnd } from '../../waitPageActivityEnd'\nimport { trackFirstHidden } from './trackFirstHidden'\nexport function trackLoadingTime(\n lifeCycle,\n domMutationObservable,\n configuration,\n loadType,\n viewStart,\n callback\n) {\n var isWaitingForLoadEvent = loadType === ViewLoadingType.INITIAL_LOAD\n var isWaitingForActivityLoadingTime = true\n var loadingTimeCandidates = []\n var firstHidden = trackFirstHidden(viewStart)\n function invokeCallbackIfAllCandidatesAreReceived() {\n if (\n !isWaitingForActivityLoadingTime &&\n !isWaitingForLoadEvent &&\n loadingTimeCandidates.length > 0\n ) {\n var loadingTime = Math.max.apply(Math, loadingTimeCandidates)\n if (loadingTime < firstHidden.getTimeStamp() - viewStart.relative) {\n callback(loadingTime)\n }\n }\n }\n\n var _waitPageActivityEnd = waitPageActivityEnd(\n lifeCycle,\n domMutationObservable,\n configuration,\n function (event) {\n if (isWaitingForActivityLoadingTime) {\n isWaitingForActivityLoadingTime = false\n if (event.hadActivity) {\n loadingTimeCandidates.push(elapsed(viewStart.timeStamp, event.end))\n }\n invokeCallbackIfAllCandidatesAreReceived()\n }\n }\n )\n\n var stop = _waitPageActivityEnd.stop\n return {\n setLoadEvent: function (loadEvent) {\n if (isWaitingForLoadEvent) {\n isWaitingForLoadEvent = false\n loadingTimeCandidates.push(loadEvent)\n invokeCallbackIfAllCandidatesAreReceived()\n }\n },\n stop: function () {\n stop()\n firstHidden.stop()\n if (isWaitingForActivityLoadingTime) {\n isWaitingForActivityLoadingTime = false\n invokeCallbackIfAllCandidatesAreReceived()\n }\n }\n }\n}\n"],"mappings":"AAAA,SAASA,OAAO,EAAEC,eAAe,QAAQ,yBAAyB;AAClE,SAASC,mBAAmB,QAAQ,2BAA2B;AAC/D,SAASC,gBAAgB,QAAQ,oBAAoB;AACrD,OAAO,SAASC,gBAAgBA,CAC9BC,SAAS,EACTC,qBAAqB,EACrBC,aAAa,EACbC,QAAQ,EACRC,SAAS,EACTC,QAAQ,EACR;EACA,IAAIC,qBAAqB,GAAGH,QAAQ,KAAKP,eAAe,CAACW,YAAY;EACrE,IAAIC,+BAA+B,GAAG,IAAI;EAC1C,IAAIC,qBAAqB,GAAG,EAAE;EAC9B,IAAIC,WAAW,GAAGZ,gBAAgB,CAACM,SAAS,CAAC;EAC7C,SAASO,wCAAwCA,CAAA,EAAG;IAClD,IACE,CAACH,+BAA+B,IAChC,CAACF,qBAAqB,IACtBG,qBAAqB,CAACG,MAAM,GAAG,CAAC,EAChC;MACA,IAAIC,WAAW,GAAGC,IAAI,CAACC,GAAG,CAACC,KAAK,CAACF,IAAI,EAAEL,qBAAqB,CAAC;MAC7D,IAAII,WAAW,GAAGH,WAAW,CAACO,YAAY,CAAC,CAAC,GAAGb,SAAS,CAACc,QAAQ,EAAE;QACjEb,QAAQ,CAACQ,WAAW,CAAC;MACvB;IACF;EACF;EAEA,IAAIM,oBAAoB,GAAGtB,mBAAmB,CAC5CG,SAAS,EACTC,qBAAqB,EACrBC,aAAa,EACb,UAAUkB,KAAK,EAAE;IACf,IAAIZ,+BAA+B,EAAE;MACnCA,+BAA+B,GAAG,KAAK;MACvC,IAAIY,KAAK,CAACC,WAAW,EAAE;QACrBZ,qBAAqB,CAACa,IAAI,CAAC3B,OAAO,CAACS,SAAS,CAACmB,SAAS,EAAEH,KAAK,CAACI,GAAG,CAAC,CAAC;MACrE;MACAb,wCAAwC,CAAC,CAAC;IAC5C;EACF,CACF,CAAC;EAED,IAAIc,KAAI,GAAGN,oBAAoB,CAACM,IAAI;EACpC,OAAO;IACLC,YAAY,EAAE,SAAdA,YAAYA,CAAYC,SAAS,EAAE;MACjC,IAAIrB,qBAAqB,EAAE;QACzBA,qBAAqB,GAAG,KAAK;QAC7BG,qBAAqB,CAACa,IAAI,CAACK,SAAS,CAAC;QACrChB,wCAAwC,CAAC,CAAC;MAC5C;IACF,CAAC;IACDc,IAAI,EAAE,SAANA,IAAIA,CAAA,EAAc;MAChBA,KAAI,CAAC,CAAC;MACNf,WAAW,CAACe,IAAI,CAAC,CAAC;MAClB,IAAIjB,+BAA+B,EAAE;QACnCA,+BAA+B,GAAG,KAAK;QACvCG,wCAAwC,CAAC,CAAC;MAC5C;IACF;EACF,CAAC;AACH","ignoreList":[]}
@@ -0,0 +1,51 @@
1
+ import { relativeNow, setTimeout, runOnReadyState, clearTimeout } from '@cloudcare/browser-core';
2
+ import { getNavigationEntry } from '../../performanceUtils';
3
+ export function trackNavigationTimings(configuration, callback, getNavigationEntryImpl) {
4
+ if (getNavigationEntryImpl === undefined) {
5
+ getNavigationEntryImpl = getNavigationEntry;
6
+ }
7
+ return waitAfterLoadEvent(function () {
8
+ var entry = getNavigationEntryImpl();
9
+ if (!isIncompleteNavigation(entry)) {
10
+ callback(processNavigationEntry(entry));
11
+ }
12
+ });
13
+ }
14
+ function processNavigationEntry(entry) {
15
+ return {
16
+ fetchStart: entry.fetchStart,
17
+ responseEnd: entry.responseEnd,
18
+ domComplete: entry.domComplete,
19
+ domContentLoaded: entry.domContentLoadedEventEnd,
20
+ domInteractive: entry.domInteractive,
21
+ loadEvent: entry.loadEventEnd,
22
+ loadEventEnd: entry.loadEventEnd,
23
+ loadEventStart: entry.loadEventStart,
24
+ domContentLoadedEventEnd: entry.domContentLoadedEventEnd,
25
+ domContentLoadedEventStart: entry.domContentLoadedEventStart,
26
+ // In some cases the value reported is negative or is larger
27
+ // than the current page time. Ignore these cases:
28
+ // https://github.com/GoogleChrome/web-vitals/issues/137
29
+ // https://github.com/GoogleChrome/web-vitals/issues/162
30
+ firstByte: entry.responseStart >= 0 && entry.responseStart <= relativeNow() ? entry.responseStart : undefined
31
+ };
32
+ }
33
+ function isIncompleteNavigation(entry) {
34
+ return entry.loadEventEnd <= 0;
35
+ }
36
+ function waitAfterLoadEvent(callback) {
37
+ var timeoutId;
38
+ var _runOnReadyState = runOnReadyState('complete', function () {
39
+ // Invoke the callback a bit after the actual load event, so the "loadEventEnd" timing is accurate
40
+ timeoutId = setTimeout(function () {
41
+ callback();
42
+ });
43
+ });
44
+ return {
45
+ stop: function stop() {
46
+ _runOnReadyState.stop();
47
+ clearTimeout(timeoutId);
48
+ }
49
+ };
50
+ }
51
+ //# sourceMappingURL=trackNavigationTimings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trackNavigationTimings.js","names":["relativeNow","setTimeout","runOnReadyState","clearTimeout","getNavigationEntry","trackNavigationTimings","configuration","callback","getNavigationEntryImpl","undefined","waitAfterLoadEvent","entry","isIncompleteNavigation","processNavigationEntry","fetchStart","responseEnd","domComplete","domContentLoaded","domContentLoadedEventEnd","domInteractive","loadEvent","loadEventEnd","loadEventStart","domContentLoadedEventStart","firstByte","responseStart","timeoutId","_runOnReadyState","stop"],"sources":["../../../../../rum/src/domain/rumEventsCollection/view/trackNavigationTimings.js"],"sourcesContent":["import {\n relativeNow,\n setTimeout,\n runOnReadyState,\n clearTimeout\n} from '@cloudcare/browser-core'\n\nimport { getNavigationEntry } from '../../performanceUtils'\nexport function trackNavigationTimings(\n configuration,\n callback,\n getNavigationEntryImpl\n) {\n if (getNavigationEntryImpl === undefined) {\n getNavigationEntryImpl = getNavigationEntry\n }\n return waitAfterLoadEvent(function () {\n var entry = getNavigationEntryImpl()\n\n if (!isIncompleteNavigation(entry)) {\n callback(processNavigationEntry(entry))\n }\n })\n}\n\nfunction processNavigationEntry(entry) {\n return {\n fetchStart: entry.fetchStart,\n responseEnd: entry.responseEnd,\n domComplete: entry.domComplete,\n domContentLoaded: entry.domContentLoadedEventEnd,\n domInteractive: entry.domInteractive,\n loadEvent: entry.loadEventEnd,\n loadEventEnd: entry.loadEventEnd,\n loadEventStart: entry.loadEventStart,\n domContentLoadedEventEnd: entry.domContentLoadedEventEnd,\n domContentLoadedEventStart: entry.domContentLoadedEventStart,\n // In some cases the value reported is negative or is larger\n // than the current page time. Ignore these cases:\n // https://github.com/GoogleChrome/web-vitals/issues/137\n // https://github.com/GoogleChrome/web-vitals/issues/162\n firstByte:\n entry.responseStart >= 0 && entry.responseStart <= relativeNow()\n ? entry.responseStart\n : undefined\n }\n}\n\nfunction isIncompleteNavigation(entry) {\n return entry.loadEventEnd <= 0\n}\n\nfunction waitAfterLoadEvent(callback) {\n var timeoutId\n var _runOnReadyState = runOnReadyState('complete', function () {\n // Invoke the callback a bit after the actual load event, so the \"loadEventEnd\" timing is accurate\n timeoutId = setTimeout(function () {\n callback()\n })\n })\n return {\n stop: function () {\n _runOnReadyState.stop()\n clearTimeout(timeoutId)\n }\n }\n}\n"],"mappings":"AAAA,SACEA,WAAW,EACXC,UAAU,EACVC,eAAe,EACfC,YAAY,QACP,yBAAyB;AAEhC,SAASC,kBAAkB,QAAQ,wBAAwB;AAC3D,OAAO,SAASC,sBAAsBA,CACpCC,aAAa,EACbC,QAAQ,EACRC,sBAAsB,EACtB;EACA,IAAIA,sBAAsB,KAAKC,SAAS,EAAE;IACxCD,sBAAsB,GAAGJ,kBAAkB;EAC7C;EACA,OAAOM,kBAAkB,CAAC,YAAY;IACpC,IAAIC,KAAK,GAAGH,sBAAsB,CAAC,CAAC;IAEpC,IAAI,CAACI,sBAAsB,CAACD,KAAK,CAAC,EAAE;MAClCJ,QAAQ,CAACM,sBAAsB,CAACF,KAAK,CAAC,CAAC;IACzC;EACF,CAAC,CAAC;AACJ;AAEA,SAASE,sBAAsBA,CAACF,KAAK,EAAE;EACrC,OAAO;IACLG,UAAU,EAAEH,KAAK,CAACG,UAAU;IAC5BC,WAAW,EAAEJ,KAAK,CAACI,WAAW;IAC9BC,WAAW,EAAEL,KAAK,CAACK,WAAW;IAC9BC,gBAAgB,EAAEN,KAAK,CAACO,wBAAwB;IAChDC,cAAc,EAAER,KAAK,CAACQ,cAAc;IACpCC,SAAS,EAAET,KAAK,CAACU,YAAY;IAC7BA,YAAY,EAAEV,KAAK,CAACU,YAAY;IAChCC,cAAc,EAAEX,KAAK,CAACW,cAAc;IACpCJ,wBAAwB,EAAEP,KAAK,CAACO,wBAAwB;IACxDK,0BAA0B,EAAEZ,KAAK,CAACY,0BAA0B;IAC5D;IACA;IACA;IACA;IACAC,SAAS,EACPb,KAAK,CAACc,aAAa,IAAI,CAAC,IAAId,KAAK,CAACc,aAAa,IAAIzB,WAAW,CAAC,CAAC,GAC5DW,KAAK,CAACc,aAAa,GACnBhB;EACR,CAAC;AACH;AAEA,SAASG,sBAAsBA,CAACD,KAAK,EAAE;EACrC,OAAOA,KAAK,CAACU,YAAY,IAAI,CAAC;AAChC;AAEA,SAASX,kBAAkBA,CAACH,QAAQ,EAAE;EACpC,IAAImB,SAAS;EACb,IAAIC,gBAAgB,GAAGzB,eAAe,CAAC,UAAU,EAAE,YAAY;IAC7D;IACAwB,SAAS,GAAGzB,UAAU,CAAC,YAAY;MACjCM,QAAQ,CAAC,CAAC;IACZ,CAAC,CAAC;EACJ,CAAC,CAAC;EACF,OAAO;IACLqB,IAAI,EAAE,SAANA,IAAIA,CAAA,EAAc;MAChBD,gBAAgB,CAACC,IAAI,CAAC,CAAC;MACvBzB,YAAY,CAACuB,SAAS,CAAC;IACzB;EACF,CAAC;AACH","ignoreList":[]}
@@ -0,0 +1,84 @@
1
+ import { ONE_SECOND, elapsed, relativeNow, throttle, addEventListener, DOM_EVENT, getScrollY, monitor, Observable } from '@cloudcare/browser-core';
2
+ import { getViewportDimension } from '../../initViewportObservable';
3
+
4
+ /** Arbitrary scroll throttle duration */
5
+ export var THROTTLE_SCROLL_DURATION = ONE_SECOND;
6
+ export function trackScrollMetrics(configuration, viewStart, callback, scrollValues) {
7
+ if (scrollValues === undefined) {
8
+ scrollValues = createScrollValuesObservable(configuration);
9
+ }
10
+ var maxScrollDepth = 0;
11
+ var maxScrollHeight = 0;
12
+ var maxScrollHeightTime = 0;
13
+ var subscription = scrollValues.subscribe(function (data) {
14
+ var scrollDepth = data.scrollDepth;
15
+ var scrollTop = data.scrollTop;
16
+ var scrollHeight = data.scrollHeight;
17
+ var shouldUpdate = false;
18
+ if (scrollDepth > maxScrollDepth) {
19
+ maxScrollDepth = scrollDepth;
20
+ shouldUpdate = true;
21
+ }
22
+ if (scrollHeight > maxScrollHeight) {
23
+ maxScrollHeight = scrollHeight;
24
+ var now = relativeNow();
25
+ maxScrollHeightTime = elapsed(viewStart.relative, now);
26
+ shouldUpdate = true;
27
+ }
28
+ if (shouldUpdate) {
29
+ callback({
30
+ maxDepth: Math.min(maxScrollDepth, maxScrollHeight),
31
+ maxDepthScrollTop: scrollTop,
32
+ maxScrollHeight: maxScrollHeight,
33
+ maxScrollHeightTime: maxScrollHeightTime
34
+ });
35
+ }
36
+ });
37
+ return {
38
+ stop: function stop() {
39
+ return subscription.unsubscribe();
40
+ }
41
+ };
42
+ }
43
+ export function computeScrollValues() {
44
+ var scrollTop = getScrollY();
45
+ var viewport = getViewportDimension();
46
+ var height = viewport.height;
47
+ var scrollHeight = Math.round((document.scrollingElement || document.documentElement).scrollHeight);
48
+ var scrollDepth = Math.round(height + scrollTop);
49
+ return {
50
+ scrollHeight: scrollHeight,
51
+ scrollDepth: scrollDepth,
52
+ scrollTop: scrollTop
53
+ };
54
+ }
55
+ export function createScrollValuesObservable(configuration, throttleDuration) {
56
+ if (throttleDuration === undefined) {
57
+ throttleDuration = THROTTLE_SCROLL_DURATION;
58
+ }
59
+ return new Observable(function (observable) {
60
+ function notify() {
61
+ observable.notify(computeScrollValues());
62
+ }
63
+ if (window.ResizeObserver) {
64
+ var throttledNotify = throttle(notify, throttleDuration, {
65
+ leading: false,
66
+ trailing: true
67
+ });
68
+ var observerTarget = document.scrollingElement || document.documentElement;
69
+ var resizeObserver = new ResizeObserver(monitor(throttledNotify.throttled));
70
+ if (observerTarget) {
71
+ resizeObserver.observe(observerTarget);
72
+ }
73
+ var eventListener = addEventListener(window, DOM_EVENT.SCROLL, throttledNotify.throttled, {
74
+ passive: true
75
+ });
76
+ return function () {
77
+ throttledNotify.cancel();
78
+ resizeObserver.unobserve(observerTarget);
79
+ eventListener.stop();
80
+ };
81
+ }
82
+ });
83
+ }
84
+ //# sourceMappingURL=trackScrollMetrics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trackScrollMetrics.js","names":["ONE_SECOND","elapsed","relativeNow","throttle","addEventListener","DOM_EVENT","getScrollY","monitor","Observable","getViewportDimension","THROTTLE_SCROLL_DURATION","trackScrollMetrics","configuration","viewStart","callback","scrollValues","undefined","createScrollValuesObservable","maxScrollDepth","maxScrollHeight","maxScrollHeightTime","subscription","subscribe","data","scrollDepth","scrollTop","scrollHeight","shouldUpdate","now","relative","maxDepth","Math","min","maxDepthScrollTop","stop","unsubscribe","computeScrollValues","viewport","height","round","document","scrollingElement","documentElement","throttleDuration","observable","notify","window","ResizeObserver","throttledNotify","leading","trailing","observerTarget","resizeObserver","throttled","observe","eventListener","SCROLL","passive","cancel","unobserve"],"sources":["../../../../../rum/src/domain/rumEventsCollection/view/trackScrollMetrics.js"],"sourcesContent":["import {\n ONE_SECOND,\n elapsed,\n relativeNow,\n throttle,\n addEventListener,\n DOM_EVENT,\n getScrollY,\n monitor,\n Observable\n} from '@cloudcare/browser-core'\nimport { getViewportDimension } from '../../initViewportObservable'\n\n/** Arbitrary scroll throttle duration */\nexport var THROTTLE_SCROLL_DURATION = ONE_SECOND\n\nexport function trackScrollMetrics(\n configuration,\n viewStart,\n callback,\n scrollValues\n) {\n if (scrollValues === undefined) {\n scrollValues = createScrollValuesObservable(configuration)\n }\n var maxScrollDepth = 0\n var maxScrollHeight = 0\n var maxScrollHeightTime = 0\n var subscription = scrollValues.subscribe(function (data) {\n var scrollDepth = data.scrollDepth\n var scrollTop = data.scrollTop\n var scrollHeight = data.scrollHeight\n var shouldUpdate = false\n\n if (scrollDepth > maxScrollDepth) {\n maxScrollDepth = scrollDepth\n shouldUpdate = true\n }\n\n if (scrollHeight > maxScrollHeight) {\n maxScrollHeight = scrollHeight\n var now = relativeNow()\n maxScrollHeightTime = elapsed(viewStart.relative, now)\n shouldUpdate = true\n }\n\n if (shouldUpdate) {\n callback({\n maxDepth: Math.min(maxScrollDepth, maxScrollHeight),\n maxDepthScrollTop: scrollTop,\n maxScrollHeight: maxScrollHeight,\n maxScrollHeightTime: maxScrollHeightTime\n })\n }\n })\n\n return {\n stop: function () {\n return subscription.unsubscribe()\n }\n }\n}\n\nexport function computeScrollValues() {\n var scrollTop = getScrollY()\n\n var viewport = getViewportDimension()\n var height = viewport.height\n var scrollHeight = Math.round(\n (document.scrollingElement || document.documentElement).scrollHeight\n )\n var scrollDepth = Math.round(height + scrollTop)\n\n return {\n scrollHeight: scrollHeight,\n scrollDepth: scrollDepth,\n scrollTop: scrollTop\n }\n}\nexport function createScrollValuesObservable(configuration, throttleDuration) {\n if (throttleDuration === undefined) {\n throttleDuration = THROTTLE_SCROLL_DURATION\n }\n return new Observable(function (observable) {\n function notify() {\n observable.notify(computeScrollValues())\n }\n\n if (window.ResizeObserver) {\n var throttledNotify = throttle(notify, throttleDuration, {\n leading: false,\n trailing: true\n })\n\n var observerTarget = document.scrollingElement || document.documentElement\n var resizeObserver = new ResizeObserver(\n monitor(throttledNotify.throttled)\n )\n if (observerTarget) {\n resizeObserver.observe(observerTarget)\n }\n var eventListener = addEventListener(\n window,\n DOM_EVENT.SCROLL,\n throttledNotify.throttled,\n {\n passive: true\n }\n )\n\n return function () {\n throttledNotify.cancel()\n resizeObserver.unobserve(observerTarget)\n eventListener.stop()\n }\n }\n })\n}\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,15 @@
1
+ import { trackEventCounts } from '../../trackEventCounts';
2
+ export function trackViewEventCounts(lifeCycle, viewId, onChange) {
3
+ var _trackEventCounts = trackEventCounts({
4
+ lifeCycle: lifeCycle,
5
+ isChildEvent: function isChildEvent(event) {
6
+ return event.view.id === viewId;
7
+ },
8
+ onChange: onChange
9
+ });
10
+ return {
11
+ stop: _trackEventCounts.stop,
12
+ eventCounts: _trackEventCounts.eventCounts
13
+ };
14
+ }
15
+ //# sourceMappingURL=trackViewEventCounts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trackViewEventCounts.js","names":["trackEventCounts","trackViewEventCounts","lifeCycle","viewId","onChange","_trackEventCounts","isChildEvent","event","view","id","stop","eventCounts"],"sources":["../../../../../rum/src/domain/rumEventsCollection/view/trackViewEventCounts.js"],"sourcesContent":["import { trackEventCounts } from '../../trackEventCounts'\n\nexport function trackViewEventCounts(lifeCycle, viewId, onChange) {\n var _trackEventCounts = trackEventCounts({\n lifeCycle: lifeCycle,\n isChildEvent: function (event) {\n return event.view.id === viewId\n },\n onChange: onChange\n })\n return {\n stop: _trackEventCounts.stop,\n eventCounts: _trackEventCounts.eventCounts\n }\n}\n"],"mappings":"AAAA,SAASA,gBAAgB,QAAQ,wBAAwB;AAEzD,OAAO,SAASC,oBAAoBA,CAACC,SAAS,EAAEC,MAAM,EAAEC,QAAQ,EAAE;EAChE,IAAIC,iBAAiB,GAAGL,gBAAgB,CAAC;IACvCE,SAAS,EAAEA,SAAS;IACpBI,YAAY,EAAE,SAAdA,YAAYA,CAAYC,KAAK,EAAE;MAC7B,OAAOA,KAAK,CAACC,IAAI,CAACC,EAAE,KAAKN,MAAM;IACjC,CAAC;IACDC,QAAQ,EAAEA;EACZ,CAAC,CAAC;EACF,OAAO;IACLM,IAAI,EAAEL,iBAAiB,CAACK,IAAI;IAC5BC,WAAW,EAAEN,iBAAiB,CAACM;EACjC,CAAC;AACH","ignoreList":[]}