@depup/datadog__browser-rum 6.31.0-depup.0

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 (688) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +25 -0
  3. package/bundle/chunks/profiler-9f1c1103f1ef0aa98257-datadog-rum.js +1 -0
  4. package/bundle/chunks/recorder-926b641c6ef51d09a378-datadog-rum.js +1 -0
  5. package/bundle/datadog-rum.js +1 -0
  6. package/changes.json +5 -0
  7. package/cjs/boot/isBrowserSupported.d.ts +4 -0
  8. package/cjs/boot/isBrowserSupported.js +17 -0
  9. package/cjs/boot/isBrowserSupported.js.map +1 -0
  10. package/cjs/boot/lazyLoadProfiler.d.ts +3 -0
  11. package/cjs/boot/lazyLoadProfiler.js +56 -0
  12. package/cjs/boot/lazyLoadProfiler.js.map +1 -0
  13. package/cjs/boot/lazyLoadRecorder.d.ts +3 -0
  14. package/cjs/boot/lazyLoadRecorder.js +56 -0
  15. package/cjs/boot/lazyLoadRecorder.js.map +1 -0
  16. package/cjs/boot/postStartStrategy.d.ts +33 -0
  17. package/cjs/boot/postStartStrategy.js +98 -0
  18. package/cjs/boot/postStartStrategy.js.map +1 -0
  19. package/cjs/boot/preStartStrategy.d.ts +6 -0
  20. package/cjs/boot/preStartStrategy.js +24 -0
  21. package/cjs/boot/preStartStrategy.js.map +1 -0
  22. package/cjs/boot/profilerApi.d.ts +2 -0
  23. package/cjs/boot/profilerApi.js +52 -0
  24. package/cjs/boot/profilerApi.js.map +1 -0
  25. package/cjs/boot/recorderApi.d.ts +3 -0
  26. package/cjs/boot/recorderApi.js +71 -0
  27. package/cjs/boot/recorderApi.js.map +1 -0
  28. package/cjs/boot/startRecording.d.ts +6 -0
  29. package/cjs/boot/startRecording.js +45 -0
  30. package/cjs/boot/startRecording.js.map +1 -0
  31. package/cjs/domain/deflate/deflateEncoder.d.ts +3 -0
  32. package/cjs/domain/deflate/deflateEncoder.js +110 -0
  33. package/cjs/domain/deflate/deflateEncoder.js.map +1 -0
  34. package/cjs/domain/deflate/deflateWorker.d.ts +29 -0
  35. package/cjs/domain/deflate/deflateWorker.js +105 -0
  36. package/cjs/domain/deflate/deflateWorker.js.map +1 -0
  37. package/cjs/domain/deflate/index.d.ts +3 -0
  38. package/cjs/domain/deflate/index.js +11 -0
  39. package/cjs/domain/deflate/index.js.map +1 -0
  40. package/cjs/domain/getSessionReplayLink.d.ts +2 -0
  41. package/cjs/domain/getSessionReplayLink.js +35 -0
  42. package/cjs/domain/getSessionReplayLink.js.map +1 -0
  43. package/cjs/domain/profiling/actionHistory.d.ts +10 -0
  44. package/cjs/domain/profiling/actionHistory.js +49 -0
  45. package/cjs/domain/profiling/actionHistory.js.map +1 -0
  46. package/cjs/domain/profiling/longTaskHistory.d.ts +11 -0
  47. package/cjs/domain/profiling/longTaskHistory.js +28 -0
  48. package/cjs/domain/profiling/longTaskHistory.js.map +1 -0
  49. package/cjs/domain/profiling/profiler.d.ts +7 -0
  50. package/cjs/domain/profiling/profiler.js +267 -0
  51. package/cjs/domain/profiling/profiler.js.map +1 -0
  52. package/cjs/domain/profiling/profilingContext.d.ts +6 -0
  53. package/cjs/domain/profiling/profilingContext.js +31 -0
  54. package/cjs/domain/profiling/profilingContext.js.map +1 -0
  55. package/cjs/domain/profiling/profilingSupported.d.ts +1 -0
  56. package/cjs/domain/profiling/profilingSupported.js +11 -0
  57. package/cjs/domain/profiling/profilingSupported.js.map +1 -0
  58. package/cjs/domain/profiling/test-utils/mockedTrace.d.ts +3 -0
  59. package/cjs/domain/profiling/test-utils/mockedTrace.js +57 -0
  60. package/cjs/domain/profiling/test-utils/mockedTrace.js.map +1 -0
  61. package/cjs/domain/profiling/transport/assembly.d.ts +7 -0
  62. package/cjs/domain/profiling/transport/assembly.js +45 -0
  63. package/cjs/domain/profiling/transport/assembly.js.map +1 -0
  64. package/cjs/domain/profiling/transport/buildProfileEventAttributes.d.ts +33 -0
  65. package/cjs/domain/profiling/transport/buildProfileEventAttributes.js +63 -0
  66. package/cjs/domain/profiling/transport/buildProfileEventAttributes.js.map +1 -0
  67. package/cjs/domain/profiling/types/index.d.ts +2 -0
  68. package/cjs/domain/profiling/types/index.js +3 -0
  69. package/cjs/domain/profiling/types/index.js.map +1 -0
  70. package/cjs/domain/profiling/types/profilerApi.types.d.ts +58 -0
  71. package/cjs/domain/profiling/types/profilerApi.types.js +5 -0
  72. package/cjs/domain/profiling/types/profilerApi.types.js.map +1 -0
  73. package/cjs/domain/profiling/types/rumProfiler.types.d.ts +55 -0
  74. package/cjs/domain/profiling/types/rumProfiler.types.js +3 -0
  75. package/cjs/domain/profiling/types/rumProfiler.types.js.map +1 -0
  76. package/cjs/domain/profiling/utils/getCustomOrDefaultViewName.d.ts +1 -0
  77. package/cjs/domain/profiling/utils/getCustomOrDefaultViewName.js +7 -0
  78. package/cjs/domain/profiling/utils/getCustomOrDefaultViewName.js.map +1 -0
  79. package/cjs/domain/profiling/utils/getDefaultViewName.d.ts +1 -0
  80. package/cjs/domain/profiling/utils/getDefaultViewName.js +14 -0
  81. package/cjs/domain/profiling/utils/getDefaultViewName.js.map +1 -0
  82. package/cjs/domain/profiling/utils/getNumberOfSamples.d.ts +8 -0
  83. package/cjs/domain/profiling/utils/getNumberOfSamples.js +19 -0
  84. package/cjs/domain/profiling/utils/getNumberOfSamples.js.map +1 -0
  85. package/cjs/domain/profiling/vitalHistory.d.ts +10 -0
  86. package/cjs/domain/profiling/vitalHistory.js +42 -0
  87. package/cjs/domain/profiling/vitalHistory.js.map +1 -0
  88. package/cjs/domain/record/assembly.d.ts +3 -0
  89. package/cjs/domain/record/assembly.js +16 -0
  90. package/cjs/domain/record/assembly.js.map +1 -0
  91. package/cjs/domain/record/elementsScrollPositions.d.ts +10 -0
  92. package/cjs/domain/record/elementsScrollPositions.js +23 -0
  93. package/cjs/domain/record/elementsScrollPositions.js.map +1 -0
  94. package/cjs/domain/record/eventsUtils.d.ts +2 -0
  95. package/cjs/domain/record/eventsUtils.js +15 -0
  96. package/cjs/domain/record/eventsUtils.js.map +1 -0
  97. package/cjs/domain/record/index.d.ts +6 -0
  98. package/cjs/domain/record/index.js +17 -0
  99. package/cjs/domain/record/index.js.map +1 -0
  100. package/cjs/domain/record/internalApi.d.ts +22 -0
  101. package/cjs/domain/record/internalApi.js +55 -0
  102. package/cjs/domain/record/internalApi.js.map +1 -0
  103. package/cjs/domain/record/itemIds.d.ts +40 -0
  104. package/cjs/domain/record/itemIds.js +58 -0
  105. package/cjs/domain/record/itemIds.js.map +1 -0
  106. package/cjs/domain/record/mutationBatch.d.ts +12 -0
  107. package/cjs/domain/record/mutationBatch.js +44 -0
  108. package/cjs/domain/record/mutationBatch.js.map +1 -0
  109. package/cjs/domain/record/record.d.ts +16 -0
  110. package/cjs/domain/record/record.js +88 -0
  111. package/cjs/domain/record/record.js.map +1 -0
  112. package/cjs/domain/record/record.types.d.ts +18 -0
  113. package/cjs/domain/record/record.types.js +3 -0
  114. package/cjs/domain/record/record.types.js.map +1 -0
  115. package/cjs/domain/record/recordingScope.d.ts +24 -0
  116. package/cjs/domain/record/recordingScope.js +29 -0
  117. package/cjs/domain/record/recordingScope.js.map +1 -0
  118. package/cjs/domain/record/serialization/changeEncoder.d.ts +22 -0
  119. package/cjs/domain/record/serialization/changeEncoder.js +59 -0
  120. package/cjs/domain/record/serialization/changeEncoder.js.map +1 -0
  121. package/cjs/domain/record/serialization/conversions/changeConverter.d.ts +10 -0
  122. package/cjs/domain/record/serialization/conversions/changeConverter.js +216 -0
  123. package/cjs/domain/record/serialization/conversions/changeConverter.js.map +1 -0
  124. package/cjs/domain/record/serialization/conversions/changeDecoder.d.ts +16 -0
  125. package/cjs/domain/record/serialization/conversions/changeDecoder.js +137 -0
  126. package/cjs/domain/record/serialization/conversions/changeDecoder.js.map +1 -0
  127. package/cjs/domain/record/serialization/conversions/index.d.ts +7 -0
  128. package/cjs/domain/record/serialization/conversions/index.js +11 -0
  129. package/cjs/domain/record/serialization/conversions/index.js.map +1 -0
  130. package/cjs/domain/record/serialization/conversions/mutationLog.d.ts +15 -0
  131. package/cjs/domain/record/serialization/conversions/mutationLog.js +36 -0
  132. package/cjs/domain/record/serialization/conversions/mutationLog.js.map +1 -0
  133. package/cjs/domain/record/serialization/conversions/nodeIdRemapper.d.ts +10 -0
  134. package/cjs/domain/record/serialization/conversions/nodeIdRemapper.js +53 -0
  135. package/cjs/domain/record/serialization/conversions/nodeIdRemapper.js.map +1 -0
  136. package/cjs/domain/record/serialization/conversions/renderOptions.d.ts +6 -0
  137. package/cjs/domain/record/serialization/conversions/renderOptions.js +12 -0
  138. package/cjs/domain/record/serialization/conversions/renderOptions.js.map +1 -0
  139. package/cjs/domain/record/serialization/conversions/stringTable.d.ts +5 -0
  140. package/cjs/domain/record/serialization/conversions/stringTable.js +22 -0
  141. package/cjs/domain/record/serialization/conversions/stringTable.js.map +1 -0
  142. package/cjs/domain/record/serialization/conversions/vDocument.d.ts +23 -0
  143. package/cjs/domain/record/serialization/conversions/vDocument.js +176 -0
  144. package/cjs/domain/record/serialization/conversions/vDocument.js.map +1 -0
  145. package/cjs/domain/record/serialization/conversions/vNode.d.ts +66 -0
  146. package/cjs/domain/record/serialization/conversions/vNode.js +285 -0
  147. package/cjs/domain/record/serialization/conversions/vNode.js.map +1 -0
  148. package/cjs/domain/record/serialization/conversions/vStyleSheet.d.ts +16 -0
  149. package/cjs/domain/record/serialization/conversions/vStyleSheet.js +29 -0
  150. package/cjs/domain/record/serialization/conversions/vStyleSheet.js.map +1 -0
  151. package/cjs/domain/record/serialization/experimentalFeatures.d.ts +2 -0
  152. package/cjs/domain/record/serialization/experimentalFeatures.js +16 -0
  153. package/cjs/domain/record/serialization/experimentalFeatures.js.map +1 -0
  154. package/cjs/domain/record/serialization/index.d.ts +17 -0
  155. package/cjs/domain/record/serialization/index.js +37 -0
  156. package/cjs/domain/record/serialization/index.js.map +1 -0
  157. package/cjs/domain/record/serialization/insertionCursor.d.ts +57 -0
  158. package/cjs/domain/record/serialization/insertionCursor.js +68 -0
  159. package/cjs/domain/record/serialization/insertionCursor.js.map +1 -0
  160. package/cjs/domain/record/serialization/serialization.types.d.ts +24 -0
  161. package/cjs/domain/record/serialization/serialization.types.js +3 -0
  162. package/cjs/domain/record/serialization/serialization.types.js.map +1 -0
  163. package/cjs/domain/record/serialization/serializationStats.d.ts +12 -0
  164. package/cjs/domain/record/serialization/serializationStats.js +32 -0
  165. package/cjs/domain/record/serialization/serializationStats.js.map +1 -0
  166. package/cjs/domain/record/serialization/serializationTransaction.d.ts +96 -0
  167. package/cjs/domain/record/serialization/serializationTransaction.js +103 -0
  168. package/cjs/domain/record/serialization/serializationTransaction.js.map +1 -0
  169. package/cjs/domain/record/serialization/serializationUtils.d.ts +18 -0
  170. package/cjs/domain/record/serialization/serializationUtils.js +88 -0
  171. package/cjs/domain/record/serialization/serializationUtils.js.map +1 -0
  172. package/cjs/domain/record/serialization/serializeAttribute.d.ts +4 -0
  173. package/cjs/domain/record/serialization/serializeAttribute.js +42 -0
  174. package/cjs/domain/record/serialization/serializeAttribute.js.map +1 -0
  175. package/cjs/domain/record/serialization/serializeAttributes.d.ts +7 -0
  176. package/cjs/domain/record/serialization/serializeAttributes.js +167 -0
  177. package/cjs/domain/record/serialization/serializeAttributes.js.map +1 -0
  178. package/cjs/domain/record/serialization/serializeFullSnapshot.d.ts +5 -0
  179. package/cjs/domain/record/serialization/serializeFullSnapshot.js +34 -0
  180. package/cjs/domain/record/serialization/serializeFullSnapshot.js.map +1 -0
  181. package/cjs/domain/record/serialization/serializeFullSnapshotAsChange.d.ts +5 -0
  182. package/cjs/domain/record/serialization/serializeFullSnapshotAsChange.js +13 -0
  183. package/cjs/domain/record/serialization/serializeFullSnapshotAsChange.js.map +1 -0
  184. package/cjs/domain/record/serialization/serializeMutations.d.ts +11 -0
  185. package/cjs/domain/record/serialization/serializeMutations.js +262 -0
  186. package/cjs/domain/record/serialization/serializeMutations.js.map +1 -0
  187. package/cjs/domain/record/serialization/serializeMutationsAsChange.d.ts +5 -0
  188. package/cjs/domain/record/serialization/serializeMutationsAsChange.js +204 -0
  189. package/cjs/domain/record/serialization/serializeMutationsAsChange.js.map +1 -0
  190. package/cjs/domain/record/serialization/serializeNode.d.ts +7 -0
  191. package/cjs/domain/record/serialization/serializeNode.js +154 -0
  192. package/cjs/domain/record/serialization/serializeNode.js.map +1 -0
  193. package/cjs/domain/record/serialization/serializeNodeAsChange.d.ts +4 -0
  194. package/cjs/domain/record/serialization/serializeNodeAsChange.js +153 -0
  195. package/cjs/domain/record/serialization/serializeNodeAsChange.js.map +1 -0
  196. package/cjs/domain/record/serialization/serializeStyleSheets.d.ts +3 -0
  197. package/cjs/domain/record/serialization/serializeStyleSheets.js +30 -0
  198. package/cjs/domain/record/serialization/serializeStyleSheets.js.map +1 -0
  199. package/cjs/domain/record/serializationVerifier.d.ts +18 -0
  200. package/cjs/domain/record/serializationVerifier.js +126 -0
  201. package/cjs/domain/record/serializationVerifier.js.map +1 -0
  202. package/cjs/domain/record/shadowRootsController.d.ts +11 -0
  203. package/cjs/domain/record/shadowRootsController.js +45 -0
  204. package/cjs/domain/record/shadowRootsController.js.map +1 -0
  205. package/cjs/domain/record/startFullSnapshots.d.ts +10 -0
  206. package/cjs/domain/record/startFullSnapshots.js +50 -0
  207. package/cjs/domain/record/startFullSnapshots.js.map +1 -0
  208. package/cjs/domain/record/trackers/index.d.ts +12 -0
  209. package/cjs/domain/record/trackers/index.js +27 -0
  210. package/cjs/domain/record/trackers/index.js.map +1 -0
  211. package/cjs/domain/record/trackers/trackFocus.d.ts +5 -0
  212. package/cjs/domain/record/trackers/trackFocus.js +15 -0
  213. package/cjs/domain/record/trackers/trackFocus.js.map +1 -0
  214. package/cjs/domain/record/trackers/trackFrustration.d.ts +6 -0
  215. package/cjs/domain/record/trackers/trackFrustration.js +31 -0
  216. package/cjs/domain/record/trackers/trackFrustration.js.map +1 -0
  217. package/cjs/domain/record/trackers/trackInput.d.ts +4 -0
  218. package/cjs/domain/record/trackers/trackInput.js +104 -0
  219. package/cjs/domain/record/trackers/trackInput.js.map +1 -0
  220. package/cjs/domain/record/trackers/trackMediaInteraction.d.ts +5 -0
  221. package/cjs/domain/record/trackers/trackMediaInteraction.js +29 -0
  222. package/cjs/domain/record/trackers/trackMediaInteraction.js.map +1 -0
  223. package/cjs/domain/record/trackers/trackMouseInteraction.d.ts +5 -0
  224. package/cjs/domain/record/trackers/trackMouseInteraction.js +59 -0
  225. package/cjs/domain/record/trackers/trackMouseInteraction.js.map +1 -0
  226. package/cjs/domain/record/trackers/trackMove.d.ts +9 -0
  227. package/cjs/domain/record/trackers/trackMove.js +55 -0
  228. package/cjs/domain/record/trackers/trackMove.js.map +1 -0
  229. package/cjs/domain/record/trackers/trackMutation.d.ts +13 -0
  230. package/cjs/domain/record/trackers/trackMutation.js +41 -0
  231. package/cjs/domain/record/trackers/trackMutation.js.map +1 -0
  232. package/cjs/domain/record/trackers/trackScroll.d.ts +5 -0
  233. package/cjs/domain/record/trackers/trackScroll.js +48 -0
  234. package/cjs/domain/record/trackers/trackScroll.js.map +1 -0
  235. package/cjs/domain/record/trackers/trackStyleSheet.d.ts +6 -0
  236. package/cjs/domain/record/trackers/trackStyleSheet.js +89 -0
  237. package/cjs/domain/record/trackers/trackStyleSheet.js.map +1 -0
  238. package/cjs/domain/record/trackers/trackViewEnd.d.ts +5 -0
  239. package/cjs/domain/record/trackers/trackViewEnd.js +20 -0
  240. package/cjs/domain/record/trackers/trackViewEnd.js.map +1 -0
  241. package/cjs/domain/record/trackers/trackViewportResize.d.ts +6 -0
  242. package/cjs/domain/record/trackers/trackViewportResize.js +46 -0
  243. package/cjs/domain/record/trackers/trackViewportResize.js.map +1 -0
  244. package/cjs/domain/record/trackers/tracker.types.d.ts +3 -0
  245. package/cjs/domain/record/trackers/tracker.types.js +3 -0
  246. package/cjs/domain/record/trackers/tracker.types.js.map +1 -0
  247. package/cjs/domain/record/viewports.d.ts +20 -0
  248. package/cjs/domain/record/viewports.js +60 -0
  249. package/cjs/domain/record/viewports.js.map +1 -0
  250. package/cjs/domain/replayStats.d.ts +8 -0
  251. package/cjs/domain/replayStats.js +60 -0
  252. package/cjs/domain/replayStats.js.map +1 -0
  253. package/cjs/domain/scriptLoadingError.d.ts +6 -0
  254. package/cjs/domain/scriptLoadingError.js +26 -0
  255. package/cjs/domain/scriptLoadingError.js.map +1 -0
  256. package/cjs/domain/segmentCollection/buildReplayPayload.d.ts +15 -0
  257. package/cjs/domain/segmentCollection/buildReplayPayload.js +26 -0
  258. package/cjs/domain/segmentCollection/buildReplayPayload.js.map +1 -0
  259. package/cjs/domain/segmentCollection/index.d.ts +4 -0
  260. package/cjs/domain/segmentCollection/index.js +11 -0
  261. package/cjs/domain/segmentCollection/index.js.map +1 -0
  262. package/cjs/domain/segmentCollection/segment.d.ts +16 -0
  263. package/cjs/domain/segmentCollection/segment.js +82 -0
  264. package/cjs/domain/segmentCollection/segment.js.map +1 -0
  265. package/cjs/domain/segmentCollection/segmentCollection.d.ts +31 -0
  266. package/cjs/domain/segmentCollection/segmentCollection.js +113 -0
  267. package/cjs/domain/segmentCollection/segmentCollection.js.map +1 -0
  268. package/cjs/domain/segmentCollection/startSegmentTelemetry.d.ts +6 -0
  269. package/cjs/domain/segmentCollection/startSegmentTelemetry.js +52 -0
  270. package/cjs/domain/segmentCollection/startSegmentTelemetry.js.map +1 -0
  271. package/cjs/domain/startRecordBridge.d.ts +5 -0
  272. package/cjs/domain/startRecordBridge.js +17 -0
  273. package/cjs/domain/startRecordBridge.js.map +1 -0
  274. package/cjs/domain/startRecorderInitTelemetry.d.ts +15 -0
  275. package/cjs/domain/startRecorderInitTelemetry.js +55 -0
  276. package/cjs/domain/startRecorderInitTelemetry.js.map +1 -0
  277. package/cjs/entries/internal.d.ts +11 -0
  278. package/cjs/entries/internal.js +28 -0
  279. package/cjs/entries/internal.js.map +1 -0
  280. package/cjs/entries/internalSynthetics.d.ts +2 -0
  281. package/cjs/entries/internalSynthetics.js +27 -0
  282. package/cjs/entries/internalSynthetics.js.map +1 -0
  283. package/cjs/entries/main.d.ts +23 -0
  284. package/cjs/entries/main.js +35 -0
  285. package/cjs/entries/main.js.map +1 -0
  286. package/cjs/types/index.d.ts +3 -0
  287. package/cjs/types/index.js +18 -0
  288. package/cjs/types/index.js.map +1 -0
  289. package/cjs/types/profiling.d.ts +296 -0
  290. package/cjs/types/profiling.js +6 -0
  291. package/cjs/types/profiling.js.map +1 -0
  292. package/cjs/types/sessionReplay.d.ts +934 -0
  293. package/cjs/types/sessionReplay.js +6 -0
  294. package/cjs/types/sessionReplay.js.map +1 -0
  295. package/cjs/types/sessionReplayConstants.d.ts +71 -0
  296. package/cjs/types/sessionReplayConstants.js +67 -0
  297. package/cjs/types/sessionReplayConstants.js.map +1 -0
  298. package/esm/boot/isBrowserSupported.d.ts +4 -0
  299. package/esm/boot/isBrowserSupported.js +14 -0
  300. package/esm/boot/isBrowserSupported.js.map +1 -0
  301. package/esm/boot/lazyLoadProfiler.d.ts +3 -0
  302. package/esm/boot/lazyLoadProfiler.js +19 -0
  303. package/esm/boot/lazyLoadProfiler.js.map +1 -0
  304. package/esm/boot/lazyLoadRecorder.d.ts +3 -0
  305. package/esm/boot/lazyLoadRecorder.js +19 -0
  306. package/esm/boot/lazyLoadRecorder.js.map +1 -0
  307. package/esm/boot/postStartStrategy.d.ts +33 -0
  308. package/esm/boot/postStartStrategy.js +95 -0
  309. package/esm/boot/postStartStrategy.js.map +1 -0
  310. package/esm/boot/preStartStrategy.d.ts +6 -0
  311. package/esm/boot/preStartStrategy.js +21 -0
  312. package/esm/boot/preStartStrategy.js.map +1 -0
  313. package/esm/boot/profilerApi.d.ts +2 -0
  314. package/esm/boot/profilerApi.js +49 -0
  315. package/esm/boot/profilerApi.js.map +1 -0
  316. package/esm/boot/recorderApi.d.ts +3 -0
  317. package/esm/boot/recorderApi.js +68 -0
  318. package/esm/boot/recorderApi.js.map +1 -0
  319. package/esm/boot/startRecording.d.ts +6 -0
  320. package/esm/boot/startRecording.js +42 -0
  321. package/esm/boot/startRecording.js.map +1 -0
  322. package/esm/domain/deflate/deflateEncoder.d.ts +3 -0
  323. package/esm/domain/deflate/deflateEncoder.js +107 -0
  324. package/esm/domain/deflate/deflateEncoder.js.map +1 -0
  325. package/esm/domain/deflate/deflateWorker.d.ts +29 -0
  326. package/esm/domain/deflate/deflateWorker.js +97 -0
  327. package/esm/domain/deflate/deflateWorker.js.map +1 -0
  328. package/esm/domain/deflate/index.d.ts +3 -0
  329. package/esm/domain/deflate/index.js +3 -0
  330. package/esm/domain/deflate/index.js.map +1 -0
  331. package/esm/domain/getSessionReplayLink.d.ts +2 -0
  332. package/esm/domain/getSessionReplayLink.js +32 -0
  333. package/esm/domain/getSessionReplayLink.js.map +1 -0
  334. package/esm/domain/profiling/actionHistory.d.ts +10 -0
  335. package/esm/domain/profiling/actionHistory.js +45 -0
  336. package/esm/domain/profiling/actionHistory.js.map +1 -0
  337. package/esm/domain/profiling/longTaskHistory.d.ts +11 -0
  338. package/esm/domain/profiling/longTaskHistory.js +24 -0
  339. package/esm/domain/profiling/longTaskHistory.js.map +1 -0
  340. package/esm/domain/profiling/profiler.d.ts +7 -0
  341. package/esm/domain/profiling/profiler.js +263 -0
  342. package/esm/domain/profiling/profiler.js.map +1 -0
  343. package/esm/domain/profiling/profilingContext.d.ts +6 -0
  344. package/esm/domain/profiling/profilingContext.js +28 -0
  345. package/esm/domain/profiling/profilingContext.js.map +1 -0
  346. package/esm/domain/profiling/profilingSupported.d.ts +1 -0
  347. package/esm/domain/profiling/profilingSupported.js +8 -0
  348. package/esm/domain/profiling/profilingSupported.js.map +1 -0
  349. package/esm/domain/profiling/test-utils/mockedTrace.d.ts +3 -0
  350. package/esm/domain/profiling/test-utils/mockedTrace.js +54 -0
  351. package/esm/domain/profiling/test-utils/mockedTrace.js.map +1 -0
  352. package/esm/domain/profiling/transport/assembly.d.ts +7 -0
  353. package/esm/domain/profiling/transport/assembly.js +42 -0
  354. package/esm/domain/profiling/transport/assembly.js.map +1 -0
  355. package/esm/domain/profiling/transport/buildProfileEventAttributes.d.ts +33 -0
  356. package/esm/domain/profiling/transport/buildProfileEventAttributes.js +60 -0
  357. package/esm/domain/profiling/transport/buildProfileEventAttributes.js.map +1 -0
  358. package/esm/domain/profiling/types/index.d.ts +2 -0
  359. package/esm/domain/profiling/types/index.js +2 -0
  360. package/esm/domain/profiling/types/index.js.map +1 -0
  361. package/esm/domain/profiling/types/profilerApi.types.d.ts +58 -0
  362. package/esm/domain/profiling/types/profilerApi.types.js +4 -0
  363. package/esm/domain/profiling/types/profilerApi.types.js.map +1 -0
  364. package/esm/domain/profiling/types/rumProfiler.types.d.ts +55 -0
  365. package/esm/domain/profiling/types/rumProfiler.types.js +2 -0
  366. package/esm/domain/profiling/types/rumProfiler.types.js.map +1 -0
  367. package/esm/domain/profiling/utils/getCustomOrDefaultViewName.d.ts +1 -0
  368. package/esm/domain/profiling/utils/getCustomOrDefaultViewName.js +3 -0
  369. package/esm/domain/profiling/utils/getCustomOrDefaultViewName.js.map +1 -0
  370. package/esm/domain/profiling/utils/getDefaultViewName.d.ts +1 -0
  371. package/esm/domain/profiling/utils/getDefaultViewName.js +11 -0
  372. package/esm/domain/profiling/utils/getDefaultViewName.js.map +1 -0
  373. package/esm/domain/profiling/utils/getNumberOfSamples.d.ts +8 -0
  374. package/esm/domain/profiling/utils/getNumberOfSamples.js +16 -0
  375. package/esm/domain/profiling/utils/getNumberOfSamples.js.map +1 -0
  376. package/esm/domain/profiling/vitalHistory.d.ts +10 -0
  377. package/esm/domain/profiling/vitalHistory.js +38 -0
  378. package/esm/domain/profiling/vitalHistory.js.map +1 -0
  379. package/esm/domain/record/assembly.d.ts +3 -0
  380. package/esm/domain/record/assembly.js +13 -0
  381. package/esm/domain/record/assembly.js.map +1 -0
  382. package/esm/domain/record/elementsScrollPositions.d.ts +10 -0
  383. package/esm/domain/record/elementsScrollPositions.js +20 -0
  384. package/esm/domain/record/elementsScrollPositions.js.map +1 -0
  385. package/esm/domain/record/eventsUtils.d.ts +2 -0
  386. package/esm/domain/record/eventsUtils.js +11 -0
  387. package/esm/domain/record/eventsUtils.js.map +1 -0
  388. package/esm/domain/record/index.d.ts +6 -0
  389. package/esm/domain/record/index.js +5 -0
  390. package/esm/domain/record/index.js.map +1 -0
  391. package/esm/domain/record/internalApi.d.ts +22 -0
  392. package/esm/domain/record/internalApi.js +51 -0
  393. package/esm/domain/record/internalApi.js.map +1 -0
  394. package/esm/domain/record/itemIds.d.ts +40 -0
  395. package/esm/domain/record/itemIds.js +52 -0
  396. package/esm/domain/record/itemIds.js.map +1 -0
  397. package/esm/domain/record/mutationBatch.d.ts +12 -0
  398. package/esm/domain/record/mutationBatch.js +40 -0
  399. package/esm/domain/record/mutationBatch.js.map +1 -0
  400. package/esm/domain/record/record.d.ts +16 -0
  401. package/esm/domain/record/record.js +52 -0
  402. package/esm/domain/record/record.js.map +1 -0
  403. package/esm/domain/record/record.types.d.ts +18 -0
  404. package/esm/domain/record/record.types.js +2 -0
  405. package/esm/domain/record/record.types.js.map +1 -0
  406. package/esm/domain/record/recordingScope.d.ts +24 -0
  407. package/esm/domain/record/recordingScope.js +26 -0
  408. package/esm/domain/record/recordingScope.js.map +1 -0
  409. package/esm/domain/record/serialization/changeEncoder.d.ts +22 -0
  410. package/esm/domain/record/serialization/changeEncoder.js +56 -0
  411. package/esm/domain/record/serialization/changeEncoder.js.map +1 -0
  412. package/esm/domain/record/serialization/conversions/changeConverter.d.ts +10 -0
  413. package/esm/domain/record/serialization/conversions/changeConverter.js +213 -0
  414. package/esm/domain/record/serialization/conversions/changeConverter.js.map +1 -0
  415. package/esm/domain/record/serialization/conversions/changeDecoder.d.ts +16 -0
  416. package/esm/domain/record/serialization/conversions/changeDecoder.js +134 -0
  417. package/esm/domain/record/serialization/conversions/changeDecoder.js.map +1 -0
  418. package/esm/domain/record/serialization/conversions/index.d.ts +7 -0
  419. package/esm/domain/record/serialization/conversions/index.js +4 -0
  420. package/esm/domain/record/serialization/conversions/index.js.map +1 -0
  421. package/esm/domain/record/serialization/conversions/mutationLog.d.ts +15 -0
  422. package/esm/domain/record/serialization/conversions/mutationLog.js +33 -0
  423. package/esm/domain/record/serialization/conversions/mutationLog.js.map +1 -0
  424. package/esm/domain/record/serialization/conversions/nodeIdRemapper.d.ts +10 -0
  425. package/esm/domain/record/serialization/conversions/nodeIdRemapper.js +49 -0
  426. package/esm/domain/record/serialization/conversions/nodeIdRemapper.js.map +1 -0
  427. package/esm/domain/record/serialization/conversions/renderOptions.d.ts +6 -0
  428. package/esm/domain/record/serialization/conversions/renderOptions.js +9 -0
  429. package/esm/domain/record/serialization/conversions/renderOptions.js.map +1 -0
  430. package/esm/domain/record/serialization/conversions/stringTable.d.ts +5 -0
  431. package/esm/domain/record/serialization/conversions/stringTable.js +19 -0
  432. package/esm/domain/record/serialization/conversions/stringTable.js.map +1 -0
  433. package/esm/domain/record/serialization/conversions/vDocument.d.ts +23 -0
  434. package/esm/domain/record/serialization/conversions/vDocument.js +173 -0
  435. package/esm/domain/record/serialization/conversions/vDocument.js.map +1 -0
  436. package/esm/domain/record/serialization/conversions/vNode.d.ts +66 -0
  437. package/esm/domain/record/serialization/conversions/vNode.js +282 -0
  438. package/esm/domain/record/serialization/conversions/vNode.js.map +1 -0
  439. package/esm/domain/record/serialization/conversions/vStyleSheet.d.ts +16 -0
  440. package/esm/domain/record/serialization/conversions/vStyleSheet.js +26 -0
  441. package/esm/domain/record/serialization/conversions/vStyleSheet.js.map +1 -0
  442. package/esm/domain/record/serialization/experimentalFeatures.d.ts +2 -0
  443. package/esm/domain/record/serialization/experimentalFeatures.js +12 -0
  444. package/esm/domain/record/serialization/experimentalFeatures.js.map +1 -0
  445. package/esm/domain/record/serialization/index.d.ts +17 -0
  446. package/esm/domain/record/serialization/index.js +14 -0
  447. package/esm/domain/record/serialization/index.js.map +1 -0
  448. package/esm/domain/record/serialization/insertionCursor.d.ts +57 -0
  449. package/esm/domain/record/serialization/insertionCursor.js +64 -0
  450. package/esm/domain/record/serialization/insertionCursor.js.map +1 -0
  451. package/esm/domain/record/serialization/serialization.types.d.ts +24 -0
  452. package/esm/domain/record/serialization/serialization.types.js +2 -0
  453. package/esm/domain/record/serialization/serialization.types.js.map +1 -0
  454. package/esm/domain/record/serialization/serializationStats.d.ts +12 -0
  455. package/esm/domain/record/serialization/serializationStats.js +27 -0
  456. package/esm/domain/record/serialization/serializationStats.js.map +1 -0
  457. package/esm/domain/record/serialization/serializationTransaction.d.ts +96 -0
  458. package/esm/domain/record/serialization/serializationTransaction.js +99 -0
  459. package/esm/domain/record/serialization/serializationTransaction.js.map +1 -0
  460. package/esm/domain/record/serialization/serializationUtils.d.ts +18 -0
  461. package/esm/domain/record/serialization/serializationUtils.js +80 -0
  462. package/esm/domain/record/serialization/serializationUtils.js.map +1 -0
  463. package/esm/domain/record/serialization/serializeAttribute.d.ts +4 -0
  464. package/esm/domain/record/serialization/serializeAttribute.js +38 -0
  465. package/esm/domain/record/serialization/serializeAttribute.js.map +1 -0
  466. package/esm/domain/record/serialization/serializeAttributes.d.ts +7 -0
  467. package/esm/domain/record/serialization/serializeAttributes.js +161 -0
  468. package/esm/domain/record/serialization/serializeAttributes.js.map +1 -0
  469. package/esm/domain/record/serialization/serializeFullSnapshot.d.ts +5 -0
  470. package/esm/domain/record/serialization/serializeFullSnapshot.js +31 -0
  471. package/esm/domain/record/serialization/serializeFullSnapshot.js.map +1 -0
  472. package/esm/domain/record/serialization/serializeFullSnapshotAsChange.d.ts +5 -0
  473. package/esm/domain/record/serialization/serializeFullSnapshotAsChange.js +10 -0
  474. package/esm/domain/record/serialization/serializeFullSnapshotAsChange.js.map +1 -0
  475. package/esm/domain/record/serialization/serializeMutations.d.ts +11 -0
  476. package/esm/domain/record/serialization/serializeMutations.js +257 -0
  477. package/esm/domain/record/serialization/serializeMutations.js.map +1 -0
  478. package/esm/domain/record/serialization/serializeMutationsAsChange.d.ts +5 -0
  479. package/esm/domain/record/serialization/serializeMutationsAsChange.js +201 -0
  480. package/esm/domain/record/serialization/serializeMutationsAsChange.js.map +1 -0
  481. package/esm/domain/record/serialization/serializeNode.d.ts +7 -0
  482. package/esm/domain/record/serialization/serializeNode.js +149 -0
  483. package/esm/domain/record/serialization/serializeNode.js.map +1 -0
  484. package/esm/domain/record/serialization/serializeNodeAsChange.d.ts +4 -0
  485. package/esm/domain/record/serialization/serializeNodeAsChange.js +150 -0
  486. package/esm/domain/record/serialization/serializeNodeAsChange.js.map +1 -0
  487. package/esm/domain/record/serialization/serializeStyleSheets.d.ts +3 -0
  488. package/esm/domain/record/serialization/serializeStyleSheets.js +27 -0
  489. package/esm/domain/record/serialization/serializeStyleSheets.js.map +1 -0
  490. package/esm/domain/record/serializationVerifier.d.ts +18 -0
  491. package/esm/domain/record/serializationVerifier.js +123 -0
  492. package/esm/domain/record/serializationVerifier.js.map +1 -0
  493. package/esm/domain/record/shadowRootsController.d.ts +11 -0
  494. package/esm/domain/record/shadowRootsController.js +41 -0
  495. package/esm/domain/record/shadowRootsController.js.map +1 -0
  496. package/esm/domain/record/startFullSnapshots.d.ts +10 -0
  497. package/esm/domain/record/startFullSnapshots.js +46 -0
  498. package/esm/domain/record/startFullSnapshots.js.map +1 -0
  499. package/esm/domain/record/trackers/index.d.ts +12 -0
  500. package/esm/domain/record/trackers/index.js +12 -0
  501. package/esm/domain/record/trackers/index.js.map +1 -0
  502. package/esm/domain/record/trackers/trackFocus.d.ts +5 -0
  503. package/esm/domain/record/trackers/trackFocus.js +12 -0
  504. package/esm/domain/record/trackers/trackFocus.js.map +1 -0
  505. package/esm/domain/record/trackers/trackFrustration.d.ts +6 -0
  506. package/esm/domain/record/trackers/trackFrustration.js +28 -0
  507. package/esm/domain/record/trackers/trackFrustration.js.map +1 -0
  508. package/esm/domain/record/trackers/trackInput.d.ts +4 -0
  509. package/esm/domain/record/trackers/trackInput.js +101 -0
  510. package/esm/domain/record/trackers/trackInput.js.map +1 -0
  511. package/esm/domain/record/trackers/trackMediaInteraction.d.ts +5 -0
  512. package/esm/domain/record/trackers/trackMediaInteraction.js +26 -0
  513. package/esm/domain/record/trackers/trackMediaInteraction.js.map +1 -0
  514. package/esm/domain/record/trackers/trackMouseInteraction.d.ts +5 -0
  515. package/esm/domain/record/trackers/trackMouseInteraction.js +56 -0
  516. package/esm/domain/record/trackers/trackMouseInteraction.js.map +1 -0
  517. package/esm/domain/record/trackers/trackMove.d.ts +9 -0
  518. package/esm/domain/record/trackers/trackMove.js +51 -0
  519. package/esm/domain/record/trackers/trackMove.js.map +1 -0
  520. package/esm/domain/record/trackers/trackMutation.d.ts +13 -0
  521. package/esm/domain/record/trackers/trackMutation.js +38 -0
  522. package/esm/domain/record/trackers/trackMutation.js.map +1 -0
  523. package/esm/domain/record/trackers/trackScroll.d.ts +5 -0
  524. package/esm/domain/record/trackers/trackScroll.js +45 -0
  525. package/esm/domain/record/trackers/trackScroll.js.map +1 -0
  526. package/esm/domain/record/trackers/trackStyleSheet.d.ts +6 -0
  527. package/esm/domain/record/trackers/trackStyleSheet.js +85 -0
  528. package/esm/domain/record/trackers/trackStyleSheet.js.map +1 -0
  529. package/esm/domain/record/trackers/trackViewEnd.d.ts +5 -0
  530. package/esm/domain/record/trackers/trackViewEnd.js +17 -0
  531. package/esm/domain/record/trackers/trackViewEnd.js.map +1 -0
  532. package/esm/domain/record/trackers/trackViewportResize.d.ts +6 -0
  533. package/esm/domain/record/trackers/trackViewportResize.js +42 -0
  534. package/esm/domain/record/trackers/trackViewportResize.js.map +1 -0
  535. package/esm/domain/record/trackers/tracker.types.d.ts +3 -0
  536. package/esm/domain/record/trackers/tracker.types.js +2 -0
  537. package/esm/domain/record/trackers/tracker.types.js.map +1 -0
  538. package/esm/domain/record/viewports.d.ts +20 -0
  539. package/esm/domain/record/viewports.js +55 -0
  540. package/esm/domain/record/viewports.js.map +1 -0
  541. package/esm/domain/replayStats.d.ts +8 -0
  542. package/esm/domain/replayStats.js +51 -0
  543. package/esm/domain/replayStats.js.map +1 -0
  544. package/esm/domain/scriptLoadingError.d.ts +6 -0
  545. package/esm/domain/scriptLoadingError.js +23 -0
  546. package/esm/domain/scriptLoadingError.js.map +1 -0
  547. package/esm/domain/segmentCollection/buildReplayPayload.d.ts +15 -0
  548. package/esm/domain/segmentCollection/buildReplayPayload.js +23 -0
  549. package/esm/domain/segmentCollection/buildReplayPayload.js.map +1 -0
  550. package/esm/domain/segmentCollection/index.d.ts +4 -0
  551. package/esm/domain/segmentCollection/index.js +4 -0
  552. package/esm/domain/segmentCollection/index.js.map +1 -0
  553. package/esm/domain/segmentCollection/segment.d.ts +16 -0
  554. package/esm/domain/segmentCollection/segment.js +46 -0
  555. package/esm/domain/segmentCollection/segment.js.map +1 -0
  556. package/esm/domain/segmentCollection/segmentCollection.d.ts +31 -0
  557. package/esm/domain/segmentCollection/segmentCollection.js +106 -0
  558. package/esm/domain/segmentCollection/segmentCollection.js.map +1 -0
  559. package/esm/domain/segmentCollection/startSegmentTelemetry.d.ts +6 -0
  560. package/esm/domain/segmentCollection/startSegmentTelemetry.js +49 -0
  561. package/esm/domain/segmentCollection/startSegmentTelemetry.js.map +1 -0
  562. package/esm/domain/startRecordBridge.d.ts +5 -0
  563. package/esm/domain/startRecordBridge.js +14 -0
  564. package/esm/domain/startRecordBridge.js.map +1 -0
  565. package/esm/domain/startRecorderInitTelemetry.d.ts +15 -0
  566. package/esm/domain/startRecorderInitTelemetry.js +52 -0
  567. package/esm/domain/startRecorderInitTelemetry.js.map +1 -0
  568. package/esm/entries/internal.d.ts +11 -0
  569. package/esm/entries/internal.js +4 -0
  570. package/esm/entries/internal.js.map +1 -0
  571. package/esm/entries/internalSynthetics.d.ts +2 -0
  572. package/esm/entries/internalSynthetics.js +23 -0
  573. package/esm/entries/internalSynthetics.js.map +1 -0
  574. package/esm/entries/main.d.ts +23 -0
  575. package/esm/entries/main.js +31 -0
  576. package/esm/entries/main.js.map +1 -0
  577. package/esm/types/index.d.ts +3 -0
  578. package/esm/types/index.js +2 -0
  579. package/esm/types/index.js.map +1 -0
  580. package/esm/types/profiling.d.ts +296 -0
  581. package/esm/types/profiling.js +5 -0
  582. package/esm/types/profiling.js.map +1 -0
  583. package/esm/types/sessionReplay.d.ts +934 -0
  584. package/esm/types/sessionReplay.js +5 -0
  585. package/esm/types/sessionReplay.js.map +1 -0
  586. package/esm/types/sessionReplayConstants.d.ts +71 -0
  587. package/esm/types/sessionReplayConstants.js +64 -0
  588. package/esm/types/sessionReplayConstants.js.map +1 -0
  589. package/internal/package.json +6 -0
  590. package/internal-synthetics/package.json +6 -0
  591. package/package.json +52 -0
  592. package/src/boot/isBrowserSupported.ts +14 -0
  593. package/src/boot/lazyLoadProfiler.ts +20 -0
  594. package/src/boot/lazyLoadRecorder.ts +20 -0
  595. package/src/boot/postStartStrategy.ts +176 -0
  596. package/src/boot/preStartStrategy.ts +34 -0
  597. package/src/boot/profilerApi.ts +82 -0
  598. package/src/boot/recorderApi.ts +113 -0
  599. package/src/boot/startRecording.ts +70 -0
  600. package/src/domain/deflate/deflateEncoder.ts +144 -0
  601. package/src/domain/deflate/deflateWorker.ts +152 -0
  602. package/src/domain/deflate/index.ts +9 -0
  603. package/src/domain/getSessionReplayLink.ts +40 -0
  604. package/src/domain/profiling/actionHistory.ts +65 -0
  605. package/src/domain/profiling/longTaskHistory.ts +40 -0
  606. package/src/domain/profiling/profiler.ts +366 -0
  607. package/src/domain/profiling/profilingContext.ts +39 -0
  608. package/src/domain/profiling/profilingSupported.ts +10 -0
  609. package/src/domain/profiling/test-utils/mockedTrace.ts +58 -0
  610. package/src/domain/profiling/transport/assembly.ts +63 -0
  611. package/src/domain/profiling/transport/buildProfileEventAttributes.ts +106 -0
  612. package/src/domain/profiling/types/index.ts +2 -0
  613. package/src/domain/profiling/types/profilerApi.types.ts +87 -0
  614. package/src/domain/profiling/types/rumProfiler.types.ts +62 -0
  615. package/src/domain/profiling/utils/getCustomOrDefaultViewName.ts +4 -0
  616. package/src/domain/profiling/utils/getDefaultViewName.ts +12 -0
  617. package/src/domain/profiling/utils/getNumberOfSamples.ts +17 -0
  618. package/src/domain/profiling/vitalHistory.ts +58 -0
  619. package/src/domain/record/assembly.ts +19 -0
  620. package/src/domain/record/elementsScrollPositions.ts +28 -0
  621. package/src/domain/record/eventsUtils.ts +12 -0
  622. package/src/domain/record/index.ts +12 -0
  623. package/src/domain/record/internalApi.ts +84 -0
  624. package/src/domain/record/itemIds.ts +97 -0
  625. package/src/domain/record/mutationBatch.ts +47 -0
  626. package/src/domain/record/record.ts +90 -0
  627. package/src/domain/record/record.types.ts +22 -0
  628. package/src/domain/record/recordingScope.ts +58 -0
  629. package/src/domain/record/serialization/changeEncoder.ts +89 -0
  630. package/src/domain/record/serialization/conversions/changeConverter.ts +277 -0
  631. package/src/domain/record/serialization/conversions/changeDecoder.ts +192 -0
  632. package/src/domain/record/serialization/conversions/index.ts +7 -0
  633. package/src/domain/record/serialization/conversions/mutationLog.ts +56 -0
  634. package/src/domain/record/serialization/conversions/nodeIdRemapper.ts +69 -0
  635. package/src/domain/record/serialization/conversions/renderOptions.ts +14 -0
  636. package/src/domain/record/serialization/conversions/stringTable.ts +25 -0
  637. package/src/domain/record/serialization/conversions/vDocument.ts +239 -0
  638. package/src/domain/record/serialization/conversions/vNode.ts +417 -0
  639. package/src/domain/record/serialization/conversions/vStyleSheet.ts +47 -0
  640. package/src/domain/record/serialization/experimentalFeatures.ts +15 -0
  641. package/src/domain/record/serialization/index.ts +21 -0
  642. package/src/domain/record/serialization/insertionCursor.ts +131 -0
  643. package/src/domain/record/serialization/serialization.types.ts +38 -0
  644. package/src/domain/record/serialization/serializationStats.ts +43 -0
  645. package/src/domain/record/serialization/serializationTransaction.ts +255 -0
  646. package/src/domain/record/serialization/serializationUtils.ts +103 -0
  647. package/src/domain/record/serialization/serializeAttribute.ts +55 -0
  648. package/src/domain/record/serialization/serializeAttributes.ts +194 -0
  649. package/src/domain/record/serialization/serializeFullSnapshot.ts +46 -0
  650. package/src/domain/record/serialization/serializeFullSnapshotAsChange.ts +33 -0
  651. package/src/domain/record/serialization/serializeMutations.ts +395 -0
  652. package/src/domain/record/serialization/serializeMutationsAsChange.ts +298 -0
  653. package/src/domain/record/serialization/serializeNode.ts +229 -0
  654. package/src/domain/record/serialization/serializeNodeAsChange.ts +237 -0
  655. package/src/domain/record/serialization/serializeStyleSheets.ts +36 -0
  656. package/src/domain/record/serializationVerifier.ts +208 -0
  657. package/src/domain/record/shadowRootsController.ts +62 -0
  658. package/src/domain/record/startFullSnapshots.ts +92 -0
  659. package/src/domain/record/trackers/index.ts +12 -0
  660. package/src/domain/record/trackers/trackFocus.ts +16 -0
  661. package/src/domain/record/trackers/trackFrustration.ts +39 -0
  662. package/src/domain/record/trackers/trackInput.ts +128 -0
  663. package/src/domain/record/trackers/trackMediaInteraction.ts +43 -0
  664. package/src/domain/record/trackers/trackMouseInteraction.ts +74 -0
  665. package/src/domain/record/trackers/trackMove.ts +78 -0
  666. package/src/domain/record/trackers/trackMutation.ts +74 -0
  667. package/src/domain/record/trackers/trackScroll.ts +61 -0
  668. package/src/domain/record/trackers/trackStyleSheet.ts +117 -0
  669. package/src/domain/record/trackers/trackViewEnd.ts +27 -0
  670. package/src/domain/record/trackers/trackViewportResize.ts +69 -0
  671. package/src/domain/record/trackers/tracker.types.ts +3 -0
  672. package/src/domain/record/viewports.ts +68 -0
  673. package/src/domain/replayStats.ts +61 -0
  674. package/src/domain/scriptLoadingError.ts +36 -0
  675. package/src/domain/segmentCollection/buildReplayPayload.ts +52 -0
  676. package/src/domain/segmentCollection/index.ts +4 -0
  677. package/src/domain/segmentCollection/segment.ts +79 -0
  678. package/src/domain/segmentCollection/segmentCollection.ts +200 -0
  679. package/src/domain/segmentCollection/startSegmentTelemetry.ts +91 -0
  680. package/src/domain/startRecordBridge.ts +17 -0
  681. package/src/domain/startRecorderInitTelemetry.ts +90 -0
  682. package/src/entries/internal.ts +18 -0
  683. package/src/entries/internalSynthetics.ts +24 -0
  684. package/src/entries/main.ts +96 -0
  685. package/src/types/index.ts +3 -0
  686. package/src/types/profiling.ts +298 -0
  687. package/src/types/sessionReplay.ts +990 -0
  688. package/src/types/sessionReplayConstants.ts +130 -0
