@kubesense/kubesense-browser-rum-core 1.8.0 → 2.0.0-beta.1

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 (922) hide show
  1. package/LICENSE +1 -1
  2. package/cjs/boot/preStartRum.d.ts +4 -3
  3. package/cjs/boot/preStartRum.js +229 -204
  4. package/cjs/boot/preStartRum.js.map +1 -1
  5. package/cjs/boot/rumPublicApi.d.ts +190 -51
  6. package/cjs/boot/rumPublicApi.js +267 -164
  7. package/cjs/boot/rumPublicApi.js.map +1 -1
  8. package/cjs/boot/startRum.d.ts +42 -31
  9. package/cjs/boot/startRum.js +157 -150
  10. package/cjs/boot/startRum.js.map +1 -1
  11. package/cjs/browser/cookieObservable.d.ts +1 -5
  12. package/cjs/browser/cookieObservable.js +30 -34
  13. package/cjs/browser/cookieObservable.js.map +1 -1
  14. package/cjs/browser/domMutationObservable.d.ts +3 -3
  15. package/cjs/browser/domMutationObservable.js +29 -53
  16. package/cjs/browser/domMutationObservable.js.map +1 -1
  17. package/cjs/browser/htmlDomUtils.d.ts +5 -0
  18. package/cjs/browser/htmlDomUtils.js +38 -28
  19. package/cjs/browser/htmlDomUtils.js.map +1 -1
  20. package/cjs/browser/locationChangeObservable.d.ts +1 -2
  21. package/cjs/browser/locationChangeObservable.js +44 -45
  22. package/cjs/browser/locationChangeObservable.js.map +1 -1
  23. package/cjs/browser/performanceObservable.d.ts +4 -4
  24. package/cjs/browser/performanceObservable.js +50 -114
  25. package/cjs/browser/performanceObservable.js.map +1 -1
  26. package/cjs/browser/performanceUtils.d.ts +13 -1
  27. package/cjs/browser/performanceUtils.js +63 -37
  28. package/cjs/browser/performanceUtils.js.map +1 -1
  29. package/cjs/browser/scroll.js +17 -28
  30. package/cjs/browser/scroll.js.map +1 -1
  31. package/cjs/browser/viewportObservable.d.ts +2 -3
  32. package/cjs/browser/viewportObservable.js +29 -31
  33. package/cjs/browser/viewportObservable.js.map +1 -1
  34. package/cjs/browser/windowOpenObservable.js +11 -7
  35. package/cjs/browser/windowOpenObservable.js.map +1 -1
  36. package/cjs/domain/action/actionCollection.d.ts +11 -12
  37. package/cjs/domain/action/actionCollection.js +82 -89
  38. package/cjs/domain/action/actionCollection.js.map +1 -1
  39. package/cjs/domain/action/actionNameConstants.js +10 -9
  40. package/cjs/domain/action/actionNameConstants.js.map +1 -1
  41. package/cjs/domain/action/clickChain.js +51 -54
  42. package/cjs/domain/action/clickChain.js.map +1 -1
  43. package/cjs/domain/action/computeFrustration.js +30 -62
  44. package/cjs/domain/action/computeFrustration.js.map +1 -1
  45. package/cjs/domain/action/frustrationIgnore.d.ts +9 -0
  46. package/cjs/domain/action/frustrationIgnore.js +32 -0
  47. package/cjs/domain/action/frustrationIgnore.js.map +1 -0
  48. package/cjs/domain/action/getActionNameFromElement.js +141 -217
  49. package/cjs/domain/action/getActionNameFromElement.js.map +1 -1
  50. package/cjs/domain/action/interactionSelectorCache.d.ts +1 -1
  51. package/cjs/domain/action/interactionSelectorCache.js +17 -18
  52. package/cjs/domain/action/interactionSelectorCache.js.map +1 -1
  53. package/cjs/domain/action/isActionChildEvent.d.ts +2 -0
  54. package/cjs/domain/action/isActionChildEvent.js +8 -0
  55. package/cjs/domain/action/isActionChildEvent.js.map +1 -0
  56. package/cjs/domain/action/listenActionEvents.d.ts +2 -3
  57. package/cjs/domain/action/listenActionEvents.js +51 -55
  58. package/cjs/domain/action/listenActionEvents.js.map +1 -1
  59. package/cjs/domain/action/trackClickActions.d.ts +15 -21
  60. package/cjs/domain/action/trackClickActions.js +188 -226
  61. package/cjs/domain/action/trackClickActions.js.map +1 -1
  62. package/cjs/domain/action/trackManualActions.d.ts +45 -0
  63. package/cjs/domain/action/trackManualActions.js +48 -0
  64. package/cjs/domain/action/trackManualActions.js.map +1 -0
  65. package/cjs/domain/assembly.d.ts +1 -2
  66. package/cjs/domain/assembly.js +80 -95
  67. package/cjs/domain/assembly.js.map +1 -1
  68. package/cjs/domain/configuration/configuration.d.ts +575 -81
  69. package/cjs/domain/configuration/configuration.js +464 -199
  70. package/cjs/domain/configuration/configuration.js.map +1 -1
  71. package/cjs/domain/configuration/index.d.ts +1 -0
  72. package/cjs/domain/configuration/index.js +27 -21
  73. package/cjs/domain/configuration/jsonPathParser.js +125 -139
  74. package/cjs/domain/configuration/jsonPathParser.js.map +1 -1
  75. package/cjs/domain/configuration/remoteConfiguration.d.ts +18 -5
  76. package/cjs/domain/configuration/remoteConfiguration.js +268 -226
  77. package/cjs/domain/configuration/remoteConfiguration.js.map +1 -1
  78. package/cjs/domain/configuration/remoteConfiguration.types.d.ts +49 -0
  79. package/cjs/domain/configuration/remoteConfigurationCache.d.ts +42 -0
  80. package/cjs/domain/configuration/remoteConfigurationCache.js +95 -0
  81. package/cjs/domain/configuration/remoteConfigurationCache.js.map +1 -0
  82. package/cjs/domain/configuration/remoteSdkConfiguration.d.ts +11 -2
  83. package/cjs/domain/configuration/remoteSdkConfiguration.js +185 -117
  84. package/cjs/domain/configuration/remoteSdkConfiguration.js.map +1 -1
  85. package/cjs/domain/configuration/sessionReplayRoutes.d.ts +1 -6
  86. package/cjs/domain/configuration/sessionReplayRoutes.js +20 -63
  87. package/cjs/domain/configuration/sessionReplayRoutes.js.map +1 -1
  88. package/cjs/domain/contexts/ciVisibilityContext.d.ts +2 -4
  89. package/cjs/domain/contexts/ciVisibilityContext.js +36 -32
  90. package/cjs/domain/contexts/ciVisibilityContext.js.map +1 -1
  91. package/cjs/domain/contexts/connectivityContext.d.ts +2 -2
  92. package/cjs/domain/contexts/connectivityContext.js +10 -9
  93. package/cjs/domain/contexts/connectivityContext.js.map +1 -1
  94. package/cjs/domain/contexts/defaultContext.d.ts +3 -3
  95. package/cjs/domain/contexts/defaultContext.js +28 -32
  96. package/cjs/domain/contexts/defaultContext.js.map +1 -1
  97. package/cjs/domain/contexts/displayContext.d.ts +2 -3
  98. package/cjs/domain/contexts/displayContext.js +22 -26
  99. package/cjs/domain/contexts/displayContext.js.map +1 -1
  100. package/cjs/domain/contexts/featureFlagContext.d.ts +2 -2
  101. package/cjs/domain/contexts/featureFlagContext.js +38 -50
  102. package/cjs/domain/contexts/featureFlagContext.js.map +1 -1
  103. package/cjs/domain/contexts/internalContext.d.ts +2 -3
  104. package/cjs/domain/contexts/internalContext.js +26 -22
  105. package/cjs/domain/contexts/internalContext.js.map +1 -1
  106. package/cjs/domain/contexts/pageStateHistory.d.ts +3 -4
  107. package/cjs/domain/contexts/pageStateHistory.js +76 -96
  108. package/cjs/domain/contexts/pageStateHistory.js.map +1 -1
  109. package/cjs/domain/contexts/sessionContext.d.ts +9 -3
  110. package/cjs/domain/contexts/sessionContext.js +31 -45
  111. package/cjs/domain/contexts/sessionContext.js.map +1 -1
  112. package/cjs/domain/contexts/sourceCodeMfeContext.d.ts +10 -0
  113. package/cjs/domain/contexts/sourceCodeMfeContext.js +35 -0
  114. package/cjs/domain/contexts/sourceCodeMfeContext.js.map +1 -0
  115. package/cjs/domain/contexts/syntheticsContext.d.ts +2 -2
  116. package/cjs/domain/contexts/syntheticsContext.js +19 -23
  117. package/cjs/domain/contexts/syntheticsContext.js.map +1 -1
  118. package/cjs/domain/contexts/trackingConsentContext.d.ts +2 -2
  119. package/cjs/domain/contexts/trackingConsentContext.js +10 -12
  120. package/cjs/domain/contexts/trackingConsentContext.js.map +1 -1
  121. package/cjs/domain/contexts/urlContexts.d.ts +4 -3
  122. package/cjs/domain/contexts/urlContexts.js +65 -61
  123. package/cjs/domain/contexts/urlContexts.js.map +1 -1
  124. package/cjs/domain/contexts/userAgentDataContext.d.ts +2 -2
  125. package/cjs/domain/contexts/userAgentDataContext.js +20 -29
  126. package/cjs/domain/contexts/userAgentDataContext.js.map +1 -1
  127. package/cjs/domain/contexts/viewHistory.d.ts +5 -2
  128. package/cjs/domain/contexts/viewHistory.js +41 -45
  129. package/cjs/domain/contexts/viewHistory.js.map +1 -1
  130. package/cjs/domain/discardNegativeDuration.d.ts +1 -1
  131. package/cjs/domain/discardNegativeDuration.js +6 -5
  132. package/cjs/domain/discardNegativeDuration.js.map +1 -1
  133. package/cjs/domain/error/errorCollection.d.ts +3 -3
  134. package/cjs/domain/error/errorCollection.js +67 -68
  135. package/cjs/domain/error/errorCollection.js.map +1 -1
  136. package/cjs/domain/error/trackReportError.d.ts +1 -2
  137. package/cjs/domain/error/trackReportError.js +10 -14
  138. package/cjs/domain/error/trackReportError.js.map +1 -1
  139. package/cjs/domain/event/eventCollection.d.ts +2 -1
  140. package/cjs/domain/event/eventCollection.js +21 -22
  141. package/cjs/domain/event/eventCollection.js.map +1 -1
  142. package/cjs/domain/eventTracker.d.ts +37 -0
  143. package/cjs/domain/eventTracker.js +94 -0
  144. package/cjs/domain/eventTracker.js.map +1 -0
  145. package/cjs/domain/extractRegexMatch.d.ts +5 -0
  146. package/cjs/domain/extractRegexMatch.js +16 -0
  147. package/cjs/domain/extractRegexMatch.js.map +1 -0
  148. package/cjs/domain/getComposedPathSelector.d.ts +22 -0
  149. package/cjs/domain/getComposedPathSelector.js +95 -0
  150. package/cjs/domain/getComposedPathSelector.js.map +1 -0
  151. package/cjs/domain/getSelectorFromElement.d.ts +18 -6
  152. package/cjs/domain/getSelectorFromElement.js +199 -191
  153. package/cjs/domain/getSelectorFromElement.js.map +1 -1
  154. package/cjs/domain/getSessionReplayUrl.d.ts +2 -2
  155. package/cjs/domain/getSessionReplayUrl.js +17 -30
  156. package/cjs/domain/getSessionReplayUrl.js.map +1 -1
  157. package/cjs/domain/hooks.d.ts +26 -17
  158. package/cjs/domain/hooks.js +12 -5
  159. package/cjs/domain/hooks.js.map +1 -1
  160. package/cjs/domain/lifeCycle.d.ts +26 -12
  161. package/cjs/domain/lifeCycle.js +28 -5
  162. package/cjs/domain/lifeCycle.js.map +1 -1
  163. package/cjs/domain/limitModification.d.ts +5 -1
  164. package/cjs/domain/limitModification.js +32 -36
  165. package/cjs/domain/limitModification.js.map +1 -1
  166. package/cjs/domain/longTask/longTaskCollection.d.ts +0 -13
  167. package/cjs/domain/longTask/longTaskCollection.js +75 -87
  168. package/cjs/domain/longTask/longTaskCollection.js.map +1 -1
  169. package/cjs/domain/plugins.d.ts +37 -14
  170. package/cjs/domain/plugins.js +22 -13
  171. package/cjs/domain/plugins.js.map +1 -1
  172. package/cjs/domain/privacy.d.ts +6 -1
  173. package/cjs/domain/privacy.js +143 -286
  174. package/cjs/domain/privacy.js.map +1 -1
  175. package/cjs/domain/privacyConstants.js +43 -34
  176. package/cjs/domain/privacyConstants.js.map +1 -1
  177. package/cjs/domain/requestCollection.d.ts +6 -5
  178. package/cjs/domain/requestCollection.js +82 -105
  179. package/cjs/domain/requestCollection.js.map +1 -1
  180. package/cjs/domain/resource/graphql.d.ts +1 -1
  181. package/cjs/domain/resource/graphql.js +85 -86
  182. package/cjs/domain/resource/graphql.js.map +1 -1
  183. package/cjs/domain/resource/requestRegistry.js +30 -38
  184. package/cjs/domain/resource/requestRegistry.js.map +1 -1
  185. package/cjs/domain/resource/resourceCollection.d.ts +5 -3
  186. package/cjs/domain/resource/resourceCollection.js +241 -175
  187. package/cjs/domain/resource/resourceCollection.js.map +1 -1
  188. package/cjs/domain/resource/resourceUtils.d.ts +13 -13
  189. package/cjs/domain/resource/resourceUtils.js +323 -221
  190. package/cjs/domain/resource/resourceUtils.js.map +1 -1
  191. package/cjs/domain/resource/trackManualResources.d.ts +55 -0
  192. package/cjs/domain/resource/trackManualResources.js +53 -0
  193. package/cjs/domain/resource/trackManualResources.js.map +1 -0
  194. package/cjs/domain/resource/webSocketCollection.d.ts +46 -0
  195. package/cjs/domain/resource/webSocketCollection.js +163 -0
  196. package/cjs/domain/resource/webSocketCollection.js.map +1 -0
  197. package/cjs/domain/session/session.types.d.ts +4 -0
  198. package/cjs/domain/sessionReplayState.d.ts +8 -0
  199. package/cjs/domain/sessionReplayState.js +19 -0
  200. package/cjs/domain/sessionReplayState.js.map +1 -0
  201. package/cjs/domain/startCustomerDataTelemetry.js +39 -43
  202. package/cjs/domain/startCustomerDataTelemetry.js.map +1 -1
  203. package/cjs/domain/tracing/getDocumentTraceId.d.ts +1 -1
  204. package/cjs/domain/tracing/getDocumentTraceId.js +42 -63
  205. package/cjs/domain/tracing/getDocumentTraceId.js.map +1 -1
  206. package/cjs/domain/tracing/identifier.js +13 -46
  207. package/cjs/domain/tracing/identifier.js.map +1 -1
  208. package/cjs/domain/tracing/tracer.d.ts +2 -5
  209. package/cjs/domain/tracing/tracer.js +110 -150
  210. package/cjs/domain/tracing/tracer.js.map +1 -1
  211. package/cjs/domain/trackEventCounts.js +43 -48
  212. package/cjs/domain/trackEventCounts.js.map +1 -1
  213. package/cjs/domain/view/bfCacheSupport.d.ts +1 -2
  214. package/cjs/domain/view/bfCacheSupport.js +10 -11
  215. package/cjs/domain/view/bfCacheSupport.js.map +1 -1
  216. package/cjs/domain/view/trackViewEventCounts.js +14 -13
  217. package/cjs/domain/view/trackViewEventCounts.js.map +1 -1
  218. package/cjs/domain/view/trackViews.d.ts +8 -2
  219. package/cjs/domain/view/trackViews.js +221 -270
  220. package/cjs/domain/view/trackViews.js.map +1 -1
  221. package/cjs/domain/view/viewCollection.d.ts +4 -3
  222. package/cjs/domain/view/viewCollection.js +124 -148
  223. package/cjs/domain/view/viewCollection.js.map +1 -1
  224. package/cjs/domain/view/viewDiff.d.ts +22 -0
  225. package/cjs/domain/view/viewDiff.js +62 -0
  226. package/cjs/domain/view/viewDiff.js.map +1 -0
  227. package/cjs/domain/view/viewMetrics/getClsAttributionImpactedArea.js +20 -22
  228. package/cjs/domain/view/viewMetrics/getClsAttributionImpactedArea.js.map +1 -1
  229. package/cjs/domain/view/viewMetrics/interactionCountPolyfill.d.ts +1 -0
  230. package/cjs/domain/view/viewMetrics/interactionCountPolyfill.js +35 -33
  231. package/cjs/domain/view/viewMetrics/interactionCountPolyfill.js.map +1 -1
  232. package/cjs/domain/view/viewMetrics/trackBfcacheMetrics.d.ts +1 -1
  233. package/cjs/domain/view/viewMetrics/trackBfcacheMetrics.js +14 -13
  234. package/cjs/domain/view/viewMetrics/trackBfcacheMetrics.js.map +1 -1
  235. package/cjs/domain/view/viewMetrics/trackCommonViewMetrics.d.ts +4 -2
  236. package/cjs/domain/view/viewMetrics/trackCommonViewMetrics.js +51 -34
  237. package/cjs/domain/view/viewMetrics/trackCommonViewMetrics.js.map +1 -1
  238. package/cjs/domain/view/viewMetrics/trackCumulativeLayoutShift.d.ts +1 -1
  239. package/cjs/domain/view/viewMetrics/trackCumulativeLayoutShift.js +106 -122
  240. package/cjs/domain/view/viewMetrics/trackCumulativeLayoutShift.js.map +1 -1
  241. package/cjs/domain/view/viewMetrics/trackFirstContentfulPaint.d.ts +2 -3
  242. package/cjs/domain/view/viewMetrics/trackFirstContentfulPaint.js +26 -34
  243. package/cjs/domain/view/viewMetrics/trackFirstContentfulPaint.js.map +1 -1
  244. package/cjs/domain/view/viewMetrics/trackFirstHidden.d.ts +2 -3
  245. package/cjs/domain/view/viewMetrics/trackFirstHidden.js +31 -31
  246. package/cjs/domain/view/viewMetrics/trackFirstHidden.js.map +1 -1
  247. package/cjs/domain/view/viewMetrics/trackInitialViewMetrics.d.ts +1 -3
  248. package/cjs/domain/view/viewMetrics/trackInitialViewMetrics.js +33 -38
  249. package/cjs/domain/view/viewMetrics/trackInitialViewMetrics.js.map +1 -1
  250. package/cjs/domain/view/viewMetrics/trackInteractionToNextPaint.d.ts +10 -1
  251. package/cjs/domain/view/viewMetrics/trackInteractionToNextPaint.js +202 -144
  252. package/cjs/domain/view/viewMetrics/trackInteractionToNextPaint.js.map +1 -1
  253. package/cjs/domain/view/viewMetrics/trackLargestContentfulPaint.d.ts +6 -1
  254. package/cjs/domain/view/viewMetrics/trackLargestContentfulPaint.js +65 -55
  255. package/cjs/domain/view/viewMetrics/trackLargestContentfulPaint.js.map +1 -1
  256. package/cjs/domain/view/viewMetrics/trackLoadingTime.d.ts +2 -1
  257. package/cjs/domain/view/viewMetrics/trackLoadingTime.js +42 -46
  258. package/cjs/domain/view/viewMetrics/trackLoadingTime.js.map +1 -1
  259. package/cjs/domain/view/viewMetrics/trackNavigationTimings.d.ts +2 -3
  260. package/cjs/domain/view/viewMetrics/trackNavigationTimings.js +28 -36
  261. package/cjs/domain/view/viewMetrics/trackNavigationTimings.js.map +1 -1
  262. package/cjs/domain/view/viewMetrics/trackScrollMetrics.d.ts +3 -4
  263. package/cjs/domain/view/viewMetrics/trackScrollMetrics.js +63 -72
  264. package/cjs/domain/view/viewMetrics/trackScrollMetrics.js.map +1 -1
  265. package/cjs/domain/vital/vitalCollection.d.ts +44 -20
  266. package/cjs/domain/vital/vitalCollection.js +81 -109
  267. package/cjs/domain/vital/vitalCollection.js.map +1 -1
  268. package/cjs/domain/waitPageActivityEnd.d.ts +1 -4
  269. package/cjs/domain/waitPageActivityEnd.js +99 -119
  270. package/cjs/domain/waitPageActivityEnd.js.map +1 -1
  271. package/cjs/domainContext.types.d.ts +21 -13
  272. package/cjs/index.d.ts +11 -10
  273. package/cjs/index.js +84 -62
  274. package/cjs/rawRumEvent.types.d.ts +79 -13
  275. package/cjs/rawRumEvent.types.js +40 -27
  276. package/cjs/rawRumEvent.types.js.map +1 -1
  277. package/cjs/rumEvent.types.d.ts +906 -669
  278. package/cjs/transport/formDataTransport.js +43 -41
  279. package/cjs/transport/formDataTransport.js.map +1 -1
  280. package/cjs/transport/startRumBatch.d.ts +27 -3
  281. package/cjs/transport/startRumBatch.js +132 -31
  282. package/cjs/transport/startRumBatch.js.map +1 -1
  283. package/cjs/transport/startRumEventBridge.js +10 -8
  284. package/cjs/transport/startRumEventBridge.js.map +1 -1
  285. package/esm/boot/preStartRum.mjs +233 -0
  286. package/esm/boot/preStartRum.mjs.map +1 -0
  287. package/esm/boot/rumPublicApi.mjs +271 -0
  288. package/esm/boot/rumPublicApi.mjs.map +1 -0
  289. package/esm/boot/startRum.mjs +159 -0
  290. package/esm/boot/startRum.mjs.map +1 -0
  291. package/esm/browser/cookieObservable.mjs +34 -0
  292. package/esm/browser/cookieObservable.mjs.map +1 -0
  293. package/esm/browser/domMutationObservable.mjs +33 -0
  294. package/esm/browser/domMutationObservable.mjs.map +1 -0
  295. package/esm/browser/htmlDomUtils.mjs +48 -0
  296. package/esm/browser/htmlDomUtils.mjs.map +1 -0
  297. package/esm/browser/locationChangeObservable.mjs +50 -0
  298. package/esm/browser/locationChangeObservable.mjs.map +1 -0
  299. package/esm/browser/performanceObservable.mjs +60 -0
  300. package/esm/browser/performanceObservable.mjs.map +1 -0
  301. package/esm/browser/performanceUtils.mjs +64 -0
  302. package/esm/browser/performanceUtils.mjs.map +1 -0
  303. package/esm/browser/scroll.mjs +21 -0
  304. package/esm/browser/scroll.mjs.map +1 -0
  305. package/esm/browser/viewportObservable.mjs +33 -0
  306. package/esm/browser/viewportObservable.mjs.map +1 -0
  307. package/esm/browser/windowOpenObservable.mjs +14 -0
  308. package/esm/browser/windowOpenObservable.mjs.map +1 -0
  309. package/esm/domain/action/actionCollection.mjs +89 -0
  310. package/esm/domain/action/actionCollection.mjs.map +1 -0
  311. package/esm/domain/action/actionNameConstants.mjs +11 -0
  312. package/esm/domain/action/actionNameConstants.mjs.map +1 -0
  313. package/esm/domain/action/clickChain.mjs +57 -0
  314. package/esm/domain/action/clickChain.mjs.map +1 -0
  315. package/esm/domain/action/computeFrustration.mjs +36 -0
  316. package/esm/domain/action/computeFrustration.mjs.map +1 -0
  317. package/esm/domain/action/frustrationIgnore.mjs +31 -0
  318. package/esm/domain/action/frustrationIgnore.mjs.map +1 -0
  319. package/esm/domain/action/getActionNameFromElement.mjs +163 -0
  320. package/esm/domain/action/getActionNameFromElement.mjs.map +1 -0
  321. package/esm/domain/action/interactionSelectorCache.mjs +19 -0
  322. package/esm/domain/action/interactionSelectorCache.mjs.map +1 -0
  323. package/esm/domain/action/isActionChildEvent.mjs +8 -0
  324. package/esm/domain/action/isActionChildEvent.mjs.map +1 -0
  325. package/esm/domain/action/listenActionEvents.mjs +57 -0
  326. package/esm/domain/action/listenActionEvents.mjs.map +1 -0
  327. package/esm/domain/action/trackClickActions.mjs +198 -0
  328. package/esm/domain/action/trackClickActions.mjs.map +1 -0
  329. package/esm/domain/action/trackManualActions.mjs +48 -0
  330. package/esm/domain/action/trackManualActions.mjs.map +1 -0
  331. package/esm/domain/assembly.mjs +87 -0
  332. package/esm/domain/assembly.mjs.map +1 -0
  333. package/esm/domain/configuration/configuration.mjs +474 -0
  334. package/esm/domain/configuration/configuration.mjs.map +1 -0
  335. package/esm/domain/configuration/index.mjs +6 -0
  336. package/esm/domain/configuration/jsonPathParser.mjs +145 -0
  337. package/esm/domain/configuration/jsonPathParser.mjs.map +1 -0
  338. package/esm/domain/configuration/remoteConfiguration.mjs +279 -0
  339. package/esm/domain/configuration/remoteConfiguration.mjs.map +1 -0
  340. package/esm/domain/configuration/remoteConfigurationCache.mjs +92 -0
  341. package/esm/domain/configuration/remoteConfigurationCache.mjs.map +1 -0
  342. package/esm/domain/configuration/remoteSdkConfiguration.mjs +208 -0
  343. package/esm/domain/configuration/remoteSdkConfiguration.mjs.map +1 -0
  344. package/esm/domain/configuration/sessionReplayRoutes.mjs +26 -0
  345. package/esm/domain/configuration/sessionReplayRoutes.mjs.map +1 -0
  346. package/esm/domain/contexts/ciVisibilityContext.mjs +37 -0
  347. package/esm/domain/contexts/ciVisibilityContext.mjs.map +1 -0
  348. package/esm/domain/contexts/connectivityContext.mjs +12 -0
  349. package/esm/domain/contexts/connectivityContext.mjs.map +1 -0
  350. package/esm/domain/contexts/defaultContext.mjs +30 -0
  351. package/esm/domain/contexts/defaultContext.mjs.map +1 -0
  352. package/esm/domain/contexts/displayContext.mjs +24 -0
  353. package/esm/domain/contexts/displayContext.mjs.map +1 -0
  354. package/esm/domain/contexts/featureFlagContext.mjs +40 -0
  355. package/esm/domain/contexts/featureFlagContext.mjs.map +1 -0
  356. package/esm/domain/contexts/internalContext.mjs +30 -0
  357. package/esm/domain/contexts/internalContext.mjs.map +1 -0
  358. package/esm/domain/contexts/pageStateHistory.mjs +82 -0
  359. package/esm/domain/contexts/pageStateHistory.mjs.map +1 -0
  360. package/esm/domain/contexts/sessionContext.mjs +33 -0
  361. package/esm/domain/contexts/sessionContext.mjs.map +1 -0
  362. package/esm/domain/contexts/sourceCodeMfeContext.mjs +35 -0
  363. package/esm/domain/contexts/sourceCodeMfeContext.mjs.map +1 -0
  364. package/esm/domain/contexts/syntheticsContext.mjs +21 -0
  365. package/esm/domain/contexts/syntheticsContext.mjs.map +1 -0
  366. package/esm/domain/contexts/trackingConsentContext.mjs +12 -0
  367. package/esm/domain/contexts/trackingConsentContext.mjs.map +1 -0
  368. package/esm/domain/contexts/urlContexts.mjs +67 -0
  369. package/esm/domain/contexts/urlContexts.mjs.map +1 -0
  370. package/esm/domain/contexts/userAgentDataContext.mjs +22 -0
  371. package/esm/domain/contexts/userAgentDataContext.mjs.map +1 -0
  372. package/esm/domain/contexts/viewHistory.mjs +43 -0
  373. package/esm/domain/contexts/viewHistory.mjs.map +1 -0
  374. package/esm/domain/discardNegativeDuration.mjs +9 -0
  375. package/esm/domain/discardNegativeDuration.mjs.map +1 -0
  376. package/esm/domain/error/errorCollection.mjs +72 -0
  377. package/esm/domain/error/errorCollection.mjs.map +1 -0
  378. package/esm/domain/error/trackReportError.mjs +12 -0
  379. package/esm/domain/error/trackReportError.mjs.map +1 -0
  380. package/esm/domain/event/eventCollection.mjs +26 -0
  381. package/esm/domain/event/eventCollection.mjs.map +1 -0
  382. package/esm/domain/eventTracker.mjs +93 -0
  383. package/esm/domain/eventTracker.mjs.map +1 -0
  384. package/esm/domain/extractRegexMatch.mjs +16 -0
  385. package/esm/domain/extractRegexMatch.mjs.map +1 -0
  386. package/esm/domain/getComposedPathSelector.mjs +93 -0
  387. package/esm/domain/getComposedPathSelector.mjs.map +1 -0
  388. package/esm/domain/getSelectorFromElement.mjs +218 -0
  389. package/esm/domain/getSelectorFromElement.mjs.map +1 -0
  390. package/esm/domain/getSessionReplayUrl.mjs +20 -0
  391. package/esm/domain/getSessionReplayUrl.mjs.map +1 -0
  392. package/esm/domain/hooks.mjs +13 -0
  393. package/esm/domain/hooks.mjs.map +1 -0
  394. package/esm/domain/lifeCycle.mjs +28 -0
  395. package/esm/domain/lifeCycle.mjs.map +1 -0
  396. package/esm/domain/limitModification.mjs +42 -0
  397. package/esm/domain/limitModification.mjs.map +1 -0
  398. package/esm/domain/longTask/longTaskCollection.mjs +79 -0
  399. package/esm/domain/longTask/longTaskCollection.mjs.map +1 -0
  400. package/esm/domain/plugins.mjs +23 -0
  401. package/esm/domain/plugins.mjs.map +1 -0
  402. package/esm/domain/privacy.mjs +161 -0
  403. package/esm/domain/privacy.mjs.map +1 -0
  404. package/esm/domain/privacyConstants.mjs +36 -0
  405. package/esm/domain/privacyConstants.mjs.map +1 -0
  406. package/esm/domain/requestCollection.mjs +86 -0
  407. package/esm/domain/requestCollection.mjs.map +1 -0
  408. package/esm/domain/resource/graphql.mjs +93 -0
  409. package/esm/domain/resource/graphql.mjs.map +1 -0
  410. package/esm/domain/resource/requestRegistry.mjs +32 -0
  411. package/esm/domain/resource/requestRegistry.mjs.map +1 -0
  412. package/esm/domain/resource/resourceCollection.mjs +256 -0
  413. package/esm/domain/resource/resourceCollection.mjs.map +1 -0
  414. package/esm/domain/resource/resourceUtils.mjs +349 -0
  415. package/esm/domain/resource/resourceUtils.mjs.map +1 -0
  416. package/esm/domain/resource/trackManualResources.mjs +53 -0
  417. package/esm/domain/resource/trackManualResources.mjs.map +1 -0
  418. package/esm/domain/resource/webSocketCollection.mjs +160 -0
  419. package/esm/domain/resource/webSocketCollection.mjs.map +1 -0
  420. package/esm/domain/sessionReplayState.mjs +18 -0
  421. package/esm/domain/sessionReplayState.mjs.map +1 -0
  422. package/esm/domain/startCustomerDataTelemetry.mjs +51 -0
  423. package/esm/domain/startCustomerDataTelemetry.mjs.map +1 -0
  424. package/esm/domain/tracing/getDocumentTraceId.mjs +50 -0
  425. package/esm/domain/tracing/getDocumentTraceId.mjs.map +1 -0
  426. package/esm/domain/tracing/identifier.mjs +20 -0
  427. package/esm/domain/tracing/identifier.mjs.map +1 -0
  428. package/esm/domain/tracing/tracer.mjs +120 -0
  429. package/esm/domain/tracing/tracer.mjs.map +1 -0
  430. package/esm/domain/trackEventCounts.mjs +45 -0
  431. package/esm/domain/trackEventCounts.mjs.map +1 -0
  432. package/esm/domain/view/bfCacheSupport.mjs +12 -0
  433. package/esm/domain/view/bfCacheSupport.mjs.map +1 -0
  434. package/esm/domain/view/trackViewEventCounts.mjs +17 -0
  435. package/esm/domain/view/trackViewEventCounts.mjs.map +1 -0
  436. package/esm/domain/view/trackViews.mjs +230 -0
  437. package/esm/domain/view/trackViews.mjs.map +1 -0
  438. package/esm/domain/view/viewCollection.mjs +129 -0
  439. package/esm/domain/view/viewCollection.mjs.map +1 -0
  440. package/esm/domain/view/viewDiff.mjs +61 -0
  441. package/esm/domain/view/viewDiff.mjs.map +1 -0
  442. package/esm/domain/view/viewMetrics/getClsAttributionImpactedArea.mjs +30 -0
  443. package/esm/domain/view/viewMetrics/getClsAttributionImpactedArea.mjs.map +1 -0
  444. package/esm/domain/view/viewMetrics/interactionCountPolyfill.mjs +45 -0
  445. package/esm/domain/view/viewMetrics/interactionCountPolyfill.mjs.map +1 -0
  446. package/esm/domain/view/viewMetrics/trackBfcacheMetrics.mjs +18 -0
  447. package/esm/domain/view/viewMetrics/trackBfcacheMetrics.mjs.map +1 -0
  448. package/esm/domain/view/viewMetrics/trackCommonViewMetrics.mjs +54 -0
  449. package/esm/domain/view/viewMetrics/trackCommonViewMetrics.mjs.map +1 -0
  450. package/esm/domain/view/viewMetrics/trackCumulativeLayoutShift.mjs +117 -0
  451. package/esm/domain/view/viewMetrics/trackCumulativeLayoutShift.mjs.map +1 -0
  452. package/esm/domain/view/viewMetrics/trackFirstContentfulPaint.mjs +29 -0
  453. package/esm/domain/view/viewMetrics/trackFirstContentfulPaint.mjs.map +1 -0
  454. package/esm/domain/view/viewMetrics/trackFirstHidden.mjs +33 -0
  455. package/esm/domain/view/viewMetrics/trackFirstHidden.mjs.map +1 -0
  456. package/esm/domain/view/viewMetrics/trackInitialViewMetrics.mjs +36 -0
  457. package/esm/domain/view/viewMetrics/trackInitialViewMetrics.mjs.map +1 -0
  458. package/esm/domain/view/viewMetrics/trackInteractionToNextPaint.mjs +210 -0
  459. package/esm/domain/view/viewMetrics/trackInteractionToNextPaint.mjs.map +1 -0
  460. package/esm/domain/view/viewMetrics/trackLargestContentfulPaint.mjs +70 -0
  461. package/esm/domain/view/viewMetrics/trackLargestContentfulPaint.mjs.map +1 -0
  462. package/esm/domain/view/viewMetrics/trackLoadingTime.mjs +46 -0
  463. package/esm/domain/view/viewMetrics/trackLoadingTime.mjs.map +1 -0
  464. package/esm/domain/view/viewMetrics/trackNavigationTimings.mjs +35 -0
  465. package/esm/domain/view/viewMetrics/trackNavigationTimings.mjs.map +1 -0
  466. package/esm/domain/view/viewMetrics/trackScrollMetrics.mjs +66 -0
  467. package/esm/domain/view/viewMetrics/trackScrollMetrics.mjs.map +1 -0
  468. package/esm/domain/vital/vitalCollection.mjs +85 -0
  469. package/esm/domain/vital/vitalCollection.mjs.map +1 -0
  470. package/esm/domain/waitPageActivityEnd.mjs +107 -0
  471. package/esm/domain/waitPageActivityEnd.mjs.map +1 -0
  472. package/esm/index.mjs +23 -0
  473. package/esm/rawRumEvent.types.mjs +42 -0
  474. package/esm/rawRumEvent.types.mjs.map +1 -0
  475. package/esm/transport/formDataTransport.mjs +48 -0
  476. package/esm/transport/formDataTransport.mjs.map +1 -0
  477. package/esm/transport/startRumBatch.mjs +132 -0
  478. package/esm/transport/startRumBatch.mjs.map +1 -0
  479. package/esm/transport/startRumEventBridge.mjs +13 -0
  480. package/esm/transport/startRumEventBridge.mjs.map +1 -0
  481. package/package.json +19 -11
  482. package/src/boot/preStartRum.ts +216 -88
  483. package/src/boot/rumPublicApi.ts +358 -119
  484. package/src/boot/startRum.ts +88 -84
  485. package/src/browser/cookieObservable.ts +19 -28
  486. package/src/browser/domMutationObservable.ts +7 -12
  487. package/src/browser/htmlDomUtils.ts +15 -0
  488. package/src/browser/locationChangeObservable.ts +23 -12
  489. package/src/browser/performanceObservable.ts +23 -73
  490. package/src/browser/performanceUtils.ts +52 -4
  491. package/src/browser/viewportObservable.ts +4 -6
  492. package/src/domain/action/actionCollection.ts +94 -87
  493. package/src/domain/action/clickChain.ts +11 -10
  494. package/src/domain/action/computeFrustration.ts +19 -5
  495. package/src/domain/action/frustrationIgnore.ts +54 -0
  496. package/src/domain/action/getActionNameFromElement.ts +27 -61
  497. package/src/domain/action/interactionSelectorCache.ts +2 -2
  498. package/src/domain/action/isActionChildEvent.ts +6 -0
  499. package/src/domain/action/listenActionEvents.ts +2 -11
  500. package/src/domain/action/trackClickActions.ts +92 -82
  501. package/src/domain/action/trackManualActions.ts +104 -0
  502. package/src/domain/assembly.ts +57 -70
  503. package/src/domain/configuration/configuration.ts +587 -208
  504. package/src/domain/configuration/index.ts +1 -0
  505. package/src/domain/configuration/remoteConfiguration.ts +152 -29
  506. package/src/domain/configuration/remoteConfiguration.types.ts +51 -1
  507. package/src/domain/configuration/remoteConfigurationCache.ts +153 -0
  508. package/src/domain/configuration/remoteSdkConfiguration.ts +131 -13
  509. package/src/domain/configuration/sessionReplayRoutes.ts +2 -47
  510. package/src/domain/contexts/ciVisibilityContext.ts +23 -12
  511. package/src/domain/contexts/connectivityContext.ts +7 -10
  512. package/src/domain/contexts/defaultContext.ts +11 -14
  513. package/src/domain/contexts/displayContext.ts +8 -12
  514. package/src/domain/contexts/featureFlagContext.ts +5 -4
  515. package/src/domain/contexts/internalContext.ts +3 -3
  516. package/src/domain/contexts/pageStateHistory.ts +20 -31
  517. package/src/domain/contexts/sessionContext.ts +16 -22
  518. package/src/domain/contexts/sourceCodeMfeContext.ts +53 -0
  519. package/src/domain/contexts/syntheticsContext.ts +7 -17
  520. package/src/domain/contexts/trackingConsentContext.ts +7 -4
  521. package/src/domain/contexts/urlContexts.ts +13 -9
  522. package/src/domain/contexts/userAgentDataContext.ts +12 -13
  523. package/src/domain/contexts/viewHistory.ts +4 -3
  524. package/src/domain/discardNegativeDuration.ts +1 -1
  525. package/src/domain/error/errorCollection.ts +12 -22
  526. package/src/domain/error/trackReportError.ts +4 -7
  527. package/src/domain/event/eventCollection.ts +4 -2
  528. package/src/domain/eventTracker.ts +169 -0
  529. package/src/domain/extractRegexMatch.ts +15 -0
  530. package/src/domain/getComposedPathSelector.ts +130 -0
  531. package/src/domain/getSelectorFromElement.ts +125 -31
  532. package/src/domain/getSessionReplayUrl.ts +4 -13
  533. package/src/domain/hooks.ts +34 -21
  534. package/src/domain/lifeCycle.ts +21 -8
  535. package/src/domain/limitModification.ts +20 -4
  536. package/src/domain/longTask/longTaskCollection.ts +18 -47
  537. package/src/domain/plugins.ts +54 -25
  538. package/src/domain/privacy.ts +16 -24
  539. package/src/domain/requestCollection.ts +108 -97
  540. package/src/domain/resource/graphql.ts +71 -25
  541. package/src/domain/resource/requestRegistry.ts +1 -3
  542. package/src/domain/resource/resourceCollection.ts +319 -137
  543. package/src/domain/resource/resourceUtils.ts +24 -26
  544. package/src/domain/resource/trackManualResources.ts +121 -0
  545. package/src/domain/resource/webSocketCollection.ts +281 -0
  546. package/src/domain/session/session.types.ts +5 -0
  547. package/src/domain/sessionReplayState.ts +36 -0
  548. package/src/domain/startCustomerDataTelemetry.ts +2 -2
  549. package/src/domain/tracing/getDocumentTraceId.ts +5 -4
  550. package/src/domain/tracing/identifier.ts +6 -37
  551. package/src/domain/tracing/tracer.ts +22 -21
  552. package/src/domain/tracing/tracer.types.ts +3 -3
  553. package/src/domain/view/bfCacheSupport.ts +1 -6
  554. package/src/domain/view/trackViews.ts +40 -37
  555. package/src/domain/view/viewCollection.ts +29 -23
  556. package/src/domain/view/viewDiff.ts +115 -0
  557. package/src/domain/view/viewMetrics/interactionCountPolyfill.ts +13 -2
  558. package/src/domain/view/viewMetrics/trackBfcacheMetrics.ts +1 -1
  559. package/src/domain/view/viewMetrics/trackCommonViewMetrics.ts +27 -6
  560. package/src/domain/view/viewMetrics/trackCumulativeLayoutShift.ts +5 -3
  561. package/src/domain/view/viewMetrics/trackFirstContentfulPaint.ts +4 -9
  562. package/src/domain/view/viewMetrics/trackFirstHidden.ts +2 -8
  563. package/src/domain/view/viewMetrics/trackInitialViewMetrics.ts +4 -13
  564. package/src/domain/view/viewMetrics/trackInteractionToNextPaint.ts +180 -35
  565. package/src/domain/view/viewMetrics/trackLargestContentfulPaint.ts +47 -6
  566. package/src/domain/view/viewMetrics/trackLoadingTime.ts +4 -3
  567. package/src/domain/view/viewMetrics/trackNavigationTimings.ts +10 -18
  568. package/src/domain/view/viewMetrics/trackScrollMetrics.ts +23 -37
  569. package/src/domain/vital/vitalCollection.ts +83 -102
  570. package/src/domain/waitPageActivityEnd.ts +7 -11
  571. package/src/domainContext.types.ts +23 -15
  572. package/src/index.ts +17 -11
  573. package/src/rawRumEvent.types.ts +80 -26
  574. package/src/rumEvent.types.ts +730 -505
  575. package/src/transport/formDataTransport.ts +16 -6
  576. package/src/transport/startRumBatch.ts +181 -24
  577. package/cjs/browser/firstInputPolyfill.d.ts +0 -8
  578. package/cjs/browser/firstInputPolyfill.js +0 -68
  579. package/cjs/browser/firstInputPolyfill.js.map +0 -1
  580. package/cjs/domain/configuration/index.js.map +0 -1
  581. package/cjs/domain/configuration/remoteConfiguration.types.js +0 -7
  582. package/cjs/domain/configuration/remoteConfiguration.types.js.map +0 -1
  583. package/cjs/domain/error/trackConsoleError.d.ts +0 -4
  584. package/cjs/domain/error/trackConsoleError.js +0 -13
  585. package/cjs/domain/error/trackConsoleError.js.map +0 -1
  586. package/cjs/domain/resource/matchRequestResourceEntry.d.ts +0 -16
  587. package/cjs/domain/resource/matchRequestResourceEntry.js +0 -49
  588. package/cjs/domain/resource/matchRequestResourceEntry.js.map +0 -1
  589. package/cjs/domain/resource/retrieveInitialDocumentResourceTiming.d.ts +0 -4
  590. package/cjs/domain/resource/retrieveInitialDocumentResourceTiming.js +0 -24
  591. package/cjs/domain/resource/retrieveInitialDocumentResourceTiming.js.map +0 -1
  592. package/cjs/domain/rumSessionManager.d.ts +0 -36
  593. package/cjs/domain/rumSessionManager.js +0 -77
  594. package/cjs/domain/rumSessionManager.js.map +0 -1
  595. package/cjs/domain/sampler/sampler.d.ts +0 -10
  596. package/cjs/domain/sampler/sampler.js +0 -63
  597. package/cjs/domain/sampler/sampler.js.map +0 -1
  598. package/cjs/domain/tracing/sampler.d.ts +0 -10
  599. package/cjs/domain/tracing/sampler.js +0 -69
  600. package/cjs/domain/tracing/sampler.js.map +0 -1
  601. package/cjs/domain/tracing/tracer.types.js +0 -3
  602. package/cjs/domain/tracing/tracer.types.js.map +0 -1
  603. package/cjs/domain/view/viewMetrics/startInitialViewMetricsTelemetry.d.ts +0 -6
  604. package/cjs/domain/view/viewMetrics/startInitialViewMetricsTelemetry.js +0 -44
  605. package/cjs/domain/view/viewMetrics/startInitialViewMetricsTelemetry.js.map +0 -1
  606. package/cjs/domain/view/viewMetrics/trackFirstInput.d.ts +0 -19
  607. package/cjs/domain/view/viewMetrics/trackFirstInput.js +0 -43
  608. package/cjs/domain/view/viewMetrics/trackFirstInput.js.map +0 -1
  609. package/cjs/domainContext.types.js +0 -6
  610. package/cjs/domainContext.types.js.map +0 -1
  611. package/cjs/index.js.map +0 -1
  612. package/cjs/rumEvent.types.js +0 -7
  613. package/cjs/rumEvent.types.js.map +0 -1
  614. package/esm/boot/preStartRum.d.ts +0 -7
  615. package/esm/boot/preStartRum.js +0 -205
  616. package/esm/boot/preStartRum.js.map +0 -1
  617. package/esm/boot/rumPublicApi.d.ts +0 -409
  618. package/esm/boot/rumPublicApi.js +0 -165
  619. package/esm/boot/rumPublicApi.js.map +0 -1
  620. package/esm/boot/startRum.d.ts +0 -109
  621. package/esm/boot/startRum.js +0 -149
  622. package/esm/boot/startRum.js.map +0 -1
  623. package/esm/browser/cookieObservable.d.ts +0 -8
  624. package/esm/browser/cookieObservable.js +0 -35
  625. package/esm/browser/cookieObservable.js.map +0 -1
  626. package/esm/browser/domMutationObservable.d.ts +0 -27
  627. package/esm/browser/domMutationObservable.js +0 -54
  628. package/esm/browser/domMutationObservable.js.map +0 -1
  629. package/esm/browser/firstInputPolyfill.d.ts +0 -8
  630. package/esm/browser/firstInputPolyfill.js +0 -65
  631. package/esm/browser/firstInputPolyfill.js.map +0 -1
  632. package/esm/browser/htmlDomUtils.d.ts +0 -13
  633. package/esm/browser/htmlDomUtils.js +0 -36
  634. package/esm/browser/htmlDomUtils.js.map +0 -1
  635. package/esm/browser/locationChangeObservable.d.ts +0 -7
  636. package/esm/browser/locationChangeObservable.js +0 -48
  637. package/esm/browser/locationChangeObservable.js.map +0 -1
  638. package/esm/browser/performanceObservable.d.ts +0 -174
  639. package/esm/browser/performanceObservable.js +0 -121
  640. package/esm/browser/performanceObservable.js.map +0 -1
  641. package/esm/browser/performanceUtils.d.ts +0 -7
  642. package/esm/browser/performanceUtils.js +0 -38
  643. package/esm/browser/performanceUtils.js.map +0 -1
  644. package/esm/browser/scroll.d.ts +0 -2
  645. package/esm/browser/scroll.js +0 -29
  646. package/esm/browser/scroll.js.map +0 -1
  647. package/esm/browser/viewportObservable.d.ts +0 -10
  648. package/esm/browser/viewportObservable.js +0 -32
  649. package/esm/browser/viewportObservable.js.map +0 -1
  650. package/esm/browser/windowOpenObservable.d.ts +0 -5
  651. package/esm/browser/windowOpenObservable.js +0 -7
  652. package/esm/browser/windowOpenObservable.js.map +0 -1
  653. package/esm/domain/action/actionCollection.d.ts +0 -21
  654. package/esm/domain/action/actionCollection.js +0 -93
  655. package/esm/domain/action/actionCollection.js.map +0 -1
  656. package/esm/domain/action/actionNameConstants.d.ts +0 -18
  657. package/esm/domain/action/actionNameConstants.js +0 -8
  658. package/esm/domain/action/actionNameConstants.js.map +0 -1
  659. package/esm/domain/action/clickChain.d.ts +0 -8
  660. package/esm/domain/action/clickChain.js +0 -57
  661. package/esm/domain/action/clickChain.js.map +0 -1
  662. package/esm/domain/action/computeFrustration.d.ts +0 -6
  663. package/esm/domain/action/computeFrustration.js +0 -65
  664. package/esm/domain/action/computeFrustration.js.map +0 -1
  665. package/esm/domain/action/getActionNameFromElement.d.ts +0 -4
  666. package/esm/domain/action/getActionNameFromElement.js +0 -236
  667. package/esm/domain/action/getActionNameFromElement.js.map +0 -1
  668. package/esm/domain/action/interactionSelectorCache.d.ts +0 -5
  669. package/esm/domain/action/interactionSelectorCache.js +0 -18
  670. package/esm/domain/action/interactionSelectorCache.js.map +0 -1
  671. package/esm/domain/action/listenActionEvents.d.ts +0 -19
  672. package/esm/domain/action/listenActionEvents.js +0 -58
  673. package/esm/domain/action/listenActionEvents.js.map +0 -1
  674. package/esm/domain/action/trackClickActions.d.ts +0 -81
  675. package/esm/domain/action/trackClickActions.js +0 -232
  676. package/esm/domain/action/trackClickActions.js.map +0 -1
  677. package/esm/domain/assembly.d.ts +0 -5
  678. package/esm/domain/assembly.js +0 -99
  679. package/esm/domain/assembly.js.map +0 -1
  680. package/esm/domain/configuration/configuration.d.ts +0 -358
  681. package/esm/domain/configuration/configuration.js +0 -209
  682. package/esm/domain/configuration/configuration.js.map +0 -1
  683. package/esm/domain/configuration/index.d.ts +0 -4
  684. package/esm/domain/configuration/index.js +0 -5
  685. package/esm/domain/configuration/index.js.map +0 -1
  686. package/esm/domain/configuration/jsonPathParser.d.ts +0 -28
  687. package/esm/domain/configuration/jsonPathParser.js +0 -156
  688. package/esm/domain/configuration/jsonPathParser.js.map +0 -1
  689. package/esm/domain/configuration/remoteConfiguration.d.ts +0 -39
  690. package/esm/domain/configuration/remoteConfiguration.js +0 -236
  691. package/esm/domain/configuration/remoteConfiguration.js.map +0 -1
  692. package/esm/domain/configuration/remoteConfiguration.types.d.ts +0 -138
  693. package/esm/domain/configuration/remoteConfiguration.types.js +0 -6
  694. package/esm/domain/configuration/remoteConfiguration.types.js.map +0 -1
  695. package/esm/domain/configuration/remoteSdkConfiguration.d.ts +0 -18
  696. package/esm/domain/configuration/remoteSdkConfiguration.js +0 -137
  697. package/esm/domain/configuration/remoteSdkConfiguration.js.map +0 -1
  698. package/esm/domain/configuration/sessionReplayRoutes.d.ts +0 -35
  699. package/esm/domain/configuration/sessionReplayRoutes.js +0 -65
  700. package/esm/domain/configuration/sessionReplayRoutes.js.map +0 -1
  701. package/esm/domain/contexts/ciVisibilityContext.d.ts +0 -12
  702. package/esm/domain/contexts/ciVisibilityContext.js +0 -30
  703. package/esm/domain/contexts/ciVisibilityContext.js.map +0 -1
  704. package/esm/domain/contexts/connectivityContext.d.ts +0 -2
  705. package/esm/domain/contexts/connectivityContext.js +0 -8
  706. package/esm/domain/contexts/connectivityContext.js.map +0 -1
  707. package/esm/domain/contexts/defaultContext.d.ts +0 -4
  708. package/esm/domain/contexts/defaultContext.js +0 -31
  709. package/esm/domain/contexts/defaultContext.js.map +0 -1
  710. package/esm/domain/contexts/displayContext.d.ts +0 -6
  711. package/esm/domain/contexts/displayContext.js +0 -25
  712. package/esm/domain/contexts/displayContext.js.map +0 -1
  713. package/esm/domain/contexts/featureFlagContext.d.ts +0 -19
  714. package/esm/domain/contexts/featureFlagContext.js +0 -49
  715. package/esm/domain/contexts/featureFlagContext.js.map +0 -1
  716. package/esm/domain/contexts/internalContext.d.ts +0 -12
  717. package/esm/domain/contexts/internalContext.js +0 -23
  718. package/esm/domain/contexts/internalContext.js.map +0 -1
  719. package/esm/domain/contexts/pageStateHistory.d.ts +0 -23
  720. package/esm/domain/contexts/pageStateHistory.js +0 -100
  721. package/esm/domain/contexts/pageStateHistory.js.map +0 -1
  722. package/esm/domain/contexts/sessionContext.d.ts +0 -5
  723. package/esm/domain/contexts/sessionContext.js +0 -44
  724. package/esm/domain/contexts/sessionContext.js.map +0 -1
  725. package/esm/domain/contexts/syntheticsContext.d.ts +0 -2
  726. package/esm/domain/contexts/syntheticsContext.js +0 -22
  727. package/esm/domain/contexts/syntheticsContext.js.map +0 -1
  728. package/esm/domain/contexts/trackingConsentContext.d.ts +0 -3
  729. package/esm/domain/contexts/trackingConsentContext.js +0 -11
  730. package/esm/domain/contexts/trackingConsentContext.js.map +0 -1
  731. package/esm/domain/contexts/urlContexts.d.ts +0 -22
  732. package/esm/domain/contexts/urlContexts.js +0 -60
  733. package/esm/domain/contexts/urlContexts.js.map +0 -1
  734. package/esm/domain/contexts/userAgentDataContext.d.ts +0 -2
  735. package/esm/domain/contexts/userAgentDataContext.js +0 -28
  736. package/esm/domain/contexts/userAgentDataContext.js.map +0 -1
  737. package/esm/domain/contexts/viewHistory.d.ts +0 -17
  738. package/esm/domain/contexts/viewHistory.js +0 -44
  739. package/esm/domain/contexts/viewHistory.js.map +0 -1
  740. package/esm/domain/discardNegativeDuration.d.ts +0 -2
  741. package/esm/domain/discardNegativeDuration.js +0 -5
  742. package/esm/domain/discardNegativeDuration.js.map +0 -1
  743. package/esm/domain/error/errorCollection.d.ts +0 -17
  744. package/esm/domain/error/errorCollection.js +0 -70
  745. package/esm/domain/error/errorCollection.js.map +0 -1
  746. package/esm/domain/error/trackConsoleError.d.ts +0 -4
  747. package/esm/domain/error/trackConsoleError.js +0 -10
  748. package/esm/domain/error/trackConsoleError.js.map +0 -1
  749. package/esm/domain/error/trackReportError.d.ts +0 -5
  750. package/esm/domain/error/trackReportError.js +0 -13
  751. package/esm/domain/error/trackReportError.js.map +0 -1
  752. package/esm/domain/event/eventCollection.d.ts +0 -10
  753. package/esm/domain/event/eventCollection.js +0 -24
  754. package/esm/domain/event/eventCollection.js.map +0 -1
  755. package/esm/domain/getSelectorFromElement.d.ts +0 -64
  756. package/esm/domain/getSelectorFromElement.js +0 -213
  757. package/esm/domain/getSelectorFromElement.js.map +0 -1
  758. package/esm/domain/getSessionReplayUrl.d.ts +0 -9
  759. package/esm/domain/getSessionReplayUrl.js +0 -30
  760. package/esm/domain/getSessionReplayUrl.js.map +0 -1
  761. package/esm/domain/hooks.d.ts +0 -23
  762. package/esm/domain/hooks.js +0 -3
  763. package/esm/domain/hooks.js.map +0 -1
  764. package/esm/domain/lifeCycle.d.ts +0 -73
  765. package/esm/domain/lifeCycle.js +0 -3
  766. package/esm/domain/lifeCycle.js.map +0 -1
  767. package/esm/domain/limitModification.d.ts +0 -8
  768. package/esm/domain/limitModification.js +0 -43
  769. package/esm/domain/limitModification.js.map +0 -1
  770. package/esm/domain/longTask/longTaskCollection.d.ts +0 -18
  771. package/esm/domain/longTask/longTaskCollection.js +0 -87
  772. package/esm/domain/longTask/longTaskCollection.js.map +0 -1
  773. package/esm/domain/plugins.d.ts +0 -40
  774. package/esm/domain/plugins.js +0 -12
  775. package/esm/domain/plugins.js.map +0 -1
  776. package/esm/domain/privacy.d.ts +0 -44
  777. package/esm/domain/privacy.js +0 -302
  778. package/esm/domain/privacy.js.map +0 -1
  779. package/esm/domain/privacyConstants.d.ts +0 -23
  780. package/esm/domain/privacyConstants.js +0 -35
  781. package/esm/domain/privacyConstants.js.map +0 -1
  782. package/esm/domain/requestCollection.d.ts +0 -54
  783. package/esm/domain/requestCollection.js +0 -106
  784. package/esm/domain/requestCollection.js.map +0 -1
  785. package/esm/domain/resource/graphql.d.ts +0 -23
  786. package/esm/domain/resource/graphql.js +0 -91
  787. package/esm/domain/resource/graphql.js.map +0 -1
  788. package/esm/domain/resource/matchRequestResourceEntry.d.ts +0 -16
  789. package/esm/domain/resource/matchRequestResourceEntry.js +0 -46
  790. package/esm/domain/resource/matchRequestResourceEntry.js.map +0 -1
  791. package/esm/domain/resource/requestRegistry.d.ts +0 -9
  792. package/esm/domain/resource/requestRegistry.js +0 -37
  793. package/esm/domain/resource/requestRegistry.js.map +0 -1
  794. package/esm/domain/resource/resourceCollection.d.ts +0 -7
  795. package/esm/domain/resource/resourceCollection.js +0 -187
  796. package/esm/domain/resource/resourceCollection.js.map +0 -1
  797. package/esm/domain/resource/resourceUtils.d.ts +0 -55
  798. package/esm/domain/resource/resourceUtils.js +0 -244
  799. package/esm/domain/resource/resourceUtils.js.map +0 -1
  800. package/esm/domain/resource/retrieveInitialDocumentResourceTiming.d.ts +0 -4
  801. package/esm/domain/resource/retrieveInitialDocumentResourceTiming.js +0 -21
  802. package/esm/domain/resource/retrieveInitialDocumentResourceTiming.js.map +0 -1
  803. package/esm/domain/rumSessionManager.d.ts +0 -36
  804. package/esm/domain/rumSessionManager.js +0 -72
  805. package/esm/domain/rumSessionManager.js.map +0 -1
  806. package/esm/domain/sampler/sampler.d.ts +0 -10
  807. package/esm/domain/sampler/sampler.js +0 -58
  808. package/esm/domain/sampler/sampler.js.map +0 -1
  809. package/esm/domain/startCustomerDataTelemetry.d.ts +0 -4
  810. package/esm/domain/startCustomerDataTelemetry.js +0 -52
  811. package/esm/domain/startCustomerDataTelemetry.js.map +0 -1
  812. package/esm/domain/tracing/getDocumentTraceId.d.ts +0 -12
  813. package/esm/domain/tracing/getDocumentTraceId.js +0 -68
  814. package/esm/domain/tracing/getDocumentTraceId.js.map +0 -1
  815. package/esm/domain/tracing/identifier.d.ts +0 -13
  816. package/esm/domain/tracing/identifier.js +0 -50
  817. package/esm/domain/tracing/identifier.js.map +0 -1
  818. package/esm/domain/tracing/sampler.d.ts +0 -10
  819. package/esm/domain/tracing/sampler.js +0 -64
  820. package/esm/domain/tracing/sampler.js.map +0 -1
  821. package/esm/domain/tracing/tracer.d.ts +0 -30
  822. package/esm/domain/tracing/tracer.js +0 -156
  823. package/esm/domain/tracing/tracer.js.map +0 -1
  824. package/esm/domain/tracing/tracer.types.d.ts +0 -12
  825. package/esm/domain/tracing/tracer.types.js +0 -2
  826. package/esm/domain/tracing/tracer.types.js.map +0 -1
  827. package/esm/domain/trackEventCounts.d.ts +0 -17
  828. package/esm/domain/trackEventCounts.js +0 -47
  829. package/esm/domain/trackEventCounts.js.map +0 -1
  830. package/esm/domain/view/bfCacheSupport.d.ts +0 -2
  831. package/esm/domain/view/bfCacheSupport.js +0 -10
  832. package/esm/domain/view/bfCacheSupport.js.map +0 -1
  833. package/esm/domain/view/trackViewEventCounts.d.ts +0 -5
  834. package/esm/domain/view/trackViewEventCounts.js +0 -13
  835. package/esm/domain/view/trackViewEventCounts.js.map +0 -1
  836. package/esm/domain/view/trackViews.d.ts +0 -65
  837. package/esm/domain/view/trackViews.js +0 -278
  838. package/esm/domain/view/trackViews.js.map +0 -1
  839. package/esm/domain/view/viewCollection.d.ts +0 -18
  840. package/esm/domain/view/viewCollection.js +0 -150
  841. package/esm/domain/view/viewCollection.js.map +0 -1
  842. package/esm/domain/view/viewMetrics/getClsAttributionImpactedArea.d.ts +0 -6
  843. package/esm/domain/view/viewMetrics/getClsAttributionImpactedArea.js +0 -28
  844. package/esm/domain/view/viewMetrics/getClsAttributionImpactedArea.js.map +0 -1
  845. package/esm/domain/view/viewMetrics/interactionCountPolyfill.d.ts +0 -18
  846. package/esm/domain/view/viewMetrics/interactionCountPolyfill.js +0 -39
  847. package/esm/domain/view/viewMetrics/interactionCountPolyfill.js.map +0 -1
  848. package/esm/domain/view/viewMetrics/startInitialViewMetricsTelemetry.d.ts +0 -6
  849. package/esm/domain/view/viewMetrics/startInitialViewMetricsTelemetry.js +0 -41
  850. package/esm/domain/view/viewMetrics/startInitialViewMetricsTelemetry.js.map +0 -1
  851. package/esm/domain/view/viewMetrics/trackBfcacheMetrics.d.ts +0 -8
  852. package/esm/domain/view/viewMetrics/trackBfcacheMetrics.js +0 -14
  853. package/esm/domain/view/viewMetrics/trackBfcacheMetrics.js.map +0 -1
  854. package/esm/domain/view/viewMetrics/trackCommonViewMetrics.d.ts +0 -21
  855. package/esm/domain/view/viewMetrics/trackCommonViewMetrics.js +0 -34
  856. package/esm/domain/view/viewMetrics/trackCommonViewMetrics.js.map +0 -1
  857. package/esm/domain/view/viewMetrics/trackCumulativeLayoutShift.d.ts +0 -37
  858. package/esm/domain/view/viewMetrics/trackCumulativeLayoutShift.js +0 -130
  859. package/esm/domain/view/viewMetrics/trackCumulativeLayoutShift.js.map +0 -1
  860. package/esm/domain/view/viewMetrics/trackFirstContentfulPaint.d.ts +0 -13
  861. package/esm/domain/view/viewMetrics/trackFirstContentfulPaint.js +0 -34
  862. package/esm/domain/view/viewMetrics/trackFirstContentfulPaint.js.map +0 -1
  863. package/esm/domain/view/viewMetrics/trackFirstHidden.d.ts +0 -10
  864. package/esm/domain/view/viewMetrics/trackFirstHidden.js +0 -30
  865. package/esm/domain/view/viewMetrics/trackFirstHidden.js.map +0 -1
  866. package/esm/domain/view/viewMetrics/trackFirstInput.d.ts +0 -19
  867. package/esm/domain/view/viewMetrics/trackFirstInput.js +0 -40
  868. package/esm/domain/view/viewMetrics/trackFirstInput.js.map +0 -1
  869. package/esm/domain/view/viewMetrics/trackInitialViewMetrics.d.ts +0 -15
  870. package/esm/domain/view/viewMetrics/trackInitialViewMetrics.js +0 -38
  871. package/esm/domain/view/viewMetrics/trackInitialViewMetrics.js.map +0 -1
  872. package/esm/domain/view/viewMetrics/trackInteractionToNextPaint.d.ts +0 -25
  873. package/esm/domain/view/viewMetrics/trackInteractionToNextPaint.js +0 -149
  874. package/esm/domain/view/viewMetrics/trackInteractionToNextPaint.js.map +0 -1
  875. package/esm/domain/view/viewMetrics/trackLargestContentfulPaint.d.ts +0 -18
  876. package/esm/domain/view/viewMetrics/trackLargestContentfulPaint.js +0 -57
  877. package/esm/domain/view/viewMetrics/trackLargestContentfulPaint.js.map +0 -1
  878. package/esm/domain/view/viewMetrics/trackLoadingTime.d.ts +0 -14
  879. package/esm/domain/view/viewMetrics/trackLoadingTime.js +0 -47
  880. package/esm/domain/view/viewMetrics/trackLoadingTime.js.map +0 -1
  881. package/esm/domain/view/viewMetrics/trackNavigationTimings.d.ts +0 -14
  882. package/esm/domain/view/viewMetrics/trackNavigationTimings.js +0 -40
  883. package/esm/domain/view/viewMetrics/trackNavigationTimings.js.map +0 -1
  884. package/esm/domain/view/viewMetrics/trackScrollMetrics.d.ts +0 -25
  885. package/esm/domain/view/viewMetrics/trackScrollMetrics.js +0 -72
  886. package/esm/domain/view/viewMetrics/trackScrollMetrics.js.map +0 -1
  887. package/esm/domain/vital/vitalCollection.d.ts +0 -55
  888. package/esm/domain/vital/vitalCollection.js +0 -107
  889. package/esm/domain/vital/vitalCollection.js.map +0 -1
  890. package/esm/domain/waitPageActivityEnd.d.ts +0 -54
  891. package/esm/domain/waitPageActivityEnd.js +0 -123
  892. package/esm/domain/waitPageActivityEnd.js.map +0 -1
  893. package/esm/domainContext.types.d.ts +0 -39
  894. package/esm/domainContext.types.js +0 -5
  895. package/esm/domainContext.types.js.map +0 -1
  896. package/esm/index.d.ts +0 -42
  897. package/esm/index.js +0 -22
  898. package/esm/index.js.map +0 -1
  899. package/esm/rawRumEvent.types.d.ts +0 -326
  900. package/esm/rawRumEvent.types.js +0 -31
  901. package/esm/rawRumEvent.types.js.map +0 -1
  902. package/esm/rumEvent.types.d.ts +0 -2038
  903. package/esm/rumEvent.types.js +0 -6
  904. package/esm/rumEvent.types.js.map +0 -1
  905. package/esm/transport/formDataTransport.d.ts +0 -16
  906. package/esm/transport/formDataTransport.js +0 -43
  907. package/esm/transport/formDataTransport.js.map +0 -1
  908. package/esm/transport/startRumBatch.d.ts +0 -5
  909. package/esm/transport/startRumBatch.js +0 -30
  910. package/esm/transport/startRumBatch.js.map +0 -1
  911. package/esm/transport/startRumEventBridge.d.ts +0 -2
  912. package/esm/transport/startRumEventBridge.js +0 -8
  913. package/esm/transport/startRumEventBridge.js.map +0 -1
  914. package/src/browser/firstInputPolyfill.ts +0 -87
  915. package/src/domain/error/trackConsoleError.ts +0 -14
  916. package/src/domain/resource/matchRequestResourceEntry.ts +0 -68
  917. package/src/domain/resource/retrieveInitialDocumentResourceTiming.ts +0 -27
  918. package/src/domain/rumSessionManager.ts +0 -134
  919. package/src/domain/sampler/sampler.ts +0 -63
  920. package/src/domain/tracing/sampler.ts +0 -69
  921. package/src/domain/view/viewMetrics/startInitialViewMetricsTelemetry.ts +0 -70
  922. package/src/domain/view/viewMetrics/trackFirstInput.ts +0 -59
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getComposedPathSelector.mjs","names":[],"sources":["../../src/domain/getComposedPathSelector.ts"],"sourcesContent":["import { safeTruncate, ONE_KIBI_BYTE } from '@kubesense/kubesense-browser-core'\nimport type { MatchOption } from '@kubesense/kubesense-browser-core'\nimport {\n STABLE_ATTRIBUTES,\n isGeneratedValue,\n getIDSelector,\n getTagNameSelector,\n getNthOfTypeSelector,\n getAttributeValueSelector,\n} from './getSelectorFromElement'\n\nconst FILTERED_TAGNAMES = ['HTML', 'BODY']\n\n/**\n * arbitrary value, we want to truncate the selector if it exceeds the limit\n */\nexport const CHARACTER_LIMIT = 2 * ONE_KIBI_BYTE\n\n/**\n * Safe attributes that can be collected without PII concerns.\n * These are commonly used for testing, accessibility, and UI identification.\n */\nexport const SAFE_ATTRIBUTES = STABLE_ATTRIBUTES.concat([\n 'role',\n 'type',\n 'disabled',\n 'readonly',\n 'tabindex',\n 'draggable',\n 'target',\n 'rel',\n 'download',\n 'method',\n 'action',\n 'enctype',\n 'autocomplete',\n])\n\n/**\n * Extracts a selector string from a MouseEvent composedPath.\n *\n * This function:\n * 1. Filters out non-Element items (Document, Window, ShadowRoot)\n * 2. Extracts a selector string from each element\n * 3. Truncates the selector string if it exceeds the character limit\n * 4. Returns the selector string\n *\n * @param composedPath - The composedPath from a MouseEvent\n * @returns A selector string\n */\nexport function getComposedPathSelector(composedPath: EventTarget[], actionNameAttribute: string | undefined): string {\n // Filter to only include Element nodes\n const elements = composedPath.filter(\n (el): el is Element => el instanceof Element && !FILTERED_TAGNAMES.includes(el.tagName)\n )\n\n if (elements.length === 0) {\n return ''\n }\n\n const allowedAttributes = actionNameAttribute ? [actionNameAttribute].concat(SAFE_ATTRIBUTES) : SAFE_ATTRIBUTES\n\n let result = ''\n for (const element of elements) {\n const part = getSelectorStringFromElement(element, allowedAttributes)\n result += part\n if (result.length >= CHARACTER_LIMIT) {\n return safeTruncate(result, CHARACTER_LIMIT)\n }\n }\n return result\n}\n\n/**\n * Extracts a selector string from an element.\n */\nfunction getSelectorStringFromElement(element: Element, allowedAttributes: MatchOption[]): string {\n const tagName = getTagNameSelector(element)\n const id = getIDSelector(element)\n const classes = getElementClassesString(element)\n const attributes = extractSafeAttributesString(element, allowedAttributes)\n const positionData = computePositionDataString(element)\n\n return `${tagName}${id || ''}${attributes}${classes}${positionData};`\n}\n\nfunction getElementClassesString(element: Element): string {\n return Array.from(element.classList)\n .filter((c) => !isGeneratedValue(c))\n .sort()\n .map((c) => `.${CSS.escape(c)}`)\n .join('')\n}\n\n/**\n * Computes the nthChild and nthOfType positions for an element.\n *\n * @param element - The element to compute the position data for\n * @returns A string of the form \":nth-child(1):nth-of-type(1)\"\n */\nfunction computePositionDataString(element: Element): string {\n const siblings = Array.from(element.parentNode!.children)\n\n if (siblings.length <= 1) {\n return ''\n }\n\n const sameTypeSiblings = siblings.filter((sibling) => sibling.tagName === element.tagName)\n\n const nthChild = siblings.indexOf(element)\n\n const nthOfType = getNthOfTypeSelector(element)\n\n return `:nth-child(${nthChild + 1})${sameTypeSiblings.length > 1 ? `:nth-of-type(${nthOfType})` : ''}`\n}\n\n/**\n * Extracts only the safe (allowlisted) attributes from an element.\n * The attributes are sorted alphabetically by name.\n */\nfunction extractSafeAttributesString(element: Element, allowedAttributes: MatchOption[]): string {\n const result: string[] = []\n const attributes = Array.from(element.attributes)\n for (const attribute of attributes) {\n if (allowedAttributes.includes(attribute.name)) {\n result.push(getAttributeValueSelector(attribute.name, attribute.value))\n }\n }\n return result.sort().join('')\n}\n"],"mappings":";;;AAWA,MAAM,oBAAoB,CAAC,QAAQ,MAAM;;;;AAKzC,MAAa,kBAAkB,IAAI;;;;;AAMnC,MAAa,kBAAkB,kBAAkB,OAAO;CACtD;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF,CAAC;;;;;;;;;;;;;AAcD,SAAgB,wBAAwB,cAA6B,qBAAiD;CAEpH,MAAM,WAAW,aAAa,QAC3B,OAAsB,cAAc,WAAW,CAAC,kBAAkB,SAAS,GAAG,OAAO,CACxF;CAEA,IAAI,SAAS,WAAW,GACtB,OAAO;CAGT,MAAM,oBAAoB,sBAAsB,CAAC,mBAAmB,CAAC,CAAC,OAAO,eAAe,IAAI;CAEhG,IAAI,SAAS;CACb,KAAK,MAAM,WAAW,UAAU;EAC9B,MAAM,OAAO,6BAA6B,SAAS,iBAAiB;EACpE,UAAU;EACV,IAAI,OAAO,UAAU,iBACnB,OAAO,aAAa,QAAQ,eAAe;CAE/C;CACA,OAAO;AACT;;;;AAKA,SAAS,6BAA6B,SAAkB,mBAA0C;CAChG,MAAM,UAAU,mBAAmB,OAAO;CAC1C,MAAM,KAAK,cAAc,OAAO;CAChC,MAAM,UAAU,wBAAwB,OAAO;CAC/C,MAAM,aAAa,4BAA4B,SAAS,iBAAiB;CACzE,MAAM,eAAe,0BAA0B,OAAO;CAEtD,OAAO,GAAG,UAAU,MAAM,KAAK,aAAa,UAAU,aAAa;AACrE;AAEA,SAAS,wBAAwB,SAA0B;CACzD,OAAO,MAAM,KAAK,QAAQ,SAAS,CAAC,CACjC,QAAQ,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC,CACnC,KAAK,CAAC,CACN,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,CAC/B,KAAK,EAAE;AACZ;;;;;;;AAQA,SAAS,0BAA0B,SAA0B;CAC3D,MAAM,WAAW,MAAM,KAAK,QAAQ,WAAY,QAAQ;CAExD,IAAI,SAAS,UAAU,GACrB,OAAO;CAGT,MAAM,mBAAmB,SAAS,QAAQ,YAAY,QAAQ,YAAY,QAAQ,OAAO;CAEzF,MAAM,WAAW,SAAS,QAAQ,OAAO;CAEzC,MAAM,YAAY,qBAAqB,OAAO;CAE9C,OAAO,cAAc,WAAW,EAAE,GAAG,iBAAiB,SAAS,IAAI,gBAAgB,UAAU,KAAK;AACpG;;;;;AAMA,SAAS,4BAA4B,SAAkB,mBAA0C;CAC/F,MAAM,SAAmB,CAAC;CAC1B,MAAM,aAAa,MAAM,KAAK,QAAQ,UAAU;CAChD,KAAK,MAAM,aAAa,YACtB,IAAI,kBAAkB,SAAS,UAAU,IAAI,GAC3C,OAAO,KAAK,0BAA0B,UAAU,MAAM,UAAU,KAAK,CAAC;CAG1E,OAAO,OAAO,KAAK,CAAC,CAAC,KAAK,EAAE;AAC9B"}
@@ -0,0 +1,218 @@
1
+ import { isNodeShadowRoot } from "../browser/htmlDomUtils.mjs";
2
+ import { DEFAULT_PROGRAMMATIC_ACTION_NAME_ATTRIBUTE } from "./action/actionNameConstants.mjs";
3
+ //#region src/domain/getSelectorFromElement.ts
4
+ /**
5
+ * Marker used to indicate shadow DOM boundaries in selectors.
6
+ * Named after the deprecated Shadow DOM v0 '::shadow' pseudo-element which served the same
7
+ * purpose of marking entry into a shadow root.
8
+ * Note: This is NOT a valid CSS selector, it's an internal marker that requires custom
9
+ * parsing logic.
10
+ */
11
+ const SHADOW_DOM_MARKER = "::shadow ";
12
+ /**
13
+ * Stable attributes are attributes that are commonly used to identify parts of a UI (ex:
14
+ * component). Those attribute values should not be generated randomly (hardcoded most of the time)
15
+ * and stay the same across deploys. They are not necessarily unique across the document.
16
+ */
17
+ const STABLE_ATTRIBUTES = [
18
+ DEFAULT_PROGRAMMATIC_ACTION_NAME_ATTRIBUTE,
19
+ "data-testid",
20
+ "data-test",
21
+ "data-qa",
22
+ "data-cy",
23
+ "data-test-id",
24
+ "data-qa-id",
25
+ "data-testing",
26
+ "data-component",
27
+ "data-element",
28
+ "data-source-file"
29
+ ];
30
+ const GLOBALLY_UNIQUE_SELECTOR_GETTERS = [getStableAttributeSelector, getIDSelector];
31
+ const UNIQUE_AMONG_CHILDREN_SELECTOR_GETTERS = [
32
+ getStableAttributeSelector,
33
+ getClassSelector,
34
+ getTagNameSelector
35
+ ];
36
+ function getSelectorFromElement(targetElement, actionNameAttribute) {
37
+ if (!targetElement.isConnected) return;
38
+ const subtrees = getAllSubtreeTargets(targetElement);
39
+ const selectorParts = [];
40
+ for (const { rootNode, target } of subtrees) {
41
+ const selector = getSelectorFromElementWithinSubtree(target, rootNode, actionNameAttribute);
42
+ if (!selector) return;
43
+ selectorParts.push(selector);
44
+ }
45
+ return selectorParts.join(SHADOW_DOM_MARKER);
46
+ }
47
+ /**
48
+ * Returns all (rootNode, target) pairs from the document down to the element.
49
+ */
50
+ function getAllSubtreeTargets(element) {
51
+ const result = [];
52
+ let currentTarget = element;
53
+ while (currentTarget) {
54
+ const rootNode = currentTarget.getRootNode();
55
+ result.push({
56
+ rootNode,
57
+ target: currentTarget
58
+ });
59
+ if (isNodeShadowRoot(rootNode)) currentTarget = rootNode.host;
60
+ else break;
61
+ }
62
+ return result.reverse();
63
+ }
64
+ /**
65
+ * Computes a CSS selector for an element within a specific subtree (document or shadow root).
66
+ */
67
+ function getSelectorFromElementWithinSubtree(targetElement, rootNode, actionNameAttribute) {
68
+ let currentSelector;
69
+ let currentElement = targetElement;
70
+ while (currentElement && currentElement.nodeName !== "HTML") {
71
+ const globallyUniqueSelector = findSelector(currentElement, rootNode, GLOBALLY_UNIQUE_SELECTOR_GETTERS, isSelectorUniqueWithinRoot, actionNameAttribute, currentSelector);
72
+ if (globallyUniqueSelector) return combineSelector(globallyUniqueSelector, currentSelector);
73
+ currentSelector = combineSelector(findSelector(currentElement, rootNode, UNIQUE_AMONG_CHILDREN_SELECTOR_GETTERS, isSelectorUniqueAmongSiblings, actionNameAttribute, currentSelector) || getPositionSelector(currentElement), currentSelector);
74
+ currentElement = currentElement.parentElement;
75
+ }
76
+ return currentSelector;
77
+ }
78
+ function isGeneratedValue(value) {
79
+ return /[0-9]/.test(value);
80
+ }
81
+ function getIDSelector(element) {
82
+ if (element.id && !isGeneratedValue(element.id)) return `#${CSS.escape(element.id)}`;
83
+ }
84
+ function getClassSelector(element) {
85
+ if (element.tagName === "BODY") return;
86
+ const classList = element.classList;
87
+ for (let i = 0; i < classList.length; i += 1) {
88
+ const className = classList[i];
89
+ if (isGeneratedValue(className)) continue;
90
+ return `${CSS.escape(element.tagName)}.${CSS.escape(className)}`;
91
+ }
92
+ }
93
+ function getTagNameSelector(element) {
94
+ return CSS.escape(element.tagName);
95
+ }
96
+ function getStableAttributeSelector(element, actionNameAttribute) {
97
+ if (actionNameAttribute) {
98
+ const selector = getAttributeSelector(actionNameAttribute);
99
+ if (selector) return selector;
100
+ }
101
+ for (const attributeName of STABLE_ATTRIBUTES) {
102
+ const selector = getAttributeSelector(attributeName);
103
+ if (selector) return selector;
104
+ }
105
+ function getAttributeSelector(attributeName) {
106
+ if (element.hasAttribute(attributeName)) return `${CSS.escape(element.tagName)}${getAttributeValueSelector(attributeName, element.getAttribute(attributeName))}`;
107
+ }
108
+ }
109
+ function getAttributeValueSelector(attributeName, attributeValue) {
110
+ return `[${attributeName}="${CSS.escape(attributeValue)}"]`;
111
+ }
112
+ function getPositionSelector(element) {
113
+ const nthOfType = getNthOfTypeSelector(element);
114
+ return `${CSS.escape(element.tagName)}:nth-of-type(${nthOfType})`;
115
+ }
116
+ function getNthOfTypeSelector(element) {
117
+ let sibling = element.parentNode.firstElementChild;
118
+ let nthOfType = 1;
119
+ while (sibling && sibling !== element) {
120
+ if (sibling.tagName === element.tagName) nthOfType += 1;
121
+ sibling = sibling.nextElementSibling;
122
+ }
123
+ return nthOfType;
124
+ }
125
+ function findSelector(element, rootNode, selectorGetters, predicate, actionNameAttribute, childSelector) {
126
+ for (const selectorGetter of selectorGetters) {
127
+ const elementSelector = selectorGetter(element, actionNameAttribute);
128
+ if (!elementSelector) continue;
129
+ if (predicate(element, rootNode, elementSelector, childSelector)) return elementSelector;
130
+ }
131
+ }
132
+ /**
133
+ * Check whether the selector is unique within the root node (document or shadow root).
134
+ */
135
+ function isSelectorUniqueWithinRoot(_element, rootNode, elementSelector, childSelector) {
136
+ return rootNode.querySelectorAll(combineSelector(elementSelector, childSelector)).length === 1;
137
+ }
138
+ /**
139
+ * Check whether the selector is unique among the element siblings. In other words, it returns true
140
+ * if "ELEMENT_PARENT > CHILD_SELECTOR" returns a single element.
141
+ *
142
+ * @param currentElement - the element being considered while iterating over the target
143
+ * element ancestors.
144
+ * @param _rootNode - the root node (document or shadow root) - unused but required for predicate signature.
145
+ * @param currentElementSelector - a selector that matches the current element. That
146
+ * selector is not a composed selector (i.e. it might be a single tag name, class name...).
147
+ * @param childSelector - child selector is a selector that targets a descendant
148
+ * of the current element. When undefined, the current element is the target element.
149
+ *
150
+ * # Scope selector usage
151
+ *
152
+ * When composed together, the final selector will be joined with `>` operators to make sure we
153
+ * target direct descendants at each level. In this function, we'll use `querySelector` to check if
154
+ * a selector matches descendants of the current element. But by default, the query selector match
155
+ * elements at any level. Example:
156
+ *
157
+ * ```html
158
+ * <main>
159
+ * <div>
160
+ * <span></span>
161
+ * </div>
162
+ * <marquee>
163
+ * <div>
164
+ * <span></span>
165
+ * </div>
166
+ * </marquee>
167
+ * </main>
168
+ * ```
169
+ *
170
+ * `sibling.querySelector('DIV > SPAN')` will match both span elements, so we would consider the
171
+ * selector to be not unique, even if it is unique when we'll compose it with the parent with a `>`
172
+ * operator (`MAIN > DIV > SPAN`).
173
+ *
174
+ * To avoid this, we can use the `:scope` selector to make sure the selector starts from the current
175
+ * sibling (i.e. `sibling.querySelector('DIV:scope > SPAN')` will only match the first span).
176
+ *
177
+ * [1]: https://developer.mozilla.org/fr/docs/Web/CSS/:scope
178
+ *
179
+ * # Performance considerations
180
+ *
181
+ * We compute selectors in performance-critical operations (ex: during a click), so we need to make
182
+ * sure the function is as fast as possible. We observed that naively using `querySelectorAll` to
183
+ * check if the selector matches more than 1 element is quite expensive, so we want to avoid it.
184
+ *
185
+ * Because we are iterating the DOM upward and we use that function at every level, we know the
186
+ * child selector is already unique among the current element children, so we don't need to check
187
+ * for the current element subtree.
188
+ *
189
+ * Instead, we can focus on the current element siblings. If we find a single element matching the
190
+ * selector within a sibling, we know that it's not unique. This allows us to use `querySelector`
191
+ * (or `matches`, when the current element is the target element) instead of `querySelectorAll`.
192
+ */
193
+ function isSelectorUniqueAmongSiblings(currentElement, _rootNode, currentElementSelector, childSelector) {
194
+ let isSiblingMatching;
195
+ if (childSelector === void 0) isSiblingMatching = (sibling) => sibling.matches(currentElementSelector);
196
+ else {
197
+ const scopedSelector = combineSelector(`${currentElementSelector}:scope`, childSelector);
198
+ isSiblingMatching = (sibling) => sibling.querySelector(scopedSelector) !== null;
199
+ }
200
+ let sibling = currentElement.previousElementSibling;
201
+ while (sibling) {
202
+ if (isSiblingMatching(sibling)) return false;
203
+ sibling = sibling.previousElementSibling;
204
+ }
205
+ sibling = currentElement.nextElementSibling;
206
+ while (sibling) {
207
+ if (isSiblingMatching(sibling)) return false;
208
+ sibling = sibling.nextElementSibling;
209
+ }
210
+ return true;
211
+ }
212
+ function combineSelector(parent, child) {
213
+ return child ? `${parent}>${child}` : parent;
214
+ }
215
+ //#endregion
216
+ export { SHADOW_DOM_MARKER, STABLE_ATTRIBUTES, getAttributeValueSelector, getIDSelector, getNthOfTypeSelector, getSelectorFromElement, getTagNameSelector, isGeneratedValue, isSelectorUniqueAmongSiblings };
217
+
218
+ //# sourceMappingURL=getSelectorFromElement.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getSelectorFromElement.mjs","names":[],"sources":["../../src/domain/getSelectorFromElement.ts"],"sourcesContent":["import { isNodeShadowRoot } from '../browser/htmlDomUtils'\nimport { DEFAULT_PROGRAMMATIC_ACTION_NAME_ATTRIBUTE } from './action/actionNameConstants'\n\n/**\n * Marker used to indicate shadow DOM boundaries in selectors.\n * Named after the deprecated Shadow DOM v0 '::shadow' pseudo-element which served the same\n * purpose of marking entry into a shadow root.\n * Note: This is NOT a valid CSS selector, it's an internal marker that requires custom\n * parsing logic.\n */\nexport const SHADOW_DOM_MARKER = '::shadow '\n\n/**\n * Stable attributes are attributes that are commonly used to identify parts of a UI (ex:\n * component). Those attribute values should not be generated randomly (hardcoded most of the time)\n * and stay the same across deploys. They are not necessarily unique across the document.\n */\nexport const STABLE_ATTRIBUTES = [\n DEFAULT_PROGRAMMATIC_ACTION_NAME_ATTRIBUTE,\n // Common test attributes (list provided by google recorder)\n 'data-testid',\n 'data-test',\n 'data-qa',\n 'data-cy',\n 'data-test-id',\n 'data-qa-id',\n 'data-testing',\n // FullStory decorator attributes:\n 'data-component',\n 'data-element',\n 'data-source-file',\n]\n\ntype SelectorGetter = (element: Element, actionNameAttribute: string | undefined) => string | undefined\n\n// Selectors to use if they target a single element on the whole document. Those selectors are\n// considered as \"stable\" and uniquely identify an element regardless of the page state. If we find\n// one, we should consider the selector \"complete\" and stop iterating over ancestors.\nconst GLOBALLY_UNIQUE_SELECTOR_GETTERS: SelectorGetter[] = [getStableAttributeSelector, getIDSelector]\n\n// Selectors to use if they target a single element among an element descendants. Those selectors\n// are more brittle than \"globally unique\" selectors and should be combined with ancestor selectors\n// to improve specificity.\nconst UNIQUE_AMONG_CHILDREN_SELECTOR_GETTERS: SelectorGetter[] = [\n getStableAttributeSelector,\n getClassSelector,\n getTagNameSelector,\n]\n\ninterface SubtreeTarget {\n rootNode: Document | ShadowRoot\n target: Element\n}\n\nexport function getSelectorFromElement(\n targetElement: Element,\n actionNameAttribute: string | undefined\n): string | undefined {\n if (!targetElement.isConnected) {\n // We cannot compute a selector for a detached element, as we don't have access to all of its\n // parents, and we cannot determine if it's unique in the document.\n return\n }\n\n const subtrees = getAllSubtreeTargets(targetElement)\n const selectorParts: string[] = []\n\n for (const { rootNode, target } of subtrees) {\n const selector = getSelectorFromElementWithinSubtree(target, rootNode, actionNameAttribute)\n if (!selector) {\n return undefined\n }\n selectorParts.push(selector)\n }\n\n return selectorParts.join(SHADOW_DOM_MARKER)\n}\n\n/**\n * Returns all (rootNode, target) pairs from the document down to the element.\n */\nfunction getAllSubtreeTargets(element: Element): SubtreeTarget[] {\n const result: SubtreeTarget[] = []\n let currentTarget: Element | undefined = element\n\n while (currentTarget) {\n const rootNode = currentTarget.getRootNode() as Document | ShadowRoot\n result.push({ rootNode, target: currentTarget })\n\n if (isNodeShadowRoot(rootNode)) {\n currentTarget = rootNode.host\n } else {\n break\n }\n }\n\n return result.reverse()\n}\n\n/**\n * Computes a CSS selector for an element within a specific subtree (document or shadow root).\n */\nfunction getSelectorFromElementWithinSubtree(\n targetElement: Element,\n rootNode: Document | ShadowRoot,\n actionNameAttribute: string | undefined\n): string | undefined {\n let currentSelector: string | undefined\n let currentElement: Element | null = targetElement\n\n while (currentElement && currentElement.nodeName !== 'HTML') {\n const globallyUniqueSelector = findSelector(\n currentElement,\n rootNode,\n GLOBALLY_UNIQUE_SELECTOR_GETTERS,\n isSelectorUniqueWithinRoot,\n actionNameAttribute,\n currentSelector\n )\n if (globallyUniqueSelector) {\n return combineSelector(globallyUniqueSelector, currentSelector)\n }\n\n const uniqueSelectorAmongChildren = findSelector(\n currentElement,\n rootNode,\n UNIQUE_AMONG_CHILDREN_SELECTOR_GETTERS,\n isSelectorUniqueAmongSiblings,\n actionNameAttribute,\n currentSelector\n )\n\n const elementSelector = uniqueSelectorAmongChildren || getPositionSelector(currentElement)\n currentSelector = combineSelector(elementSelector, currentSelector)\n\n currentElement = currentElement.parentElement\n }\n\n return currentSelector\n}\n\nexport function isGeneratedValue(value: string) {\n // To compute the \"URL path group\", the backend replaces every URL path parts as a question mark\n // if it thinks the part is an identifier. The condition it uses is to checks whether a digit is\n // present.\n //\n // Here, we use the same strategy: if the value contains a digit, we consider it generated. This\n // strategy might be a bit naive and fail in some cases, but there are many fallbacks to generate\n // CSS selectors so it should be fine most of the time.\n return /[0-9]/.test(value)\n}\n\nexport function getIDSelector(element: Element): string | undefined {\n if (element.id && !isGeneratedValue(element.id)) {\n return `#${CSS.escape(element.id)}`\n }\n}\n\nfunction getClassSelector(element: Element): string | undefined {\n if (element.tagName === 'BODY') {\n return\n }\n const classList = element.classList\n for (let i = 0; i < classList.length; i += 1) {\n const className = classList[i]\n if (isGeneratedValue(className)) {\n continue\n }\n\n return `${CSS.escape(element.tagName)}.${CSS.escape(className)}`\n }\n}\n\nexport function getTagNameSelector(element: Element): string {\n return CSS.escape(element.tagName)\n}\n\nfunction getStableAttributeSelector(element: Element, actionNameAttribute: string | undefined): string | undefined {\n if (actionNameAttribute) {\n const selector = getAttributeSelector(actionNameAttribute)\n if (selector) {\n return selector\n }\n }\n\n for (const attributeName of STABLE_ATTRIBUTES) {\n const selector = getAttributeSelector(attributeName)\n if (selector) {\n return selector\n }\n }\n\n function getAttributeSelector(attributeName: string) {\n if (element.hasAttribute(attributeName)) {\n return `${CSS.escape(element.tagName)}${getAttributeValueSelector(attributeName, element.getAttribute(attributeName)!)}`\n }\n }\n}\n\nexport function getAttributeValueSelector(attributeName: string, attributeValue: string) {\n return `[${attributeName}=\"${CSS.escape(attributeValue)}\"]`\n}\n\nfunction getPositionSelector(element: Element): string {\n const nthOfType = getNthOfTypeSelector(element)\n\n return `${CSS.escape(element.tagName)}:nth-of-type(${nthOfType})`\n}\n\nexport function getNthOfTypeSelector(element: Element): number {\n const parent = element.parentNode!\n\n let sibling = parent.firstElementChild\n\n let nthOfType = 1\n\n while (sibling && sibling !== element) {\n if (sibling.tagName === element.tagName) {\n nthOfType += 1\n }\n sibling = sibling.nextElementSibling\n }\n\n return nthOfType\n}\n\nfunction findSelector(\n element: Element,\n rootNode: Document | ShadowRoot,\n selectorGetters: SelectorGetter[],\n predicate: (\n element: Element,\n rootNode: Document | ShadowRoot,\n elementSelector: string,\n childSelector: string | undefined\n ) => boolean,\n actionNameAttribute: string | undefined,\n childSelector: string | undefined\n) {\n for (const selectorGetter of selectorGetters) {\n const elementSelector = selectorGetter(element, actionNameAttribute)\n if (!elementSelector) {\n continue\n }\n if (predicate(element, rootNode, elementSelector, childSelector)) {\n return elementSelector\n }\n }\n}\n\n/**\n * Check whether the selector is unique within the root node (document or shadow root).\n */\nfunction isSelectorUniqueWithinRoot(\n _element: Element,\n rootNode: Document | ShadowRoot,\n elementSelector: string,\n childSelector: string | undefined\n): boolean {\n return rootNode.querySelectorAll(combineSelector(elementSelector, childSelector)).length === 1\n}\n\n/**\n * Check whether the selector is unique among the element siblings. In other words, it returns true\n * if \"ELEMENT_PARENT > CHILD_SELECTOR\" returns a single element.\n *\n * @param currentElement - the element being considered while iterating over the target\n * element ancestors.\n * @param _rootNode - the root node (document or shadow root) - unused but required for predicate signature.\n * @param currentElementSelector - a selector that matches the current element. That\n * selector is not a composed selector (i.e. it might be a single tag name, class name...).\n * @param childSelector - child selector is a selector that targets a descendant\n * of the current element. When undefined, the current element is the target element.\n *\n * # Scope selector usage\n *\n * When composed together, the final selector will be joined with `>` operators to make sure we\n * target direct descendants at each level. In this function, we'll use `querySelector` to check if\n * a selector matches descendants of the current element. But by default, the query selector match\n * elements at any level. Example:\n *\n * ```html\n * <main>\n * <div>\n * <span></span>\n * </div>\n * <marquee>\n * <div>\n * <span></span>\n * </div>\n * </marquee>\n * </main>\n * ```\n *\n * `sibling.querySelector('DIV > SPAN')` will match both span elements, so we would consider the\n * selector to be not unique, even if it is unique when we'll compose it with the parent with a `>`\n * operator (`MAIN > DIV > SPAN`).\n *\n * To avoid this, we can use the `:scope` selector to make sure the selector starts from the current\n * sibling (i.e. `sibling.querySelector('DIV:scope > SPAN')` will only match the first span).\n *\n * [1]: https://developer.mozilla.org/fr/docs/Web/CSS/:scope\n *\n * # Performance considerations\n *\n * We compute selectors in performance-critical operations (ex: during a click), so we need to make\n * sure the function is as fast as possible. We observed that naively using `querySelectorAll` to\n * check if the selector matches more than 1 element is quite expensive, so we want to avoid it.\n *\n * Because we are iterating the DOM upward and we use that function at every level, we know the\n * child selector is already unique among the current element children, so we don't need to check\n * for the current element subtree.\n *\n * Instead, we can focus on the current element siblings. If we find a single element matching the\n * selector within a sibling, we know that it's not unique. This allows us to use `querySelector`\n * (or `matches`, when the current element is the target element) instead of `querySelectorAll`.\n */\nexport function isSelectorUniqueAmongSiblings(\n currentElement: Element,\n _rootNode: Document | ShadowRoot,\n currentElementSelector: string,\n childSelector: string | undefined\n): boolean {\n let isSiblingMatching: (sibling: Element) => boolean\n\n if (childSelector === undefined) {\n // If the child selector is undefined (meaning `currentElement` is the target element, not one\n // of its ancestor), we need to use `matches` to check if the sibling is matching the selector,\n // as `querySelector` only returns a descendant of the element.\n isSiblingMatching = (sibling) => sibling.matches(currentElementSelector)\n } else {\n const scopedSelector = combineSelector(`${currentElementSelector}:scope`, childSelector)\n isSiblingMatching = (sibling) => sibling.querySelector(scopedSelector) !== null\n }\n\n // Check siblings by iterating directly through previousElementSibling and nextElementSibling.\n // This works even when parentElement is null (e.g., when parent is a DocumentFragment).\n\n // Check previous siblings\n let sibling = currentElement.previousElementSibling\n while (sibling) {\n if (isSiblingMatching(sibling)) {\n return false\n }\n sibling = sibling.previousElementSibling\n }\n\n // Check next siblings\n sibling = currentElement.nextElementSibling\n while (sibling) {\n if (isSiblingMatching(sibling)) {\n return false\n }\n sibling = sibling.nextElementSibling\n }\n\n return true\n}\n\nfunction combineSelector(parent: string, child: string | undefined): string {\n return child ? `${parent}>${child}` : parent\n}\n"],"mappings":";;;;;;;;;;AAUA,MAAa,oBAAoB;;;;;;AAOjC,MAAa,oBAAoB;CAC/B;CAEA;CACA;CACA;CACA;CACA;CACA;CACA;CAEA;CACA;CACA;AACF;AAOA,MAAM,mCAAqD,CAAC,4BAA4B,aAAa;AAKrG,MAAM,yCAA2D;CAC/D;CACA;CACA;AACF;AAOA,SAAgB,uBACd,eACA,qBACoB;CACpB,IAAI,CAAC,cAAc,aAGjB;CAGF,MAAM,WAAW,qBAAqB,aAAa;CACnD,MAAM,gBAA0B,CAAC;CAEjC,KAAK,MAAM,EAAE,UAAU,YAAY,UAAU;EAC3C,MAAM,WAAW,oCAAoC,QAAQ,UAAU,mBAAmB;EAC1F,IAAI,CAAC,UACH;EAEF,cAAc,KAAK,QAAQ;CAC7B;CAEA,OAAO,cAAc,KAAK,iBAAiB;AAC7C;;;;AAKA,SAAS,qBAAqB,SAAmC;CAC/D,MAAM,SAA0B,CAAC;CACjC,IAAI,gBAAqC;CAEzC,OAAO,eAAe;EACpB,MAAM,WAAW,cAAc,YAAY;EAC3C,OAAO,KAAK;GAAE;GAAU,QAAQ;EAAc,CAAC;EAE/C,IAAI,iBAAiB,QAAQ,GAC3B,gBAAgB,SAAS;OAEzB;CAEJ;CAEA,OAAO,OAAO,QAAQ;AACxB;;;;AAKA,SAAS,oCACP,eACA,UACA,qBACoB;CACpB,IAAI;CACJ,IAAI,iBAAiC;CAErC,OAAO,kBAAkB,eAAe,aAAa,QAAQ;EAC3D,MAAM,yBAAyB,aAC7B,gBACA,UACA,kCACA,4BACA,qBACA,eACF;EACA,IAAI,wBACF,OAAO,gBAAgB,wBAAwB,eAAe;EAahE,kBAAkB,gBAVkB,aAClC,gBACA,UACA,wCACA,+BACA,qBACA,eAGgD,KAAK,oBAAoB,cAAc,GACtC,eAAe;EAElE,iBAAiB,eAAe;CAClC;CAEA,OAAO;AACT;AAEA,SAAgB,iBAAiB,OAAe;CAQ9C,OAAO,QAAQ,KAAK,KAAK;AAC3B;AAEA,SAAgB,cAAc,SAAsC;CAClE,IAAI,QAAQ,MAAM,CAAC,iBAAiB,QAAQ,EAAE,GAC5C,OAAO,IAAI,IAAI,OAAO,QAAQ,EAAE;AAEpC;AAEA,SAAS,iBAAiB,SAAsC;CAC9D,IAAI,QAAQ,YAAY,QACtB;CAEF,MAAM,YAAY,QAAQ;CAC1B,KAAK,IAAI,IAAI,GAAG,IAAI,UAAU,QAAQ,KAAK,GAAG;EAC5C,MAAM,YAAY,UAAU;EAC5B,IAAI,iBAAiB,SAAS,GAC5B;EAGF,OAAO,GAAG,IAAI,OAAO,QAAQ,OAAO,EAAE,GAAG,IAAI,OAAO,SAAS;CAC/D;AACF;AAEA,SAAgB,mBAAmB,SAA0B;CAC3D,OAAO,IAAI,OAAO,QAAQ,OAAO;AACnC;AAEA,SAAS,2BAA2B,SAAkB,qBAA6D;CACjH,IAAI,qBAAqB;EACvB,MAAM,WAAW,qBAAqB,mBAAmB;EACzD,IAAI,UACF,OAAO;CAEX;CAEA,KAAK,MAAM,iBAAiB,mBAAmB;EAC7C,MAAM,WAAW,qBAAqB,aAAa;EACnD,IAAI,UACF,OAAO;CAEX;CAEA,SAAS,qBAAqB,eAAuB;EACnD,IAAI,QAAQ,aAAa,aAAa,GACpC,OAAO,GAAG,IAAI,OAAO,QAAQ,OAAO,IAAI,0BAA0B,eAAe,QAAQ,aAAa,aAAa,CAAE;CAEzH;AACF;AAEA,SAAgB,0BAA0B,eAAuB,gBAAwB;CACvF,OAAO,IAAI,cAAc,IAAI,IAAI,OAAO,cAAc,EAAE;AAC1D;AAEA,SAAS,oBAAoB,SAA0B;CACrD,MAAM,YAAY,qBAAqB,OAAO;CAE9C,OAAO,GAAG,IAAI,OAAO,QAAQ,OAAO,EAAE,eAAe,UAAU;AACjE;AAEA,SAAgB,qBAAqB,SAA0B;CAG7D,IAAI,UAFW,QAAQ,WAEF;CAErB,IAAI,YAAY;CAEhB,OAAO,WAAW,YAAY,SAAS;EACrC,IAAI,QAAQ,YAAY,QAAQ,SAC9B,aAAa;EAEf,UAAU,QAAQ;CACpB;CAEA,OAAO;AACT;AAEA,SAAS,aACP,SACA,UACA,iBACA,WAMA,qBACA,eACA;CACA,KAAK,MAAM,kBAAkB,iBAAiB;EAC5C,MAAM,kBAAkB,eAAe,SAAS,mBAAmB;EACnE,IAAI,CAAC,iBACH;EAEF,IAAI,UAAU,SAAS,UAAU,iBAAiB,aAAa,GAC7D,OAAO;CAEX;AACF;;;;AAKA,SAAS,2BACP,UACA,UACA,iBACA,eACS;CACT,OAAO,SAAS,iBAAiB,gBAAgB,iBAAiB,aAAa,CAAC,CAAC,CAAC,WAAW;AAC/F;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyDA,SAAgB,8BACd,gBACA,WACA,wBACA,eACS;CACT,IAAI;CAEJ,IAAI,kBAAkB,KAAA,GAIpB,qBAAqB,YAAY,QAAQ,QAAQ,sBAAsB;MAClE;EACL,MAAM,iBAAiB,gBAAgB,GAAG,uBAAuB,SAAS,aAAa;EACvF,qBAAqB,YAAY,QAAQ,cAAc,cAAc,MAAM;CAC7E;CAMA,IAAI,UAAU,eAAe;CAC7B,OAAO,SAAS;EACd,IAAI,kBAAkB,OAAO,GAC3B,OAAO;EAET,UAAU,QAAQ;CACpB;CAGA,UAAU,eAAe;CACzB,OAAO,SAAS;EACd,IAAI,kBAAkB,OAAO,GAC3B,OAAO;EAET,UAAU,QAAQ;CACpB;CAEA,OAAO;AACT;AAEA,SAAS,gBAAgB,QAAgB,OAAmC;CAC1E,OAAO,QAAQ,GAAG,OAAO,GAAG,UAAU;AACxC"}
@@ -0,0 +1,20 @@
1
+ //#region src/domain/getSessionReplayUrl.ts
2
+ function getSessionReplayUrl(configuration, { session, viewContext, errorType }) {
3
+ const sessionId = session ? session.id : "no-session-id";
4
+ const parameters = [];
5
+ if (errorType !== void 0) parameters.push(`error-type=${errorType}`);
6
+ if (viewContext) {
7
+ parameters.push(`seed=${viewContext.id}`);
8
+ parameters.push(`from=${viewContext.startClocks.timeStamp}`);
9
+ }
10
+ return `${getKubeSenseSiteUrl(configuration)}${`/rum/replay/sessions/${sessionId}`}?${parameters.join("&")}`;
11
+ }
12
+ function getKubeSenseSiteUrl(rumConfiguration) {
13
+ const site = rumConfiguration.kubesenseRumEndpoint;
14
+ const subdomain = rumConfiguration.subdomain;
15
+ return `https://${subdomain ? `${subdomain}.` : ""}${site}`;
16
+ }
17
+ //#endregion
18
+ export { getKubeSenseSiteUrl, getSessionReplayUrl };
19
+
20
+ //# sourceMappingURL=getSessionReplayUrl.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getSessionReplayUrl.mjs","names":[],"sources":["../../src/domain/getSessionReplayUrl.ts"],"sourcesContent":["import type { SessionContext } from '@kubesense/kubesense-browser-core'\nimport type { RumConfiguration } from './configuration'\nimport type { ViewHistoryEntry } from './contexts/viewHistory'\n\nexport function getSessionReplayUrl(\n configuration: RumConfiguration,\n {\n session,\n viewContext,\n errorType,\n }: {\n session?: SessionContext\n viewContext?: ViewHistoryEntry\n errorType?: string\n }\n): string {\n const sessionId = session ? session.id : 'no-session-id'\n const parameters: string[] = []\n if (errorType !== undefined) {\n parameters.push(`error-type=${errorType}`)\n }\n if (viewContext) {\n parameters.push(`seed=${viewContext.id}`)\n parameters.push(`from=${viewContext.startClocks.timeStamp}`)\n }\n\n const origin = getKubeSenseSiteUrl(configuration)\n const path = `/rum/replay/sessions/${sessionId}`\n return `${origin}${path}?${parameters.join('&')}`\n}\n\nexport function getKubeSenseSiteUrl(rumConfiguration: RumConfiguration) {\n // KubeSense installations address the collector host directly, so there is no per-site default\n // subdomain to derive: only an explicitly configured `subdomain` is prepended.\n const site = rumConfiguration.kubesenseRumEndpoint\n const subdomain = rumConfiguration.subdomain\n return `https://${subdomain ? `${subdomain}.` : ''}${site}`\n}\n"],"mappings":";AAIA,SAAgB,oBACd,eACA,EACE,SACA,aACA,aAMM;CACR,MAAM,YAAY,UAAU,QAAQ,KAAK;CACzC,MAAM,aAAuB,CAAC;CAC9B,IAAI,cAAc,KAAA,GAChB,WAAW,KAAK,cAAc,WAAW;CAE3C,IAAI,aAAa;EACf,WAAW,KAAK,QAAQ,YAAY,IAAI;EACxC,WAAW,KAAK,QAAQ,YAAY,YAAY,WAAW;CAC7D;CAIA,OAAO,GAFQ,oBAAoB,aAEpB,IAAI,wBADkB,YACb,GAAG,WAAW,KAAK,GAAG;AAChD;AAEA,SAAgB,oBAAoB,kBAAoC;CAGtE,MAAM,OAAO,iBAAiB;CAC9B,MAAM,YAAY,iBAAiB;CACnC,OAAO,WAAW,YAAY,GAAG,UAAU,KAAK,KAAK;AACvD"}
@@ -0,0 +1,13 @@
1
+ import { createHook } from "@kubesense/kubesense-js-core/assembly";
2
+ //#region src/domain/hooks.ts
3
+ function createHooks() {
4
+ return {
5
+ assembleEventDefaults: createHook(),
6
+ assembleTelemetry: createHook(),
7
+ assembleEvent: createHook()
8
+ };
9
+ }
10
+ //#endregion
11
+ export { createHooks };
12
+
13
+ //# sourceMappingURL=hooks.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks.mjs","names":[],"sources":["../../src/domain/hooks.ts"],"sourcesContent":["import type { Duration, RelativeTime } from '@kubesense/kubesense-js-core/time'\nimport type { TelemetryEvent } from '@kubesense/kubesense-browser-core'\nimport { createHook } from '@kubesense/kubesense-js-core/assembly'\nimport type { Hook } from '@kubesense/kubesense-js-core/assembly'\nimport type { RecursivePartial } from '@kubesense/kubesense-js-core/util'\nimport type { RumEvent } from '../rumEvent.types'\nimport type { RawRumEvent } from '../rawRumEvent.types'\nimport type { RumEventDomainContext } from '../domainContext.types'\n\n// Define a partial RUM event type.\n// Ensuring the `type` field is always present improves type checking, especially in conditional logic in hooks (e.g., `if (eventType === 'view')`).\nexport type DefaultRumEventAttributes = RecursivePartial<RumEvent> & { type: RumEvent['type'] }\nexport type DefaultTelemetryEventAttributes = RecursivePartial<TelemetryEvent>\n\ntype DeepReadonly<T> = {\n readonly [K in keyof T]: DeepReadonly<T[K]>\n}\n\n// Use readonly and DeepReadonly to prevents assemble hook callbacks from mutating the inputs.\n// DeepReadonly is only applied to objects rather than the entire AssembleHookParams to avoid casts for primitives.\nexport interface AssembleHookParams {\n readonly eventType: RumEvent['type']\n rawRumEvent: DeepReadonly<RawRumEvent>\n domainContext: DeepReadonly<RumEventDomainContext<RawRumEvent['type']>>\n readonly startTime: RelativeTime\n readonly duration?: Duration | undefined\n}\n\nexport type AssembleHook = Hook<AssembleHookParams, DefaultRumEventAttributes>\nexport type AssembleTelemetryHook = Hook<{ startTime: RelativeTime }, DefaultTelemetryEventAttributes>\n\nexport interface Hooks {\n assembleEventDefaults: AssembleHook\n assembleTelemetry: AssembleTelemetryHook\n assembleEvent: AssembleHook\n}\n\nexport function createHooks(): Hooks {\n return {\n assembleEventDefaults: createHook(),\n assembleTelemetry: createHook(),\n assembleEvent: createHook(),\n }\n}\n"],"mappings":";;AAqCA,SAAgB,cAAqB;CACnC,OAAO;EACL,uBAAuB,WAAW;EAClC,mBAAmB,WAAW;EAC9B,eAAe,WAAW;CAC5B;AACF"}
@@ -0,0 +1,28 @@
1
+ import { AbstractLifeCycle } from "@kubesense/kubesense-browser-core";
2
+ //#region src/domain/lifeCycle.ts
3
+ let LifeCycleEventType = /* @__PURE__ */ function(LifeCycleEventType) {
4
+ LifeCycleEventType[LifeCycleEventType["AUTO_ACTION_COMPLETED"] = 0] = "AUTO_ACTION_COMPLETED";
5
+ LifeCycleEventType[LifeCycleEventType["BEFORE_VIEW_CREATED"] = 1] = "BEFORE_VIEW_CREATED";
6
+ LifeCycleEventType[LifeCycleEventType["VIEW_CREATED"] = 2] = "VIEW_CREATED";
7
+ LifeCycleEventType[LifeCycleEventType["BEFORE_VIEW_UPDATED"] = 3] = "BEFORE_VIEW_UPDATED";
8
+ LifeCycleEventType[LifeCycleEventType["VIEW_UPDATED"] = 4] = "VIEW_UPDATED";
9
+ LifeCycleEventType[LifeCycleEventType["VIEW_ENDED"] = 5] = "VIEW_ENDED";
10
+ LifeCycleEventType[LifeCycleEventType["AFTER_VIEW_ENDED"] = 6] = "AFTER_VIEW_ENDED";
11
+ LifeCycleEventType[LifeCycleEventType["REQUEST_STARTED"] = 7] = "REQUEST_STARTED";
12
+ LifeCycleEventType[LifeCycleEventType["REQUEST_COMPLETED"] = 8] = "REQUEST_COMPLETED";
13
+ LifeCycleEventType[LifeCycleEventType["WEBSOCKET_COMPLETED"] = 9] = "WEBSOCKET_COMPLETED";
14
+ LifeCycleEventType[LifeCycleEventType["SESSION_EXPIRED"] = 10] = "SESSION_EXPIRED";
15
+ LifeCycleEventType[LifeCycleEventType["SESSION_RENEWED"] = 11] = "SESSION_RENEWED";
16
+ LifeCycleEventType[LifeCycleEventType["PREPARE_URGENT_FLUSH"] = 12] = "PREPARE_URGENT_FLUSH";
17
+ LifeCycleEventType[LifeCycleEventType["RAW_RUM_EVENT_COLLECTED"] = 13] = "RAW_RUM_EVENT_COLLECTED";
18
+ LifeCycleEventType[LifeCycleEventType["RUM_EVENT_COLLECTED"] = 14] = "RUM_EVENT_COLLECTED";
19
+ LifeCycleEventType[LifeCycleEventType["RAW_ERROR_COLLECTED"] = 15] = "RAW_ERROR_COLLECTED";
20
+ LifeCycleEventType[LifeCycleEventType["ACTION_STARTED"] = 16] = "ACTION_STARTED";
21
+ LifeCycleEventType[LifeCycleEventType["DURATION_VITAL_STARTED"] = 17] = "DURATION_VITAL_STARTED";
22
+ return LifeCycleEventType;
23
+ }({});
24
+ const LifeCycle = AbstractLifeCycle;
25
+ //#endregion
26
+ export { LifeCycle, LifeCycleEventType };
27
+
28
+ //# sourceMappingURL=lifeCycle.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lifeCycle.mjs","names":[],"sources":["../../src/domain/lifeCycle.ts"],"sourcesContent":["import type { ClocksState, Duration } from '@kubesense/kubesense-js-core/time'\nimport type { Context, RawError, UrgentFlushReason } from '@kubesense/kubesense-browser-core'\nimport { AbstractLifeCycle } from '@kubesense/kubesense-browser-core'\nimport type { RumEventDomainContext } from '../domainContext.types'\nimport type { RawRumEvent, AssembledRumEvent } from '../rawRumEvent.types'\nimport type { RequestCompleteEvent, RequestStartEvent } from './requestCollection'\nimport type { WebSocketCompleteEvent } from './resource/webSocketCollection'\nimport type { AutoAction } from './action/actionCollection'\nimport type { ViewEvent, ViewCreatedEvent, ViewEndedEvent, BeforeViewUpdateEvent } from './view/trackViews'\nimport type { DurationVitalStart } from './vital/vitalCollection'\nimport type { TrackedEventData } from './eventTracker'\nimport type { ActionEventData } from './action/trackManualActions'\nimport type { SessionExpiredEvent } from './session/session.types'\n\nexport const enum LifeCycleEventType {\n // Contexts (like viewHistory) should be opened using prefixed BEFORE_XXX events and closed using prefixed AFTER_XXX events\n // It ensures the context is available during the non prefixed event callbacks\n AUTO_ACTION_COMPLETED,\n BEFORE_VIEW_CREATED,\n VIEW_CREATED,\n BEFORE_VIEW_UPDATED,\n VIEW_UPDATED,\n VIEW_ENDED,\n AFTER_VIEW_ENDED,\n REQUEST_STARTED,\n REQUEST_COMPLETED,\n WEBSOCKET_COMPLETED,\n\n // The SESSION_EXPIRED lifecycle event has been introduced to represent when a session has expired\n // and trigger cleanup tasks related to this, prior to renewing the session. Its implementation is\n // slightly naive: it is not triggered as soon as the session is expired, but rather just before\n // notifying that the session is renewed. Thus, the session id is already set to the newly renewed\n // session.\n //\n // This implementation is \"good enough\" for our use-cases. Improving this is not trivial,\n // primarily because multiple instances of the SDK may be managing the same session cookie at\n // the same time, for example when using Logs and RUM on the same page, or opening multiple tabs\n // on the same domain.\n SESSION_EXPIRED,\n SESSION_RENEWED,\n PREPARE_URGENT_FLUSH,\n RAW_RUM_EVENT_COLLECTED,\n RUM_EVENT_COLLECTED,\n RAW_ERROR_COLLECTED,\n ACTION_STARTED,\n DURATION_VITAL_STARTED,\n}\n\n// This is a workaround for an issue occurring when the Browser SDK is included in a TypeScript\n// project configured with `isolatedModules: true`. Even if the const enum is declared in this\n// module, we cannot use it directly to define the EventMap interface keys (TS error: \"Cannot access\n// ambient const enums when the '--isolatedModules' flag is provided.\").\n//\n// Using a plain enum would fix the issue, but would also add 2KB to the minified bundle. By using\n// this workaround, we can keep using a const enum without impacting the bundle size (since it is a\n// \"declare\" statement, it will only be used during typecheck and completely ignored when building\n// JavaScript).\n//\n// See issues:\n// * https://github.com/microsoft/TypeScript/issues/54152\ndeclare const LifeCycleEventTypeAsConst: {\n ACTION_STARTED: LifeCycleEventType.ACTION_STARTED\n AUTO_ACTION_COMPLETED: LifeCycleEventType.AUTO_ACTION_COMPLETED\n BEFORE_VIEW_CREATED: LifeCycleEventType.BEFORE_VIEW_CREATED\n VIEW_CREATED: LifeCycleEventType.VIEW_CREATED\n BEFORE_VIEW_UPDATED: LifeCycleEventType.BEFORE_VIEW_UPDATED\n VIEW_UPDATED: LifeCycleEventType.VIEW_UPDATED\n VIEW_ENDED: LifeCycleEventType.VIEW_ENDED\n AFTER_VIEW_ENDED: LifeCycleEventType.AFTER_VIEW_ENDED\n REQUEST_STARTED: LifeCycleEventType.REQUEST_STARTED\n REQUEST_COMPLETED: LifeCycleEventType.REQUEST_COMPLETED\n WEBSOCKET_COMPLETED: LifeCycleEventType.WEBSOCKET_COMPLETED\n SESSION_EXPIRED: LifeCycleEventType.SESSION_EXPIRED\n SESSION_RENEWED: LifeCycleEventType.SESSION_RENEWED\n PREPARE_URGENT_FLUSH: LifeCycleEventType.PREPARE_URGENT_FLUSH\n RAW_RUM_EVENT_COLLECTED: LifeCycleEventType.RAW_RUM_EVENT_COLLECTED\n RUM_EVENT_COLLECTED: LifeCycleEventType.RUM_EVENT_COLLECTED\n RAW_ERROR_COLLECTED: LifeCycleEventType.RAW_ERROR_COLLECTED\n DURATION_VITAL_STARTED: LifeCycleEventType.DURATION_VITAL_STARTED\n}\n\n// Note: this interface needs to be exported even if it is not used outside of this module, else TS\n// fails to build the rum-core package with error TS4058\nexport interface LifeCycleEventMap {\n [LifeCycleEventTypeAsConst.ACTION_STARTED]: TrackedEventData<ActionEventData>\n [LifeCycleEventTypeAsConst.AUTO_ACTION_COMPLETED]: AutoAction\n [LifeCycleEventTypeAsConst.BEFORE_VIEW_CREATED]: ViewCreatedEvent\n [LifeCycleEventTypeAsConst.VIEW_CREATED]: ViewCreatedEvent\n [LifeCycleEventTypeAsConst.BEFORE_VIEW_UPDATED]: BeforeViewUpdateEvent\n [LifeCycleEventTypeAsConst.VIEW_UPDATED]: ViewEvent\n [LifeCycleEventTypeAsConst.VIEW_ENDED]: ViewEndedEvent\n [LifeCycleEventTypeAsConst.AFTER_VIEW_ENDED]: ViewEndedEvent\n [LifeCycleEventTypeAsConst.REQUEST_STARTED]: RequestStartEvent\n [LifeCycleEventTypeAsConst.REQUEST_COMPLETED]: RequestCompleteEvent\n [LifeCycleEventTypeAsConst.WEBSOCKET_COMPLETED]: WebSocketCompleteEvent\n [LifeCycleEventTypeAsConst.SESSION_EXPIRED]: SessionExpiredEvent\n [LifeCycleEventTypeAsConst.SESSION_RENEWED]: void\n [LifeCycleEventTypeAsConst.PREPARE_URGENT_FLUSH]: UrgentFlushReason\n [LifeCycleEventTypeAsConst.RAW_RUM_EVENT_COLLECTED]: RawRumEventCollectedData\n [LifeCycleEventTypeAsConst.RUM_EVENT_COLLECTED]: AssembledRumEvent\n [LifeCycleEventTypeAsConst.RAW_ERROR_COLLECTED]: {\n error: RawError\n customerContext?: Context\n }\n [LifeCycleEventTypeAsConst.DURATION_VITAL_STARTED]: DurationVitalStart\n}\n\nexport interface RawRumEventCollectedData<E extends RawRumEvent = RawRumEvent> {\n startClocks: ClocksState\n duration?: Duration\n rawRumEvent: E\n domainContext: RumEventDomainContext<E['type']>\n}\n\nexport const LifeCycle = AbstractLifeCycle<LifeCycleEventMap>\nexport type LifeCycle = AbstractLifeCycle<LifeCycleEventMap>\n"],"mappings":";;AAcA,IAAkB,qBAAX,yBAAA,oBAAA;CAGL,mBAAA,mBAAA,2BAAA,KAAA;CACA,mBAAA,mBAAA,yBAAA,KAAA;CACA,mBAAA,mBAAA,kBAAA,KAAA;CACA,mBAAA,mBAAA,yBAAA,KAAA;CACA,mBAAA,mBAAA,kBAAA,KAAA;CACA,mBAAA,mBAAA,gBAAA,KAAA;CACA,mBAAA,mBAAA,sBAAA,KAAA;CACA,mBAAA,mBAAA,qBAAA,KAAA;CACA,mBAAA,mBAAA,uBAAA,KAAA;CACA,mBAAA,mBAAA,yBAAA,KAAA;CAYA,mBAAA,mBAAA,qBAAA,MAAA;CACA,mBAAA,mBAAA,qBAAA,MAAA;CACA,mBAAA,mBAAA,0BAAA,MAAA;CACA,mBAAA,mBAAA,6BAAA,MAAA;CACA,mBAAA,mBAAA,yBAAA,MAAA;CACA,mBAAA,mBAAA,yBAAA,MAAA;CACA,mBAAA,mBAAA,oBAAA,MAAA;CACA,mBAAA,mBAAA,4BAAA,MAAA;;AACF,EAAA,CAAA,CAAA;AAoEA,MAAa,YAAY"}
@@ -0,0 +1,42 @@
1
+ import { deepClone, getType } from "@kubesense/kubesense-js-core/util";
2
+ import { objectEntries, sanitize } from "@kubesense/kubesense-browser-core";
3
+ //#region src/domain/limitModification.ts
4
+ /**
5
+ * Allows declaring and enforcing modifications to specific fields of an object.
6
+ * Only supports modifying properties of an object (even if nested in an array).
7
+ * Does not support array manipulation (adding/removing items).
8
+ *
9
+ * Modifications of the object are sanitized only if the field was actually changed by the modifier function (i.e., value is different).
10
+ * This ensures consistent SDK behavior regardless of whether limitModification is called.
11
+ * Only string fields are handled this way, object fields are sanitized regardless of whether the modifier function was called or not.
12
+ */
13
+ function limitModification(object, modifiableFieldPaths, modifier) {
14
+ const clone = deepClone(object);
15
+ const result = modifier(clone);
16
+ objectEntries(modifiableFieldPaths).forEach(([fieldPath, fieldType]) => setValueAtPath(object, clone, fieldPath.split(/\.|(?=\[\])/), fieldType));
17
+ return result;
18
+ }
19
+ function setValueAtPath(object, clone, pathSegments, fieldType) {
20
+ const [field, ...restPathSegments] = pathSegments;
21
+ if (field === "[]") {
22
+ if (Array.isArray(object) && Array.isArray(clone)) object.forEach((item, i) => setValueAtPath(item, clone[i], restPathSegments, fieldType));
23
+ return;
24
+ }
25
+ if (!isValidObject(object) || !isValidObject(clone)) return;
26
+ if (restPathSegments.length > 0) return setValueAtPath(object[field], clone[field], restPathSegments, fieldType);
27
+ setNestedValue(object, field, clone[field], fieldType);
28
+ }
29
+ function setNestedValue(object, field, value, fieldType) {
30
+ if (object[field] === value) return;
31
+ const newType = getType(value);
32
+ if (newType === fieldType) object[field] = sanitize(value);
33
+ else if (fieldType === "object" && (newType === "undefined" || newType === "null")) object[field] = {};
34
+ else if (fieldType === "array" && (newType === "undefined" || newType === "null")) object[field] = [];
35
+ }
36
+ function isValidObject(object) {
37
+ return getType(object) === "object";
38
+ }
39
+ //#endregion
40
+ export { limitModification };
41
+
42
+ //# sourceMappingURL=limitModification.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"limitModification.mjs","names":[],"sources":["../../src/domain/limitModification.ts"],"sourcesContent":["import { sanitize, objectEntries } from '@kubesense/kubesense-browser-core'\nimport type { Context } from '@kubesense/kubesense-browser-core'\nimport { deepClone, getType } from '@kubesense/kubesense-js-core/util'\n\nexport type ModifiableFieldPaths = Record<string, 'string' | 'object' | 'array'>\n\n/**\n * Allows declaring and enforcing modifications to specific fields of an object.\n * Only supports modifying properties of an object (even if nested in an array).\n * Does not support array manipulation (adding/removing items).\n *\n * Modifications of the object are sanitized only if the field was actually changed by the modifier function (i.e., value is different).\n * This ensures consistent SDK behavior regardless of whether limitModification is called.\n * Only string fields are handled this way, object fields are sanitized regardless of whether the modifier function was called or not.\n */\nexport function limitModification<T extends Context, Result>(\n object: T,\n modifiableFieldPaths: ModifiableFieldPaths,\n modifier: (object: T) => Result\n): Result | undefined {\n const clone = deepClone(object)\n const result = modifier(clone)\n\n objectEntries(modifiableFieldPaths).forEach(([fieldPath, fieldType]) =>\n // Traverse both object and clone simultaneously up to the path and apply the modification from the clone to the original object when the type is valid\n setValueAtPath(object, clone, fieldPath.split(/\\.|(?=\\[\\])/), fieldType)\n )\n\n return result\n}\n\nfunction setValueAtPath(\n object: unknown,\n clone: unknown,\n pathSegments: string[],\n fieldType: 'string' | 'object' | 'array'\n) {\n const [field, ...restPathSegments] = pathSegments\n\n if (field === '[]') {\n if (Array.isArray(object) && Array.isArray(clone)) {\n object.forEach((item, i) => setValueAtPath(item, clone[i], restPathSegments, fieldType))\n }\n\n return\n }\n\n if (!isValidObject(object) || !isValidObject(clone)) {\n return\n }\n\n if (restPathSegments.length > 0) {\n return setValueAtPath(object[field], clone[field], restPathSegments, fieldType)\n }\n\n setNestedValue(object, field, clone[field], fieldType)\n}\n\nfunction setNestedValue(\n object: Record<string, unknown>,\n field: string,\n value: unknown,\n fieldType: 'string' | 'object' | 'array'\n) {\n if (object[field] === value) {\n return\n }\n\n const newType = getType(value)\n\n if (newType === fieldType) {\n object[field] = sanitize(value)\n } else if (fieldType === 'object' && (newType === 'undefined' || newType === 'null')) {\n object[field] = {}\n } else if (fieldType === 'array' && (newType === 'undefined' || newType === 'null')) {\n object[field] = []\n }\n}\n\nfunction isValidObject(object: unknown): object is Record<string, unknown> {\n return getType(object) === 'object'\n}\n"],"mappings":";;;;;;;;;;;;AAeA,SAAgB,kBACd,QACA,sBACA,UACoB;CACpB,MAAM,QAAQ,UAAU,MAAM;CAC9B,MAAM,SAAS,SAAS,KAAK;CAE7B,cAAc,oBAAoB,CAAC,CAAC,SAAS,CAAC,WAAW,eAEvD,eAAe,QAAQ,OAAO,UAAU,MAAM,aAAa,GAAG,SAAS,CACzE;CAEA,OAAO;AACT;AAEA,SAAS,eACP,QACA,OACA,cACA,WACA;CACA,MAAM,CAAC,OAAO,GAAG,oBAAoB;CAErC,IAAI,UAAU,MAAM;EAClB,IAAI,MAAM,QAAQ,MAAM,KAAK,MAAM,QAAQ,KAAK,GAC9C,OAAO,SAAS,MAAM,MAAM,eAAe,MAAM,MAAM,IAAI,kBAAkB,SAAS,CAAC;EAGzF;CACF;CAEA,IAAI,CAAC,cAAc,MAAM,KAAK,CAAC,cAAc,KAAK,GAChD;CAGF,IAAI,iBAAiB,SAAS,GAC5B,OAAO,eAAe,OAAO,QAAQ,MAAM,QAAQ,kBAAkB,SAAS;CAGhF,eAAe,QAAQ,OAAO,MAAM,QAAQ,SAAS;AACvD;AAEA,SAAS,eACP,QACA,OACA,OACA,WACA;CACA,IAAI,OAAO,WAAW,OACpB;CAGF,MAAM,UAAU,QAAQ,KAAK;CAE7B,IAAI,YAAY,WACd,OAAO,SAAS,SAAS,KAAK;MACzB,IAAI,cAAc,aAAa,YAAY,eAAe,YAAY,SAC3E,OAAO,SAAS,CAAC;MACZ,IAAI,cAAc,YAAY,YAAY,eAAe,YAAY,SAC1E,OAAO,SAAS,CAAC;AAErB;AAEA,SAAS,cAAc,QAAoD;CACzE,OAAO,QAAQ,MAAM,MAAM;AAC7B"}
@@ -0,0 +1,79 @@
1
+ import { RumEventType, RumLongTaskEntryType } from "../../rawRumEvent.types.mjs";
2
+ import "../lifeCycle.mjs";
3
+ import { createPerformanceObservable, supportPerformanceTimingEvent } from "../../browser/performanceObservable.mjs";
4
+ import { relativeToClocks, toServerDuration } from "@kubesense/kubesense-js-core/time";
5
+ import { buildDebugIdByUrl, generateUUID } from "@kubesense/kubesense-browser-core";
6
+ //#region src/domain/longTask/longTaskCollection.ts
7
+ function startLongTaskCollection(lifeCycle, configuration) {
8
+ const entryType = supportPerformanceTimingEvent("long-animation-frame") ? "long-animation-frame" : "longtask";
9
+ const subscription = createPerformanceObservable({
10
+ type: entryType,
11
+ buffered: true
12
+ }).subscribe((entries) => {
13
+ for (const entry of entries) {
14
+ if (!configuration.trackLongTasks) break;
15
+ const startClocks = relativeToClocks(entry.startTime);
16
+ const rawRumEvent = processEntry(entry, startClocks);
17
+ lifeCycle.notify(13, {
18
+ rawRumEvent,
19
+ startClocks,
20
+ duration: entry.duration,
21
+ domainContext: { performanceEntry: entry }
22
+ });
23
+ }
24
+ });
25
+ return { stop: () => subscription.unsubscribe() };
26
+ }
27
+ function processEntry(entry, startClocks) {
28
+ const id = generateUUID();
29
+ const duration = toServerDuration(entry.duration);
30
+ const baseEvent = {
31
+ date: startClocks.timeStamp,
32
+ type: RumEventType.LONG_TASK,
33
+ _kubesense: { discarded: false }
34
+ };
35
+ if (entry.entryType === "longtask") return {
36
+ ...baseEvent,
37
+ long_task: {
38
+ id,
39
+ entry_type: RumLongTaskEntryType.LONG_TASK,
40
+ duration
41
+ }
42
+ };
43
+ const scriptUrls = entry.scripts.map((script) => script.sourceURL).filter((url) => !!url);
44
+ const debugIdByUrl = buildDebugIdByUrl(scriptUrls);
45
+ return {
46
+ ...baseEvent,
47
+ _kubesense: {
48
+ discarded: false,
49
+ debug_ids: debugIdByUrl
50
+ },
51
+ long_task: {
52
+ id,
53
+ entry_type: RumLongTaskEntryType.LONG_ANIMATION_FRAME,
54
+ duration,
55
+ blocking_duration: toServerDuration(entry.blockingDuration),
56
+ first_ui_event_timestamp: toServerDuration(entry.firstUIEventTimestamp),
57
+ render_start: toServerDuration(entry.renderStart),
58
+ style_and_layout_start: toServerDuration(entry.styleAndLayoutStart),
59
+ start_time: toServerDuration(entry.startTime),
60
+ scripts: entry.scripts.map((script) => ({
61
+ duration: toServerDuration(script.duration),
62
+ pause_duration: toServerDuration(script.pauseDuration),
63
+ forced_style_and_layout_duration: toServerDuration(script.forcedStyleAndLayoutDuration),
64
+ start_time: toServerDuration(script.startTime),
65
+ execution_start: toServerDuration(script.executionStart),
66
+ source_url: script.sourceURL,
67
+ source_function_name: script.sourceFunctionName,
68
+ source_char_position: script.sourceCharPosition,
69
+ invoker: script.invoker,
70
+ invoker_type: script.invokerType,
71
+ window_attribution: script.windowAttribution
72
+ }))
73
+ }
74
+ };
75
+ }
76
+ //#endregion
77
+ export { startLongTaskCollection };
78
+
79
+ //# sourceMappingURL=longTaskCollection.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"longTaskCollection.mjs","names":[],"sources":["../../../src/domain/longTask/longTaskCollection.ts"],"sourcesContent":["import type { ClocksState } from '@kubesense/kubesense-js-core/time'\nimport { toServerDuration, relativeToClocks } from '@kubesense/kubesense-js-core/time'\nimport { generateUUID, buildDebugIdByUrl } from '@kubesense/kubesense-browser-core'\nimport type { RawRumLongTaskEvent, RawRumLongAnimationFrameEvent } from '../../rawRumEvent.types'\nimport { RumEventType, RumLongTaskEntryType } from '../../rawRumEvent.types'\nimport type { LifeCycle } from '../lifeCycle'\nimport { LifeCycleEventType } from '../lifeCycle'\nimport {\n createPerformanceObservable,\n RumPerformanceEntryType,\n supportPerformanceTimingEvent,\n} from '../../browser/performanceObservable'\nimport type {\n RumPerformanceLongAnimationFrameTiming,\n RumPerformanceLongTaskTiming,\n RumPerformanceScriptTiming,\n} from '../../browser/performanceObservable'\nimport type { RumConfiguration } from '../configuration'\n\nexport function startLongTaskCollection(lifeCycle: LifeCycle, configuration: RumConfiguration) {\n const entryType = supportPerformanceTimingEvent(RumPerformanceEntryType.LONG_ANIMATION_FRAME)\n ? RumPerformanceEntryType.LONG_ANIMATION_FRAME\n : RumPerformanceEntryType.LONG_TASK\n\n const subscription = createPerformanceObservable({\n type: entryType,\n buffered: true,\n }).subscribe((entries) => {\n for (const entry of entries) {\n if (!configuration.trackLongTasks) {\n break\n }\n\n const startClocks = relativeToClocks(entry.startTime)\n const rawRumEvent = processEntry(entry, startClocks)\n\n lifeCycle.notify(LifeCycleEventType.RAW_RUM_EVENT_COLLECTED, {\n rawRumEvent,\n startClocks,\n duration: entry.duration,\n domainContext: { performanceEntry: entry },\n })\n }\n })\n\n return {\n stop: () => subscription.unsubscribe(),\n }\n}\n\nfunction processEntry(\n entry: RumPerformanceLongTaskTiming | RumPerformanceLongAnimationFrameTiming,\n startClocks: ClocksState\n): RawRumLongTaskEvent | RawRumLongAnimationFrameEvent {\n const id = generateUUID()\n const duration = toServerDuration(entry.duration)\n\n const baseEvent = {\n date: startClocks.timeStamp,\n type: RumEventType.LONG_TASK,\n _kubesense: { discarded: false },\n }\n\n if (entry.entryType === RumPerformanceEntryType.LONG_TASK) {\n return {\n ...baseEvent,\n long_task: {\n id,\n entry_type: RumLongTaskEntryType.LONG_TASK,\n duration,\n },\n }\n }\n const scriptUrls = entry.scripts.map((script) => script.sourceURL).filter((url): url is string => !!url)\n const debugIdByUrl = buildDebugIdByUrl(scriptUrls)\n\n return {\n ...baseEvent,\n _kubesense: { discarded: false, debug_ids: debugIdByUrl },\n long_task: {\n id,\n entry_type: RumLongTaskEntryType.LONG_ANIMATION_FRAME,\n duration,\n blocking_duration: toServerDuration(entry.blockingDuration),\n first_ui_event_timestamp: toServerDuration(entry.firstUIEventTimestamp),\n render_start: toServerDuration(entry.renderStart),\n style_and_layout_start: toServerDuration(entry.styleAndLayoutStart),\n start_time: toServerDuration(entry.startTime),\n scripts: entry.scripts.map((script: RumPerformanceScriptTiming) => ({\n duration: toServerDuration(script.duration),\n pause_duration: toServerDuration(script.pauseDuration),\n forced_style_and_layout_duration: toServerDuration(script.forcedStyleAndLayoutDuration),\n start_time: toServerDuration(script.startTime),\n execution_start: toServerDuration(script.executionStart),\n source_url: script.sourceURL,\n source_function_name: script.sourceFunctionName,\n source_char_position: script.sourceCharPosition,\n invoker: script.invoker,\n invoker_type: script.invokerType,\n window_attribution: script.windowAttribution,\n })),\n },\n }\n}\n"],"mappings":";;;;;;AAmBA,SAAgB,wBAAwB,WAAsB,eAAiC;CAC7F,MAAM,YAAY,8BAAA,sBAA0E,IAAA,yBAAA;CAI5F,MAAM,eAAe,4BAA4B;EAC/C,MAAM;EACN,UAAU;CACZ,CAAC,CAAC,CAAC,WAAW,YAAY;EACxB,KAAK,MAAM,SAAS,SAAS;GAC3B,IAAI,CAAC,cAAc,gBACjB;GAGF,MAAM,cAAc,iBAAiB,MAAM,SAAS;GACpD,MAAM,cAAc,aAAa,OAAO,WAAW;GAEnD,UAAU,OAAA,IAAmD;IAC3D;IACA;IACA,UAAU,MAAM;IAChB,eAAe,EAAE,kBAAkB,MAAM;GAC3C,CAAC;EACH;CACF,CAAC;CAED,OAAO,EACL,YAAY,aAAa,YAAY,EACvC;AACF;AAEA,SAAS,aACP,OACA,aACqD;CACrD,MAAM,KAAK,aAAa;CACxB,MAAM,WAAW,iBAAiB,MAAM,QAAQ;CAEhD,MAAM,YAAY;EAChB,MAAM,YAAY;EAClB,MAAM,aAAa;EACnB,YAAY,EAAE,WAAW,MAAM;CACjC;CAEA,IAAI,MAAM,cAAA,YACR,OAAO;EACL,GAAG;EACH,WAAW;GACT;GACA,YAAY,qBAAqB;GACjC;EACF;CACF;CAEF,MAAM,aAAa,MAAM,QAAQ,KAAK,WAAW,OAAO,SAAS,CAAC,CAAC,QAAQ,QAAuB,CAAC,CAAC,GAAG;CACvG,MAAM,eAAe,kBAAkB,UAAU;CAEjD,OAAO;EACL,GAAG;EACH,YAAY;GAAE,WAAW;GAAO,WAAW;EAAa;EACxD,WAAW;GACT;GACA,YAAY,qBAAqB;GACjC;GACA,mBAAmB,iBAAiB,MAAM,gBAAgB;GAC1D,0BAA0B,iBAAiB,MAAM,qBAAqB;GACtE,cAAc,iBAAiB,MAAM,WAAW;GAChD,wBAAwB,iBAAiB,MAAM,mBAAmB;GAClE,YAAY,iBAAiB,MAAM,SAAS;GAC5C,SAAS,MAAM,QAAQ,KAAK,YAAwC;IAClE,UAAU,iBAAiB,OAAO,QAAQ;IAC1C,gBAAgB,iBAAiB,OAAO,aAAa;IACrD,kCAAkC,iBAAiB,OAAO,4BAA4B;IACtF,YAAY,iBAAiB,OAAO,SAAS;IAC7C,iBAAiB,iBAAiB,OAAO,cAAc;IACvD,YAAY,OAAO;IACnB,sBAAsB,OAAO;IAC7B,sBAAsB,OAAO;IAC7B,SAAS,OAAO;IAChB,cAAc,OAAO;IACrB,oBAAoB,OAAO;GAC7B,EAAE;EACJ;CACF;AACF"}
@@ -0,0 +1,23 @@
1
+ import { isThenable } from "@kubesense/kubesense-browser-core";
2
+ //#region src/domain/plugins.ts
3
+ /**
4
+ * Calls every plugin's `onInit` method concurrently, without waiting for one to resolve before
5
+ * calling the next. Stays synchronous as long as no plugin returns a thenable.
6
+ * Returns `false` if any plugin returned (or resolved to) `false`, `true` otherwise.
7
+ */
8
+ function callPluginsOnInit(plugins, parameter) {
9
+ if (!plugins) return true;
10
+ const results = plugins.map((plugin) => plugin.onInit?.(parameter));
11
+ if (results.some(isThenable)) return Promise.all(results).then((results) => !results.includes(false));
12
+ return !results.includes(false);
13
+ }
14
+ /**
15
+ * Calls each plugin's `onRumStart` method in order.
16
+ */
17
+ function callPluginsOnRumStart(plugins, options) {
18
+ for (const plugin of plugins ?? []) plugin.onRumStart?.(options);
19
+ }
20
+ //#endregion
21
+ export { callPluginsOnInit, callPluginsOnRumStart };
22
+
23
+ //# sourceMappingURL=plugins.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugins.mjs","names":[],"sources":["../../src/domain/plugins.ts"],"sourcesContent":["import { isThenable } from '@kubesense/kubesense-browser-core'\nimport type { RumPublicApi } from '../boot/rumPublicApi'\nimport type { StartRumResult } from '../boot/startRum'\nimport type { RumInitConfiguration } from './configuration'\nimport type { AssembleHook } from './hooks'\n\n/**\n * onInit plugin API options.\n *\n * @experimental\n */\nexport interface RumPluginOnInitOptions {\n initConfiguration: RumInitConfiguration\n publicApi: RumPublicApi\n /**\n * Register a callback invoked when a RUM event is assembled, so plugins can enrich or override\n * event fields before they are sent. Callbacks registered in `onInit` run before any event is\n * assembled, including events buffered during the pre-start phase.\n */\n registerAssembleEventHook: AssembleHook['register']\n}\n\n/**\n * onRumStart plugin API options.\n *\n * @experimental\n */\nexport interface OnRumStartOptions {\n /**\n * Add an event to the RUM browser SDK.\n */\n addEvent?: StartRumResult['addEvent']\n /**\n * Add a custom error to the RUM browser SDK.\n */\n addError?: StartRumResult['addError']\n}\n\n/**\n * Plugin interface of the RUM browser SDK.\n *\n * The plugins API is unstable and experimental, and may change without\n * notice. Please use only plugins provided by KubeSense matching the version of the SDK you are\n * using.\n *\n * `onInit` may abort the SDK initialization by returning (or resolving to) `false`. All plugins'\n * `onInit` are called concurrently and independently; a Promise defers the actual initialization\n * until it resolves, but does not delay any other plugin's `onInit` call.\n *\n * @experimental\n */\nexport interface RumPlugin {\n name: string\n getConfigurationTelemetry?(): Record<string, unknown>\n onInit?(options: RumPluginOnInitOptions): false | void | Promise<false | void>\n onRumStart?(options: OnRumStartOptions): void\n}\n\n/**\n * Calls every plugin's `onInit` method concurrently, without waiting for one to resolve before\n * calling the next. Stays synchronous as long as no plugin returns a thenable.\n * Returns `false` if any plugin returned (or resolved to) `false`, `true` otherwise.\n */\nexport function callPluginsOnInit(\n plugins: RumPlugin[] | undefined,\n parameter: RumPluginOnInitOptions\n): boolean | Promise<boolean> {\n if (!plugins) {\n return true\n }\n\n const results = plugins.map((plugin) => plugin.onInit?.(parameter))\n\n if (results.some(isThenable)) {\n return Promise.all(results as Array<Promise<false | void>>).then((results) => !results.includes(false))\n }\n\n return !results.includes(false)\n}\n\n/**\n * Calls each plugin's `onRumStart` method in order.\n */\nexport function callPluginsOnRumStart(plugins: RumPlugin[] | undefined, options: OnRumStartOptions): void {\n for (const plugin of plugins ?? []) {\n plugin.onRumStart?.(options)\n }\n}\n"],"mappings":";;;;;;;AA+DA,SAAgB,kBACd,SACA,WAC4B;CAC5B,IAAI,CAAC,SACH,OAAO;CAGT,MAAM,UAAU,QAAQ,KAAK,WAAW,OAAO,SAAS,SAAS,CAAC;CAElE,IAAI,QAAQ,KAAK,UAAU,GACzB,OAAO,QAAQ,IAAI,OAAuC,CAAC,CAAC,MAAM,YAAY,CAAC,QAAQ,SAAS,KAAK,CAAC;CAGxG,OAAO,CAAC,QAAQ,SAAS,KAAK;AAChC;;;;AAKA,SAAgB,sBAAsB,SAAkC,SAAkC;CACxG,KAAK,MAAM,UAAU,WAAW,CAAC,GAC/B,OAAO,aAAa,OAAO;AAE/B"}