@@ -0,0 +1,417 @@
1
+ import type { SerializedNodeWithId } from '../../../../types'
2
+ import { PlaybackState, NodeType } from '../../../../types'
3
+ import type { NodeId } from '../../itemIds'
4
+ import type { V1RenderOptions } from './renderOptions'
5
+ import type { VDocument } from './vDocument'
6
+ import type { VStyleSheet } from './vStyleSheet'
7
+
8
+ export interface VNode {
9
+ after(node: VNode): void
10
+ appendChild(node: VNode): void
11
+ before(node: VNode): void
12
+ remove(): void
13
+
14
+ setAttachedStyleSheets(sheets: VStyleSheet[]): void
15
+ setAttribute(name: string, value: string | null): void
16
+ setPlaybackState(state: PlaybackState): void
17
+ setScrollPosition(left: number, top: number): void
18
+ setSize(width: number, height: number): void
19
+ setTextContent(value: string): void
20
+
21
+ forEachAddedNodeRoot(nodeAdds: Set<NodeId>, action: (node: VNode) => void): void
22
+ forSelfAndEachDescendant(action: (node: VNode) => void): void
23
+ mapChildren<Result>(action: (node: VNode) => Result): Result[]
24
+
25
+ render(options: V1RenderOptions): SerializedNodeWithId
26
+
27
+ get data(): VNodeData
28
+ get id(): NodeId
29
+ get ownerDocument(): VDocument
30
+
31
+ state: VNodeState
32
+ firstChild: VNode | undefined
33
+ lastChild: VNode | undefined
34
+ previousSibling: VNode | undefined
35
+ nextSibling: VNode | undefined
36
+ parent: VNode | undefined
37
+ }
38
+
39
+ export type VNodeState = 'new' | 'connected' | 'disconnected'
40
+
41
+ export type VNodeData =
42
+ | {
43
+ kind: '#cdata-section'
44
+ }
45
+ | {
46
+ kind: '#document'
47
+ attachedStyleSheets?: VStyleSheet[] | undefined
48
+ scrollLeft?: number
49
+ scrollTop?: number
50
+ }
51
+ | {
52
+ kind: '#doctype'
53
+ name: string
54
+ publicId: string
55
+ systemId: string
56
+ }
57
+ | {
58
+ kind: '#document-fragment'
59
+ attachedStyleSheets?: VStyleSheet[] | undefined
60
+ }
61
+ | {
62
+ kind: '#element'
63
+ tag: string
64
+ attachedStyleSheets?: VStyleSheet[] | undefined
65
+ attributes: Record<string, string>
66
+ isSVG?: boolean
67
+ playbackState?: PlaybackState
68
+ scrollLeft?: number
69
+ scrollTop?: number
70
+ width?: number
71
+ height?: number
72
+ }
73
+ | {
74
+ kind: '#shadow-root'
75
+ attachedStyleSheets?: VStyleSheet[] | undefined
76
+ }
77
+ | {
78
+ kind: '#text'
79
+ textContent: string
80
+ }
81
+
82
+ export function createVNode(document: VDocument, id: NodeId, data: VNodeData): VNode {
83
+ let state: VNodeState = 'new'
84
+
85
+ const assertConnectedCorrectly = (): void => {
86
+ if (self.state !== 'connected') {
87
+ throw new Error(`Expected node ${self.id} to be connected, not ${self.state}`)
88
+ }
89
+
90
+ for (const connection of ['firstChild', 'lastChild', 'previousSibling', 'nextSibling', 'parent'] as const) {
91
+ const connectedNode = self[connection]
92
+ if (connectedNode && connectedNode.state !== 'connected') {
93
+ throw new Error(`Expected node ${self.id}'s ${connection} to be connected, not ${connectedNode.state}`)
94
+ }
95
+ }
96
+ }
97
+
98
+ const self: VNode = {
99
+ after(node: VNode): void {
100
+ node.parent = self.parent
101
+ node.previousSibling = self
102
+
103
+ if (self.nextSibling) {
104
+ self.nextSibling.previousSibling = node
105
+ }
106
+ node.nextSibling = self.nextSibling
107
+ self.nextSibling = node
108
+
109
+ if (self.parent?.lastChild === self) {
110
+ self.parent.lastChild = node
111
+ }
112
+
113
+ document.onNodeConnected(node, self.parent)
114
+ assertConnectedCorrectly()
115
+ },
116
+
117
+ appendChild(node: VNode): void {
118
+ if (self.lastChild) {
119
+ self.lastChild.after(node)
120
+ return
121
+ }
122
+
123
+ node.parent = self
124
+ self.firstChild = node
125
+ self.lastChild = node
126
+
127
+ document.onNodeConnected(node, self)
128
+ assertConnectedCorrectly()
129
+ },
130
+
131
+ before(node: VNode): void {
132
+ node.parent = self.parent
133
+ node.nextSibling = self
134
+
135
+ if (self.previousSibling) {
136
+ self.previousSibling.nextSibling = node
137
+ }
138
+ node.previousSibling = self.previousSibling
139
+ self.previousSibling = node
140
+
141
+ if (self.parent?.firstChild === self) {
142
+ self.parent.firstChild = node
143
+ }
144
+
145
+ document.onNodeConnected(node, self.parent)
146
+ assertConnectedCorrectly()
147
+ },
148
+
149
+ remove(): void {
150
+ if (self.state === 'disconnected') {
151
+ return // This is a redundant remove.
152
+ }
153
+
154
+ if (self.parent?.firstChild === self) {
155
+ self.parent.firstChild = self.nextSibling
156
+ }
157
+ if (self.parent?.lastChild === self) {
158
+ self.parent.lastChild = self.previousSibling
159
+ }
160
+ if (self.previousSibling) {
161
+ self.previousSibling.nextSibling = self.nextSibling
162
+ }
163
+ if (self.nextSibling) {
164
+ self.nextSibling.previousSibling = self.previousSibling
165
+ }
166
+
167
+ const parent = self.parent
168
+ self.parent = undefined
169
+ self.previousSibling = undefined
170
+ self.nextSibling = undefined
171
+
172
+ document.onNodeDisconnected(self, parent)
173
+ },
174
+
175
+ setAttachedStyleSheets(sheets: VStyleSheet[]): void {
176
+ assertConnectedCorrectly()
177
+
178
+ switch (data.kind) {
179
+ case '#document':
180
+ case '#document-fragment':
181
+ case '#element':
182
+ case '#shadow-root':
183
+ data.attachedStyleSheets = sheets
184
+ break
185
+
186
+ default:
187
+ throw new Error(`Cannot attach stylesheets to ${data.kind} node ${id}`)
188
+ }
189
+ },
190
+
191
+ setAttribute(name: string, value: string | null): void {
192
+ assertConnectedCorrectly()
193
+
194
+ if (data.kind !== '#element') {
195
+ throw new Error(`Cannot set attribute ${name} on ${data.kind} node ${id}`)
196
+ }
197
+
198
+ if (value === null) {
199
+ delete data.attributes[name]
200
+ } else {
201
+ data.attributes[name] = value
202
+ }
203
+
204
+ document.onAttributeChanged(self, name)
205
+ },
206
+
207
+ setPlaybackState(state: PlaybackState): void {
208
+ assertConnectedCorrectly()
209
+
210
+ if (data.kind !== '#element') {
211
+ throw new Error(`Cannot set media playback state of ${data.kind} node ${id}`)
212
+ }
213
+
214
+ data.playbackState = state
215
+ },
216
+
217
+ setScrollPosition(left: number, top: number): void {
218
+ assertConnectedCorrectly()
219
+
220
+ if (data.kind !== '#document' && data.kind !== '#element') {
221
+ throw new Error(`Cannot set scroll position on ${data.kind} node ${id}`)
222
+ }
223
+
224
+ // Treat zero coordinates as 'not scrolled' unless this element has scrolled in the past.
225
+ if (left !== 0 || data.scrollLeft !== undefined) {
226
+ data.scrollLeft = left
227
+ }
228
+ if (top !== 0 || data.scrollTop !== undefined) {
229
+ data.scrollTop = top
230
+ }
231
+ },
232
+
233
+ setSize(width: number, height: number): void {
234
+ assertConnectedCorrectly()
235
+
236
+ if (data.kind !== '#element') {
237
+ throw new Error(`Cannot set size of ${data.kind} node ${id}`)
238
+ }
239
+
240
+ data.width = width
241
+ data.height = height
242
+ },
243
+
244
+ setTextContent(value: string): void {
245
+ assertConnectedCorrectly()
246
+
247
+ if (data.kind !== '#text') {
248
+ throw new Error(`Cannot set text on ${data.kind} node ${id}`)
249
+ }
250
+
251
+ data.textContent = value
252
+
253
+ document.onTextChanged(self)
254
+ },
255
+
256
+ forEachAddedNodeRoot(nodeAdds: Set<NodeId>, action: (node: VNode) => void): void {
257
+ if (nodeAdds.has(id)) {
258
+ // This is the root of a newly-added subtree.
259
+ action(self)
260
+ return
261
+ }
262
+
263
+ // This is an existing node, but there may be new nodes among our descendants. Visit
264
+ // children in reverse order to match the ordering that the V1 serialization
265
+ // algorithm would use.
266
+ for (let child = self.lastChild; child; child = child.previousSibling) {
267
+ child.forEachAddedNodeRoot(nodeAdds, action)
268
+ }
269
+ },
270
+
271
+ forSelfAndEachDescendant(action: (node: VNode) => void): void {
272
+ action(self)
273
+ for (let child = self.firstChild; child; child = child.nextSibling) {
274
+ child.forSelfAndEachDescendant(action)
275
+ }
276
+ },
277
+
278
+ mapChildren<Result>(action: (node: VNode) => Result): Result[] {
279
+ const results: Result[] = []
280
+ for (let child = self.firstChild; child; child = child.nextSibling) {
281
+ results.push(action(child))
282
+ }
283
+ return results
284
+ },
285
+
286
+ render(options: V1RenderOptions): SerializedNodeWithId {
287
+ assertConnectedCorrectly()
288
+
289
+ const id = options.nodeIdRemapper?.remap(self.id) ?? self.id
290
+
291
+ switch (data.kind) {
292
+ case '#cdata-section':
293
+ return {
294
+ type: NodeType.CDATA,
295
+ id,
296
+ textContent: '',
297
+ }
298
+
299
+ case '#doctype':
300
+ return {
301
+ type: NodeType.DocumentType,
302
+ id,
303
+ name: data.name,
304
+ publicId: data.publicId,
305
+ systemId: data.systemId,
306
+ }
307
+
308
+ case '#document':
309
+ return {
310
+ type: NodeType.Document,
311
+ id,
312
+ childNodes: self.mapChildren((node) => node.render(options)),
313
+ adoptedStyleSheets: data.attachedStyleSheets?.map((sheet) => sheet.renderAsAdoptedStyleSheet()),
314
+ }
315
+
316
+ case '#document-fragment':
317
+ return {
318
+ type: NodeType.DocumentFragment,
319
+ id,
320
+ childNodes: self.mapChildren((node) => node.render(options)),
321
+ adoptedStyleSheets: data.attachedStyleSheets?.map((sheet) => sheet.renderAsAdoptedStyleSheet()),
322
+ isShadowRoot: false,
323
+ }
324
+
325
+ case '#element': {
326
+ const attributes: Record<string, string | number> = {}
327
+
328
+ // Add size-related virtual attributes before the real DOM attributes, to match
329
+ // the ordering used in the V1 format.
330
+ if (data.width !== undefined && data.height !== undefined) {
331
+ attributes.rr_width = `${data.width}px`
332
+ attributes.rr_height = `${data.height}px`
333
+ }
334
+
335
+ // Add DOM attributes.
336
+ Object.assign(attributes, data.attributes)
337
+
338
+ // Add other virtual attributes after the real DOM attributes, to match the
339
+ // ordering used in the V1 format.
340
+ if (data.attachedStyleSheets !== undefined) {
341
+ attributes._cssText = data.attachedStyleSheets.map((sheet) => sheet.renderAsCssText()).join('')
342
+ }
343
+ if (data.playbackState !== undefined) {
344
+ attributes.rr_mediaState = data.playbackState === PlaybackState.Paused ? 'paused' : 'played'
345
+ }
346
+ if (data.scrollLeft) {
347
+ attributes.rr_scrollLeft = data.scrollLeft
348
+ }
349
+ if (data.scrollTop) {
350
+ attributes.rr_scrollTop = data.scrollTop
351
+ }
352
+
353
+ return {
354
+ type: NodeType.Element,
355
+ id,
356
+ tagName: data.tag,
357
+ attributes,
358
+ childNodes: self.mapChildren((node) => node.render(options)),
359
+ isSVG: data.isSVG === true ? true : undefined,
360
+ }
361
+ }
362
+
363
+ case '#shadow-root':
364
+ return {
365
+ type: NodeType.DocumentFragment,
366
+ id,
367
+ childNodes: self.mapChildren((node) => node.render(options)),
368
+ adoptedStyleSheets: data.attachedStyleSheets?.map((sheet) => sheet.renderAsAdoptedStyleSheet()),
369
+ isShadowRoot: true,
370
+ }
371
+
372
+ case '#text':
373
+ return {
374
+ type: NodeType.Text,
375
+ id,
376
+ textContent: data.textContent,
377
+ }
378
+
379
+ default:
380
+ data satisfies never
381
+ throw new Error(`Rendering not implemented for ${self.data.kind} node ${id}`)
382
+ }
383
+ },
384
+
385
+ get data(): VNodeData {
386
+ return data
387
+ },
388
+ get ownerDocument(): VDocument {
389
+ return document
390
+ },
391
+ get id(): NodeId {
392
+ return id
393
+ },
394
+
395
+ get state(): VNodeState {
396
+ return state
397
+ },
398
+ set state(value: VNodeState) {
399
+ if (
400
+ (state === 'new' && value !== 'connected') ||
401
+ (state === 'connected' && value !== 'disconnected') ||
402
+ state === 'disconnected'
403
+ ) {
404
+ throw new Error(`Invalid state transition from ${state} to ${value}`)
405
+ }
406
+ state = value
407
+ },
408
+
409
+ firstChild: undefined,
410
+ lastChild: undefined,
411
+ previousSibling: undefined,
412
+ nextSibling: undefined,
413
+ parent: undefined,
414
+ }
415
+
416
+ return self
417
+ }
@@ -0,0 +1,47 @@
1
+ import type { StyleSheet } from '../../../../types'
2
+ import type { StyleSheetId } from '../../itemIds'
3
+ import type { VDocument } from './vDocument'
4
+
5
+ export interface VStyleSheet {
6
+ renderAsAdoptedStyleSheet(): StyleSheet
7
+ renderAsCssText(): string
8
+
9
+ get data(): VStyleSheetData
10
+ get id(): StyleSheetId
11
+ get ownerDocument(): VDocument
12
+ }
13
+
14
+ export interface VStyleSheetData {
15
+ disabled: boolean
16
+ mediaList: string[]
17
+ rules: string | string[]
18
+ }
19
+
20
+ export function createVStyleSheet(document: VDocument, id: StyleSheetId, data: VStyleSheetData): VStyleSheet {
21
+ const self: VStyleSheet = {
22
+ renderAsAdoptedStyleSheet(): StyleSheet {
23
+ const cssRules = typeof data.rules === 'string' ? [data.rules] : data.rules
24
+ return {
25
+ cssRules,
26
+ disabled: data.disabled ? true : undefined,
27
+ media: data.mediaList.length > 0 ? data.mediaList : undefined,
28
+ }
29
+ },
30
+
31
+ renderAsCssText(): string {
32
+ return typeof data.rules === 'string' ? data.rules : data.rules.join('')
33
+ },
34
+
35
+ get data(): VStyleSheetData {
36
+ return data
37
+ },
38
+ get id(): StyleSheetId {
39
+ return id
40
+ },
41
+ get ownerDocument(): VDocument {
42
+ return document
43
+ },
44
+ }
45
+
46
+ return self
47
+ }
@@ -0,0 +1,15 @@
1
+ import { ExperimentalFeature, isExperimentalFeatureEnabled } from '@datadog/browser-core'
2
+
3
+ export function isFullSnapshotChangeRecordsEnabled(): boolean {
4
+ // We don't want to have to support the case where full snapshots use the old format and
5
+ // incremental snapshots use the new one, so we should generate full snapshot Change
6
+ // records if either feature flag is enabled.
7
+ return (
8
+ isExperimentalFeatureEnabled(ExperimentalFeature.USE_CHANGE_RECORDS) ||
9
+ isExperimentalFeatureEnabled(ExperimentalFeature.USE_INCREMENTAL_CHANGE_RECORDS)
10
+ )
11
+ }
12
+
13
+ export function isIncrementalSnapshotChangeRecordsEnabled(): boolean {
14
+ return isExperimentalFeatureEnabled(ExperimentalFeature.USE_INCREMENTAL_CHANGE_RECORDS)
15
+ }
@@ -0,0 +1,21 @@
1
+ export type { ChangeConverter, MutationLog, NodeIdRemapper } from './conversions'
2
+ export { createChangeConverter, createCopyingNodeIdRemapper, createIdentityNodeIdRemapper } from './conversions'
3
+ export { isFullSnapshotChangeRecordsEnabled, isIncrementalSnapshotChangeRecordsEnabled } from './experimentalFeatures'
4
+ export { createChildInsertionCursor, createRootInsertionCursor } from './insertionCursor'
5
+ export { getElementInputValue } from './serializationUtils'
6
+ export { serializeFullSnapshot } from './serializeFullSnapshot'
7
+ export { serializeFullSnapshotAsChange } from './serializeFullSnapshotAsChange'
8
+ export { serializeMutations } from './serializeMutations'
9
+ export { serializeMutationsAsChange } from './serializeMutationsAsChange'
10
+ export { serializeNode } from './serializeNode'
11
+ export { serializeNodeAsChange } from './serializeNodeAsChange'
12
+ export { serializeAttribute } from './serializeAttribute'
13
+ export { createSerializationStats, updateSerializationStats, aggregateSerializationStats } from './serializationStats'
14
+ export type { SerializationMetric, SerializationStats } from './serializationStats'
15
+ export { serializeChangesInTransaction, serializeInTransaction, SerializationKind } from './serializationTransaction'
16
+ export type {
17
+ ChangeSerializationTransaction,
18
+ SerializationTransaction,
19
+ SerializationTransactionCallback,
20
+ } from './serializationTransaction'
21
+ export type { ParentNodePrivacyLevel } from './serialization.types'
@@ -0,0 +1,131 @@
1
+ import type { InsertionPoint } from '../../../types'
2
+ import type { NodeId, NodeIds } from '../itemIds'
3
+
4
+ /**
5
+ * InsertionCursor tracks the point at which the next node will be inserted during
6
+ * Change-style DOM serialization.
7
+ *
8
+ * When a new node is added to the document, we use an InsertionPoint to encode its
9
+ * position. There are often multiple equally-valid ways to express the same insertion
10
+ * point; we generally want to favor encodings that use as few characters as possible (to
11
+ * reduce uncompressed size) and that are as repetitive as possible (to reduce compressed
12
+ * size). InsertionCursor's purpose is to heuristically pick an efficient encoding based
13
+ * on the nodes we've recently serialized, while doing as little work as possible. The
14
+ * results are not optimal, but should be close to it in most situations.
15
+ *
16
+ * At the beginning of the serialization process, use a factory function like
17
+ * createRootInsertionCursor() to create a new cursor with an appropriate initial
18
+ * position.
19
+ *
20
+ * When visiting a node, the expected usage pattern is as follows:
21
+ * 1. Call advance() to get a node id and insertion point for the node.
22
+ * 2. Serialize the node.
23
+ * 3. If the node has no children, we're done; continue to the node's next
24
+ * sibling and apply this algorithm again.
25
+ * 4. Otherwise, call descend() to move the cursor into the node's child list.
26
+ * 5. Recursively apply this algorithm.
27
+ * 6. Call ascend() to move the cursor out of the node's child list. We're done;
28
+ * continue to the node's next sibling and apply this algorithm again.
29
+ */
30
+ export interface InsertionCursor {
31
+ /**
32
+ * Given the node id for a new node, returns the InsertionPoint for that node.
33
+ * Updates the cursor to point to the new node's next sibling.
34
+ */
35
+ advance(node: Node): { nodeId: NodeId; insertionPoint: InsertionPoint }
36
+
37
+ /**
38
+ * Ascends out of the current child list and updates the cursor to point to the parent
39
+ * node's next sibling.
40
+ */
41
+ ascend(): void
42
+
43
+ /**
44
+ * Descends into the child list of the last node we inserted and updates the cursor to
45
+ * point to the node's first child.
46
+ */
47
+ descend(): void
48
+ }
49
+
50
+ /** Returns an InsertionCursor which starts positioned at the root of the document. */
51
+ export function createRootInsertionCursor(nodeIds: NodeIds): InsertionCursor {
52
+ return createInsertionCursor(undefined, undefined, nodeIds)
53
+ }
54
+
55
+ /**
56
+ * Returns an InsertionCursor which starts positioned in the child list of the given
57
+ * parent node. If a next sibling is provided, the cursor points to the position
58
+ * immediately before the next sibling; otherwise, the cursor points to the end of the
59
+ * child list.
60
+ */
61
+ export function createChildInsertionCursor(
62
+ parentId: NodeId,
63
+ nextSiblingId: NodeId | undefined,
64
+ nodeIds: NodeIds
65
+ ): InsertionCursor {
66
+ return createInsertionCursor(parentId, nextSiblingId, nodeIds)
67
+ }
68
+
69
+ function createInsertionCursor(
70
+ parentId: NodeId | undefined,
71
+ nextSiblingId: NodeId | undefined,
72
+ nodeIds: NodeIds
73
+ ): InsertionCursor {
74
+ interface ChildListCursor {
75
+ container: ChildListCursor | undefined
76
+ parentId: NodeId | undefined
77
+ previousSiblingId: NodeId | undefined
78
+ nextSiblingId: NodeId | undefined
79
+ }
80
+
81
+ let cursor: ChildListCursor = {
82
+ container: undefined,
83
+ parentId,
84
+ previousSiblingId: undefined,
85
+ nextSiblingId,
86
+ }
87
+
88
+ const computeInsertionPoint = (nodeId: NodeId): InsertionPoint => {
89
+ if (cursor.previousSiblingId === nodeId - 1) {
90
+ // Use an AppendAfterPreviousInsertionPoint. (i.e., 0)
91
+ return 0
92
+ }
93
+ if (cursor.nextSiblingId !== undefined) {
94
+ // Use an InsertBeforeInsertionPoint. We identify the next sibling using a
95
+ // negative integer indicating the difference between the new node's id and its next
96
+ // sibling's id.
97
+ return cursor.nextSiblingId - nodeId
98
+ }
99
+ if (cursor.parentId !== undefined) {
100
+ // Use an AppendChildInsertionPoint. We identify the parent node using a positive
101
+ // integer indicating the difference between the new node's id and its parent's id.
102
+ return nodeId - cursor.parentId
103
+ }
104
+ // There's no parent. Use a RootInsertionPoint. (i.e., null)
105
+ return null
106
+ }
107
+
108
+ return {
109
+ advance(node: Node): { nodeId: NodeId; insertionPoint: InsertionPoint } {
110
+ const nodeId = nodeIds.getOrInsert(node)
111
+ const insertionPoint = computeInsertionPoint(nodeId)
112
+ cursor.previousSiblingId = nodeId
113
+ return { nodeId, insertionPoint }
114
+ },
115
+ ascend(): void {
116
+ if (cursor.container) {
117
+ cursor = cursor.container
118
+ }
119
+ },
120
+ descend(): void {
121
+ if (cursor.previousSiblingId !== undefined) {
122
+ cursor = {
123
+ container: cursor,
124
+ parentId: cursor.previousSiblingId,
125
+ previousSiblingId: undefined,
126
+ nextSiblingId: undefined,
127
+ }
128
+ }
129
+ },
130
+ }
131
+ }
@@ -0,0 +1,38 @@
1
+ import type { NodePrivacyLevel } from '@datadog/browser-rum-core'
2
+
3
+ // Those values are the only one that can be used when inheriting privacy levels from parent to
4
+ // children during serialization, since HIDDEN and IGNORE shouldn't serialize their children. This
5
+ // ensures that no children are serialized when they shouldn't.
6
+ export type ParentNodePrivacyLevel =
7
+ | typeof NodePrivacyLevel.ALLOW
8
+ | typeof NodePrivacyLevel.MASK
9
+ | typeof NodePrivacyLevel.MASK_USER_INPUT
10
+ | typeof NodePrivacyLevel.MASK_UNLESS_ALLOWLISTED
11
+
12
+ /**
13
+ * Virtual attributes. These attributes appear in the serialized attribute map of
14
+ * elements, but they're not actually derived from the DOM; they're used to represent
15
+ * metadata about the element they're attached to.
16
+ */
17
+ export interface VirtualAttributes {
18
+ /**
19
+ * For <style> and <link> elements, the rules in the element's stylesheet, extracted
20
+ * from the CSSOM.
21
+ */
22
+ _cssText?: string
23
+
24
+ /** For <audio> and <video> elements, the playback state of the element's media. */
25
+ rr_mediaState?: 'paused' | 'played'
26
+
27
+ /** For elements which are scroll containers, the element's X scroll position, if non-zero. */
28
+ rr_scrollLeft?: number
29
+
30
+ /** For elements which are scroll containers, the element's Y scroll position, if non-zero. */
31
+ rr_scrollTop?: number
32
+
33
+ /** For HIDDEN elements, the width of the element's bounding client rect. */
34
+ rr_width?: string
35
+
36
+ /** For HIDDEN elements, the height of the element's bounding client rect. */
37
+ rr_height?: string
38
+ }