@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.
- package/LICENSE +201 -0
- package/README.md +25 -0
- package/bundle/chunks/profiler-9f1c1103f1ef0aa98257-datadog-rum.js +1 -0
- package/bundle/chunks/recorder-926b641c6ef51d09a378-datadog-rum.js +1 -0
- package/bundle/datadog-rum.js +1 -0
- package/changes.json +5 -0
- package/cjs/boot/isBrowserSupported.d.ts +4 -0
- package/cjs/boot/isBrowserSupported.js +17 -0
- package/cjs/boot/isBrowserSupported.js.map +1 -0
- package/cjs/boot/lazyLoadProfiler.d.ts +3 -0
- package/cjs/boot/lazyLoadProfiler.js +56 -0
- package/cjs/boot/lazyLoadProfiler.js.map +1 -0
- package/cjs/boot/lazyLoadRecorder.d.ts +3 -0
- package/cjs/boot/lazyLoadRecorder.js +56 -0
- package/cjs/boot/lazyLoadRecorder.js.map +1 -0
- package/cjs/boot/postStartStrategy.d.ts +33 -0
- package/cjs/boot/postStartStrategy.js +98 -0
- package/cjs/boot/postStartStrategy.js.map +1 -0
- package/cjs/boot/preStartStrategy.d.ts +6 -0
- package/cjs/boot/preStartStrategy.js +24 -0
- package/cjs/boot/preStartStrategy.js.map +1 -0
- package/cjs/boot/profilerApi.d.ts +2 -0
- package/cjs/boot/profilerApi.js +52 -0
- package/cjs/boot/profilerApi.js.map +1 -0
- package/cjs/boot/recorderApi.d.ts +3 -0
- package/cjs/boot/recorderApi.js +71 -0
- package/cjs/boot/recorderApi.js.map +1 -0
- package/cjs/boot/startRecording.d.ts +6 -0
- package/cjs/boot/startRecording.js +45 -0
- package/cjs/boot/startRecording.js.map +1 -0
- package/cjs/domain/deflate/deflateEncoder.d.ts +3 -0
- package/cjs/domain/deflate/deflateEncoder.js +110 -0
- package/cjs/domain/deflate/deflateEncoder.js.map +1 -0
- package/cjs/domain/deflate/deflateWorker.d.ts +29 -0
- package/cjs/domain/deflate/deflateWorker.js +105 -0
- package/cjs/domain/deflate/deflateWorker.js.map +1 -0
- package/cjs/domain/deflate/index.d.ts +3 -0
- package/cjs/domain/deflate/index.js +11 -0
- package/cjs/domain/deflate/index.js.map +1 -0
- package/cjs/domain/getSessionReplayLink.d.ts +2 -0
- package/cjs/domain/getSessionReplayLink.js +35 -0
- package/cjs/domain/getSessionReplayLink.js.map +1 -0
- package/cjs/domain/profiling/actionHistory.d.ts +10 -0
- package/cjs/domain/profiling/actionHistory.js +49 -0
- package/cjs/domain/profiling/actionHistory.js.map +1 -0
- package/cjs/domain/profiling/longTaskHistory.d.ts +11 -0
- package/cjs/domain/profiling/longTaskHistory.js +28 -0
- package/cjs/domain/profiling/longTaskHistory.js.map +1 -0
- package/cjs/domain/profiling/profiler.d.ts +7 -0
- package/cjs/domain/profiling/profiler.js +267 -0
- package/cjs/domain/profiling/profiler.js.map +1 -0
- package/cjs/domain/profiling/profilingContext.d.ts +6 -0
- package/cjs/domain/profiling/profilingContext.js +31 -0
- package/cjs/domain/profiling/profilingContext.js.map +1 -0
- package/cjs/domain/profiling/profilingSupported.d.ts +1 -0
- package/cjs/domain/profiling/profilingSupported.js +11 -0
- package/cjs/domain/profiling/profilingSupported.js.map +1 -0
- package/cjs/domain/profiling/test-utils/mockedTrace.d.ts +3 -0
- package/cjs/domain/profiling/test-utils/mockedTrace.js +57 -0
- package/cjs/domain/profiling/test-utils/mockedTrace.js.map +1 -0
- package/cjs/domain/profiling/transport/assembly.d.ts +7 -0
- package/cjs/domain/profiling/transport/assembly.js +45 -0
- package/cjs/domain/profiling/transport/assembly.js.map +1 -0
- package/cjs/domain/profiling/transport/buildProfileEventAttributes.d.ts +33 -0
- package/cjs/domain/profiling/transport/buildProfileEventAttributes.js +63 -0
- package/cjs/domain/profiling/transport/buildProfileEventAttributes.js.map +1 -0
- package/cjs/domain/profiling/types/index.d.ts +2 -0
- package/cjs/domain/profiling/types/index.js +3 -0
- package/cjs/domain/profiling/types/index.js.map +1 -0
- package/cjs/domain/profiling/types/profilerApi.types.d.ts +58 -0
- package/cjs/domain/profiling/types/profilerApi.types.js +5 -0
- package/cjs/domain/profiling/types/profilerApi.types.js.map +1 -0
- package/cjs/domain/profiling/types/rumProfiler.types.d.ts +55 -0
- package/cjs/domain/profiling/types/rumProfiler.types.js +3 -0
- package/cjs/domain/profiling/types/rumProfiler.types.js.map +1 -0
- package/cjs/domain/profiling/utils/getCustomOrDefaultViewName.d.ts +1 -0
- package/cjs/domain/profiling/utils/getCustomOrDefaultViewName.js +7 -0
- package/cjs/domain/profiling/utils/getCustomOrDefaultViewName.js.map +1 -0
- package/cjs/domain/profiling/utils/getDefaultViewName.d.ts +1 -0
- package/cjs/domain/profiling/utils/getDefaultViewName.js +14 -0
- package/cjs/domain/profiling/utils/getDefaultViewName.js.map +1 -0
- package/cjs/domain/profiling/utils/getNumberOfSamples.d.ts +8 -0
- package/cjs/domain/profiling/utils/getNumberOfSamples.js +19 -0
- package/cjs/domain/profiling/utils/getNumberOfSamples.js.map +1 -0
- package/cjs/domain/profiling/vitalHistory.d.ts +10 -0
- package/cjs/domain/profiling/vitalHistory.js +42 -0
- package/cjs/domain/profiling/vitalHistory.js.map +1 -0
- package/cjs/domain/record/assembly.d.ts +3 -0
- package/cjs/domain/record/assembly.js +16 -0
- package/cjs/domain/record/assembly.js.map +1 -0
- package/cjs/domain/record/elementsScrollPositions.d.ts +10 -0
- package/cjs/domain/record/elementsScrollPositions.js +23 -0
- package/cjs/domain/record/elementsScrollPositions.js.map +1 -0
- package/cjs/domain/record/eventsUtils.d.ts +2 -0
- package/cjs/domain/record/eventsUtils.js +15 -0
- package/cjs/domain/record/eventsUtils.js.map +1 -0
- package/cjs/domain/record/index.d.ts +6 -0
- package/cjs/domain/record/index.js +17 -0
- package/cjs/domain/record/index.js.map +1 -0
- package/cjs/domain/record/internalApi.d.ts +22 -0
- package/cjs/domain/record/internalApi.js +55 -0
- package/cjs/domain/record/internalApi.js.map +1 -0
- package/cjs/domain/record/itemIds.d.ts +40 -0
- package/cjs/domain/record/itemIds.js +58 -0
- package/cjs/domain/record/itemIds.js.map +1 -0
- package/cjs/domain/record/mutationBatch.d.ts +12 -0
- package/cjs/domain/record/mutationBatch.js +44 -0
- package/cjs/domain/record/mutationBatch.js.map +1 -0
- package/cjs/domain/record/record.d.ts +16 -0
- package/cjs/domain/record/record.js +88 -0
- package/cjs/domain/record/record.js.map +1 -0
- package/cjs/domain/record/record.types.d.ts +18 -0
- package/cjs/domain/record/record.types.js +3 -0
- package/cjs/domain/record/record.types.js.map +1 -0
- package/cjs/domain/record/recordingScope.d.ts +24 -0
- package/cjs/domain/record/recordingScope.js +29 -0
- package/cjs/domain/record/recordingScope.js.map +1 -0
- package/cjs/domain/record/serialization/changeEncoder.d.ts +22 -0
- package/cjs/domain/record/serialization/changeEncoder.js +59 -0
- package/cjs/domain/record/serialization/changeEncoder.js.map +1 -0
- package/cjs/domain/record/serialization/conversions/changeConverter.d.ts +10 -0
- package/cjs/domain/record/serialization/conversions/changeConverter.js +216 -0
- package/cjs/domain/record/serialization/conversions/changeConverter.js.map +1 -0
- package/cjs/domain/record/serialization/conversions/changeDecoder.d.ts +16 -0
- package/cjs/domain/record/serialization/conversions/changeDecoder.js +137 -0
- package/cjs/domain/record/serialization/conversions/changeDecoder.js.map +1 -0
- package/cjs/domain/record/serialization/conversions/index.d.ts +7 -0
- package/cjs/domain/record/serialization/conversions/index.js +11 -0
- package/cjs/domain/record/serialization/conversions/index.js.map +1 -0
- package/cjs/domain/record/serialization/conversions/mutationLog.d.ts +15 -0
- package/cjs/domain/record/serialization/conversions/mutationLog.js +36 -0
- package/cjs/domain/record/serialization/conversions/mutationLog.js.map +1 -0
- package/cjs/domain/record/serialization/conversions/nodeIdRemapper.d.ts +10 -0
- package/cjs/domain/record/serialization/conversions/nodeIdRemapper.js +53 -0
- package/cjs/domain/record/serialization/conversions/nodeIdRemapper.js.map +1 -0
- package/cjs/domain/record/serialization/conversions/renderOptions.d.ts +6 -0
- package/cjs/domain/record/serialization/conversions/renderOptions.js +12 -0
- package/cjs/domain/record/serialization/conversions/renderOptions.js.map +1 -0
- package/cjs/domain/record/serialization/conversions/stringTable.d.ts +5 -0
- package/cjs/domain/record/serialization/conversions/stringTable.js +22 -0
- package/cjs/domain/record/serialization/conversions/stringTable.js.map +1 -0
- package/cjs/domain/record/serialization/conversions/vDocument.d.ts +23 -0
- package/cjs/domain/record/serialization/conversions/vDocument.js +176 -0
- package/cjs/domain/record/serialization/conversions/vDocument.js.map +1 -0
- package/cjs/domain/record/serialization/conversions/vNode.d.ts +66 -0
- package/cjs/domain/record/serialization/conversions/vNode.js +285 -0
- package/cjs/domain/record/serialization/conversions/vNode.js.map +1 -0
- package/cjs/domain/record/serialization/conversions/vStyleSheet.d.ts +16 -0
- package/cjs/domain/record/serialization/conversions/vStyleSheet.js +29 -0
- package/cjs/domain/record/serialization/conversions/vStyleSheet.js.map +1 -0
- package/cjs/domain/record/serialization/experimentalFeatures.d.ts +2 -0
- package/cjs/domain/record/serialization/experimentalFeatures.js +16 -0
- package/cjs/domain/record/serialization/experimentalFeatures.js.map +1 -0
- package/cjs/domain/record/serialization/index.d.ts +17 -0
- package/cjs/domain/record/serialization/index.js +37 -0
- package/cjs/domain/record/serialization/index.js.map +1 -0
- package/cjs/domain/record/serialization/insertionCursor.d.ts +57 -0
- package/cjs/domain/record/serialization/insertionCursor.js +68 -0
- package/cjs/domain/record/serialization/insertionCursor.js.map +1 -0
- package/cjs/domain/record/serialization/serialization.types.d.ts +24 -0
- package/cjs/domain/record/serialization/serialization.types.js +3 -0
- package/cjs/domain/record/serialization/serialization.types.js.map +1 -0
- package/cjs/domain/record/serialization/serializationStats.d.ts +12 -0
- package/cjs/domain/record/serialization/serializationStats.js +32 -0
- package/cjs/domain/record/serialization/serializationStats.js.map +1 -0
- package/cjs/domain/record/serialization/serializationTransaction.d.ts +96 -0
- package/cjs/domain/record/serialization/serializationTransaction.js +103 -0
- package/cjs/domain/record/serialization/serializationTransaction.js.map +1 -0
- package/cjs/domain/record/serialization/serializationUtils.d.ts +18 -0
- package/cjs/domain/record/serialization/serializationUtils.js +88 -0
- package/cjs/domain/record/serialization/serializationUtils.js.map +1 -0
- package/cjs/domain/record/serialization/serializeAttribute.d.ts +4 -0
- package/cjs/domain/record/serialization/serializeAttribute.js +42 -0
- package/cjs/domain/record/serialization/serializeAttribute.js.map +1 -0
- package/cjs/domain/record/serialization/serializeAttributes.d.ts +7 -0
- package/cjs/domain/record/serialization/serializeAttributes.js +167 -0
- package/cjs/domain/record/serialization/serializeAttributes.js.map +1 -0
- package/cjs/domain/record/serialization/serializeFullSnapshot.d.ts +5 -0
- package/cjs/domain/record/serialization/serializeFullSnapshot.js +34 -0
- package/cjs/domain/record/serialization/serializeFullSnapshot.js.map +1 -0
- package/cjs/domain/record/serialization/serializeFullSnapshotAsChange.d.ts +5 -0
- package/cjs/domain/record/serialization/serializeFullSnapshotAsChange.js +13 -0
- package/cjs/domain/record/serialization/serializeFullSnapshotAsChange.js.map +1 -0
- package/cjs/domain/record/serialization/serializeMutations.d.ts +11 -0
- package/cjs/domain/record/serialization/serializeMutations.js +262 -0
- package/cjs/domain/record/serialization/serializeMutations.js.map +1 -0
- package/cjs/domain/record/serialization/serializeMutationsAsChange.d.ts +5 -0
- package/cjs/domain/record/serialization/serializeMutationsAsChange.js +204 -0
- package/cjs/domain/record/serialization/serializeMutationsAsChange.js.map +1 -0
- package/cjs/domain/record/serialization/serializeNode.d.ts +7 -0
- package/cjs/domain/record/serialization/serializeNode.js +154 -0
- package/cjs/domain/record/serialization/serializeNode.js.map +1 -0
- package/cjs/domain/record/serialization/serializeNodeAsChange.d.ts +4 -0
- package/cjs/domain/record/serialization/serializeNodeAsChange.js +153 -0
- package/cjs/domain/record/serialization/serializeNodeAsChange.js.map +1 -0
- package/cjs/domain/record/serialization/serializeStyleSheets.d.ts +3 -0
- package/cjs/domain/record/serialization/serializeStyleSheets.js +30 -0
- package/cjs/domain/record/serialization/serializeStyleSheets.js.map +1 -0
- package/cjs/domain/record/serializationVerifier.d.ts +18 -0
- package/cjs/domain/record/serializationVerifier.js +126 -0
- package/cjs/domain/record/serializationVerifier.js.map +1 -0
- package/cjs/domain/record/shadowRootsController.d.ts +11 -0
- package/cjs/domain/record/shadowRootsController.js +45 -0
- package/cjs/domain/record/shadowRootsController.js.map +1 -0
- package/cjs/domain/record/startFullSnapshots.d.ts +10 -0
- package/cjs/domain/record/startFullSnapshots.js +50 -0
- package/cjs/domain/record/startFullSnapshots.js.map +1 -0
- package/cjs/domain/record/trackers/index.d.ts +12 -0
- package/cjs/domain/record/trackers/index.js +27 -0
- package/cjs/domain/record/trackers/index.js.map +1 -0
- package/cjs/domain/record/trackers/trackFocus.d.ts +5 -0
- package/cjs/domain/record/trackers/trackFocus.js +15 -0
- package/cjs/domain/record/trackers/trackFocus.js.map +1 -0
- package/cjs/domain/record/trackers/trackFrustration.d.ts +6 -0
- package/cjs/domain/record/trackers/trackFrustration.js +31 -0
- package/cjs/domain/record/trackers/trackFrustration.js.map +1 -0
- package/cjs/domain/record/trackers/trackInput.d.ts +4 -0
- package/cjs/domain/record/trackers/trackInput.js +104 -0
- package/cjs/domain/record/trackers/trackInput.js.map +1 -0
- package/cjs/domain/record/trackers/trackMediaInteraction.d.ts +5 -0
- package/cjs/domain/record/trackers/trackMediaInteraction.js +29 -0
- package/cjs/domain/record/trackers/trackMediaInteraction.js.map +1 -0
- package/cjs/domain/record/trackers/trackMouseInteraction.d.ts +5 -0
- package/cjs/domain/record/trackers/trackMouseInteraction.js +59 -0
- package/cjs/domain/record/trackers/trackMouseInteraction.js.map +1 -0
- package/cjs/domain/record/trackers/trackMove.d.ts +9 -0
- package/cjs/domain/record/trackers/trackMove.js +55 -0
- package/cjs/domain/record/trackers/trackMove.js.map +1 -0
- package/cjs/domain/record/trackers/trackMutation.d.ts +13 -0
- package/cjs/domain/record/trackers/trackMutation.js +41 -0
- package/cjs/domain/record/trackers/trackMutation.js.map +1 -0
- package/cjs/domain/record/trackers/trackScroll.d.ts +5 -0
- package/cjs/domain/record/trackers/trackScroll.js +48 -0
- package/cjs/domain/record/trackers/trackScroll.js.map +1 -0
- package/cjs/domain/record/trackers/trackStyleSheet.d.ts +6 -0
- package/cjs/domain/record/trackers/trackStyleSheet.js +89 -0
- package/cjs/domain/record/trackers/trackStyleSheet.js.map +1 -0
- package/cjs/domain/record/trackers/trackViewEnd.d.ts +5 -0
- package/cjs/domain/record/trackers/trackViewEnd.js +20 -0
- package/cjs/domain/record/trackers/trackViewEnd.js.map +1 -0
- package/cjs/domain/record/trackers/trackViewportResize.d.ts +6 -0
- package/cjs/domain/record/trackers/trackViewportResize.js +46 -0
- package/cjs/domain/record/trackers/trackViewportResize.js.map +1 -0
- package/cjs/domain/record/trackers/tracker.types.d.ts +3 -0
- package/cjs/domain/record/trackers/tracker.types.js +3 -0
- package/cjs/domain/record/trackers/tracker.types.js.map +1 -0
- package/cjs/domain/record/viewports.d.ts +20 -0
- package/cjs/domain/record/viewports.js +60 -0
- package/cjs/domain/record/viewports.js.map +1 -0
- package/cjs/domain/replayStats.d.ts +8 -0
- package/cjs/domain/replayStats.js +60 -0
- package/cjs/domain/replayStats.js.map +1 -0
- package/cjs/domain/scriptLoadingError.d.ts +6 -0
- package/cjs/domain/scriptLoadingError.js +26 -0
- package/cjs/domain/scriptLoadingError.js.map +1 -0
- package/cjs/domain/segmentCollection/buildReplayPayload.d.ts +15 -0
- package/cjs/domain/segmentCollection/buildReplayPayload.js +26 -0
- package/cjs/domain/segmentCollection/buildReplayPayload.js.map +1 -0
- package/cjs/domain/segmentCollection/index.d.ts +4 -0
- package/cjs/domain/segmentCollection/index.js +11 -0
- package/cjs/domain/segmentCollection/index.js.map +1 -0
- package/cjs/domain/segmentCollection/segment.d.ts +16 -0
- package/cjs/domain/segmentCollection/segment.js +82 -0
- package/cjs/domain/segmentCollection/segment.js.map +1 -0
- package/cjs/domain/segmentCollection/segmentCollection.d.ts +31 -0
- package/cjs/domain/segmentCollection/segmentCollection.js +113 -0
- package/cjs/domain/segmentCollection/segmentCollection.js.map +1 -0
- package/cjs/domain/segmentCollection/startSegmentTelemetry.d.ts +6 -0
- package/cjs/domain/segmentCollection/startSegmentTelemetry.js +52 -0
- package/cjs/domain/segmentCollection/startSegmentTelemetry.js.map +1 -0
- package/cjs/domain/startRecordBridge.d.ts +5 -0
- package/cjs/domain/startRecordBridge.js +17 -0
- package/cjs/domain/startRecordBridge.js.map +1 -0
- package/cjs/domain/startRecorderInitTelemetry.d.ts +15 -0
- package/cjs/domain/startRecorderInitTelemetry.js +55 -0
- package/cjs/domain/startRecorderInitTelemetry.js.map +1 -0
- package/cjs/entries/internal.d.ts +11 -0
- package/cjs/entries/internal.js +28 -0
- package/cjs/entries/internal.js.map +1 -0
- package/cjs/entries/internalSynthetics.d.ts +2 -0
- package/cjs/entries/internalSynthetics.js +27 -0
- package/cjs/entries/internalSynthetics.js.map +1 -0
- package/cjs/entries/main.d.ts +23 -0
- package/cjs/entries/main.js +35 -0
- package/cjs/entries/main.js.map +1 -0
- package/cjs/types/index.d.ts +3 -0
- package/cjs/types/index.js +18 -0
- package/cjs/types/index.js.map +1 -0
- package/cjs/types/profiling.d.ts +296 -0
- package/cjs/types/profiling.js +6 -0
- package/cjs/types/profiling.js.map +1 -0
- package/cjs/types/sessionReplay.d.ts +934 -0
- package/cjs/types/sessionReplay.js +6 -0
- package/cjs/types/sessionReplay.js.map +1 -0
- package/cjs/types/sessionReplayConstants.d.ts +71 -0
- package/cjs/types/sessionReplayConstants.js +67 -0
- package/cjs/types/sessionReplayConstants.js.map +1 -0
- package/esm/boot/isBrowserSupported.d.ts +4 -0
- package/esm/boot/isBrowserSupported.js +14 -0
- package/esm/boot/isBrowserSupported.js.map +1 -0
- package/esm/boot/lazyLoadProfiler.d.ts +3 -0
- package/esm/boot/lazyLoadProfiler.js +19 -0
- package/esm/boot/lazyLoadProfiler.js.map +1 -0
- package/esm/boot/lazyLoadRecorder.d.ts +3 -0
- package/esm/boot/lazyLoadRecorder.js +19 -0
- package/esm/boot/lazyLoadRecorder.js.map +1 -0
- package/esm/boot/postStartStrategy.d.ts +33 -0
- package/esm/boot/postStartStrategy.js +95 -0
- package/esm/boot/postStartStrategy.js.map +1 -0
- package/esm/boot/preStartStrategy.d.ts +6 -0
- package/esm/boot/preStartStrategy.js +21 -0
- package/esm/boot/preStartStrategy.js.map +1 -0
- package/esm/boot/profilerApi.d.ts +2 -0
- package/esm/boot/profilerApi.js +49 -0
- package/esm/boot/profilerApi.js.map +1 -0
- package/esm/boot/recorderApi.d.ts +3 -0
- package/esm/boot/recorderApi.js +68 -0
- package/esm/boot/recorderApi.js.map +1 -0
- package/esm/boot/startRecording.d.ts +6 -0
- package/esm/boot/startRecording.js +42 -0
- package/esm/boot/startRecording.js.map +1 -0
- package/esm/domain/deflate/deflateEncoder.d.ts +3 -0
- package/esm/domain/deflate/deflateEncoder.js +107 -0
- package/esm/domain/deflate/deflateEncoder.js.map +1 -0
- package/esm/domain/deflate/deflateWorker.d.ts +29 -0
- package/esm/domain/deflate/deflateWorker.js +97 -0
- package/esm/domain/deflate/deflateWorker.js.map +1 -0
- package/esm/domain/deflate/index.d.ts +3 -0
- package/esm/domain/deflate/index.js +3 -0
- package/esm/domain/deflate/index.js.map +1 -0
- package/esm/domain/getSessionReplayLink.d.ts +2 -0
- package/esm/domain/getSessionReplayLink.js +32 -0
- package/esm/domain/getSessionReplayLink.js.map +1 -0
- package/esm/domain/profiling/actionHistory.d.ts +10 -0
- package/esm/domain/profiling/actionHistory.js +45 -0
- package/esm/domain/profiling/actionHistory.js.map +1 -0
- package/esm/domain/profiling/longTaskHistory.d.ts +11 -0
- package/esm/domain/profiling/longTaskHistory.js +24 -0
- package/esm/domain/profiling/longTaskHistory.js.map +1 -0
- package/esm/domain/profiling/profiler.d.ts +7 -0
- package/esm/domain/profiling/profiler.js +263 -0
- package/esm/domain/profiling/profiler.js.map +1 -0
- package/esm/domain/profiling/profilingContext.d.ts +6 -0
- package/esm/domain/profiling/profilingContext.js +28 -0
- package/esm/domain/profiling/profilingContext.js.map +1 -0
- package/esm/domain/profiling/profilingSupported.d.ts +1 -0
- package/esm/domain/profiling/profilingSupported.js +8 -0
- package/esm/domain/profiling/profilingSupported.js.map +1 -0
- package/esm/domain/profiling/test-utils/mockedTrace.d.ts +3 -0
- package/esm/domain/profiling/test-utils/mockedTrace.js +54 -0
- package/esm/domain/profiling/test-utils/mockedTrace.js.map +1 -0
- package/esm/domain/profiling/transport/assembly.d.ts +7 -0
- package/esm/domain/profiling/transport/assembly.js +42 -0
- package/esm/domain/profiling/transport/assembly.js.map +1 -0
- package/esm/domain/profiling/transport/buildProfileEventAttributes.d.ts +33 -0
- package/esm/domain/profiling/transport/buildProfileEventAttributes.js +60 -0
- package/esm/domain/profiling/transport/buildProfileEventAttributes.js.map +1 -0
- package/esm/domain/profiling/types/index.d.ts +2 -0
- package/esm/domain/profiling/types/index.js +2 -0
- package/esm/domain/profiling/types/index.js.map +1 -0
- package/esm/domain/profiling/types/profilerApi.types.d.ts +58 -0
- package/esm/domain/profiling/types/profilerApi.types.js +4 -0
- package/esm/domain/profiling/types/profilerApi.types.js.map +1 -0
- package/esm/domain/profiling/types/rumProfiler.types.d.ts +55 -0
- package/esm/domain/profiling/types/rumProfiler.types.js +2 -0
- package/esm/domain/profiling/types/rumProfiler.types.js.map +1 -0
- package/esm/domain/profiling/utils/getCustomOrDefaultViewName.d.ts +1 -0
- package/esm/domain/profiling/utils/getCustomOrDefaultViewName.js +3 -0
- package/esm/domain/profiling/utils/getCustomOrDefaultViewName.js.map +1 -0
- package/esm/domain/profiling/utils/getDefaultViewName.d.ts +1 -0
- package/esm/domain/profiling/utils/getDefaultViewName.js +11 -0
- package/esm/domain/profiling/utils/getDefaultViewName.js.map +1 -0
- package/esm/domain/profiling/utils/getNumberOfSamples.d.ts +8 -0
- package/esm/domain/profiling/utils/getNumberOfSamples.js +16 -0
- package/esm/domain/profiling/utils/getNumberOfSamples.js.map +1 -0
- package/esm/domain/profiling/vitalHistory.d.ts +10 -0
- package/esm/domain/profiling/vitalHistory.js +38 -0
- package/esm/domain/profiling/vitalHistory.js.map +1 -0
- package/esm/domain/record/assembly.d.ts +3 -0
- package/esm/domain/record/assembly.js +13 -0
- package/esm/domain/record/assembly.js.map +1 -0
- package/esm/domain/record/elementsScrollPositions.d.ts +10 -0
- package/esm/domain/record/elementsScrollPositions.js +20 -0
- package/esm/domain/record/elementsScrollPositions.js.map +1 -0
- package/esm/domain/record/eventsUtils.d.ts +2 -0
- package/esm/domain/record/eventsUtils.js +11 -0
- package/esm/domain/record/eventsUtils.js.map +1 -0
- package/esm/domain/record/index.d.ts +6 -0
- package/esm/domain/record/index.js +5 -0
- package/esm/domain/record/index.js.map +1 -0
- package/esm/domain/record/internalApi.d.ts +22 -0
- package/esm/domain/record/internalApi.js +51 -0
- package/esm/domain/record/internalApi.js.map +1 -0
- package/esm/domain/record/itemIds.d.ts +40 -0
- package/esm/domain/record/itemIds.js +52 -0
- package/esm/domain/record/itemIds.js.map +1 -0
- package/esm/domain/record/mutationBatch.d.ts +12 -0
- package/esm/domain/record/mutationBatch.js +40 -0
- package/esm/domain/record/mutationBatch.js.map +1 -0
- package/esm/domain/record/record.d.ts +16 -0
- package/esm/domain/record/record.js +52 -0
- package/esm/domain/record/record.js.map +1 -0
- package/esm/domain/record/record.types.d.ts +18 -0
- package/esm/domain/record/record.types.js +2 -0
- package/esm/domain/record/record.types.js.map +1 -0
- package/esm/domain/record/recordingScope.d.ts +24 -0
- package/esm/domain/record/recordingScope.js +26 -0
- package/esm/domain/record/recordingScope.js.map +1 -0
- package/esm/domain/record/serialization/changeEncoder.d.ts +22 -0
- package/esm/domain/record/serialization/changeEncoder.js +56 -0
- package/esm/domain/record/serialization/changeEncoder.js.map +1 -0
- package/esm/domain/record/serialization/conversions/changeConverter.d.ts +10 -0
- package/esm/domain/record/serialization/conversions/changeConverter.js +213 -0
- package/esm/domain/record/serialization/conversions/changeConverter.js.map +1 -0
- package/esm/domain/record/serialization/conversions/changeDecoder.d.ts +16 -0
- package/esm/domain/record/serialization/conversions/changeDecoder.js +134 -0
- package/esm/domain/record/serialization/conversions/changeDecoder.js.map +1 -0
- package/esm/domain/record/serialization/conversions/index.d.ts +7 -0
- package/esm/domain/record/serialization/conversions/index.js +4 -0
- package/esm/domain/record/serialization/conversions/index.js.map +1 -0
- package/esm/domain/record/serialization/conversions/mutationLog.d.ts +15 -0
- package/esm/domain/record/serialization/conversions/mutationLog.js +33 -0
- package/esm/domain/record/serialization/conversions/mutationLog.js.map +1 -0
- package/esm/domain/record/serialization/conversions/nodeIdRemapper.d.ts +10 -0
- package/esm/domain/record/serialization/conversions/nodeIdRemapper.js +49 -0
- package/esm/domain/record/serialization/conversions/nodeIdRemapper.js.map +1 -0
- package/esm/domain/record/serialization/conversions/renderOptions.d.ts +6 -0
- package/esm/domain/record/serialization/conversions/renderOptions.js +9 -0
- package/esm/domain/record/serialization/conversions/renderOptions.js.map +1 -0
- package/esm/domain/record/serialization/conversions/stringTable.d.ts +5 -0
- package/esm/domain/record/serialization/conversions/stringTable.js +19 -0
- package/esm/domain/record/serialization/conversions/stringTable.js.map +1 -0
- package/esm/domain/record/serialization/conversions/vDocument.d.ts +23 -0
- package/esm/domain/record/serialization/conversions/vDocument.js +173 -0
- package/esm/domain/record/serialization/conversions/vDocument.js.map +1 -0
- package/esm/domain/record/serialization/conversions/vNode.d.ts +66 -0
- package/esm/domain/record/serialization/conversions/vNode.js +282 -0
- package/esm/domain/record/serialization/conversions/vNode.js.map +1 -0
- package/esm/domain/record/serialization/conversions/vStyleSheet.d.ts +16 -0
- package/esm/domain/record/serialization/conversions/vStyleSheet.js +26 -0
- package/esm/domain/record/serialization/conversions/vStyleSheet.js.map +1 -0
- package/esm/domain/record/serialization/experimentalFeatures.d.ts +2 -0
- package/esm/domain/record/serialization/experimentalFeatures.js +12 -0
- package/esm/domain/record/serialization/experimentalFeatures.js.map +1 -0
- package/esm/domain/record/serialization/index.d.ts +17 -0
- package/esm/domain/record/serialization/index.js +14 -0
- package/esm/domain/record/serialization/index.js.map +1 -0
- package/esm/domain/record/serialization/insertionCursor.d.ts +57 -0
- package/esm/domain/record/serialization/insertionCursor.js +64 -0
- package/esm/domain/record/serialization/insertionCursor.js.map +1 -0
- package/esm/domain/record/serialization/serialization.types.d.ts +24 -0
- package/esm/domain/record/serialization/serialization.types.js +2 -0
- package/esm/domain/record/serialization/serialization.types.js.map +1 -0
- package/esm/domain/record/serialization/serializationStats.d.ts +12 -0
- package/esm/domain/record/serialization/serializationStats.js +27 -0
- package/esm/domain/record/serialization/serializationStats.js.map +1 -0
- package/esm/domain/record/serialization/serializationTransaction.d.ts +96 -0
- package/esm/domain/record/serialization/serializationTransaction.js +99 -0
- package/esm/domain/record/serialization/serializationTransaction.js.map +1 -0
- package/esm/domain/record/serialization/serializationUtils.d.ts +18 -0
- package/esm/domain/record/serialization/serializationUtils.js +80 -0
- package/esm/domain/record/serialization/serializationUtils.js.map +1 -0
- package/esm/domain/record/serialization/serializeAttribute.d.ts +4 -0
- package/esm/domain/record/serialization/serializeAttribute.js +38 -0
- package/esm/domain/record/serialization/serializeAttribute.js.map +1 -0
- package/esm/domain/record/serialization/serializeAttributes.d.ts +7 -0
- package/esm/domain/record/serialization/serializeAttributes.js +161 -0
- package/esm/domain/record/serialization/serializeAttributes.js.map +1 -0
- package/esm/domain/record/serialization/serializeFullSnapshot.d.ts +5 -0
- package/esm/domain/record/serialization/serializeFullSnapshot.js +31 -0
- package/esm/domain/record/serialization/serializeFullSnapshot.js.map +1 -0
- package/esm/domain/record/serialization/serializeFullSnapshotAsChange.d.ts +5 -0
- package/esm/domain/record/serialization/serializeFullSnapshotAsChange.js +10 -0
- package/esm/domain/record/serialization/serializeFullSnapshotAsChange.js.map +1 -0
- package/esm/domain/record/serialization/serializeMutations.d.ts +11 -0
- package/esm/domain/record/serialization/serializeMutations.js +257 -0
- package/esm/domain/record/serialization/serializeMutations.js.map +1 -0
- package/esm/domain/record/serialization/serializeMutationsAsChange.d.ts +5 -0
- package/esm/domain/record/serialization/serializeMutationsAsChange.js +201 -0
- package/esm/domain/record/serialization/serializeMutationsAsChange.js.map +1 -0
- package/esm/domain/record/serialization/serializeNode.d.ts +7 -0
- package/esm/domain/record/serialization/serializeNode.js +149 -0
- package/esm/domain/record/serialization/serializeNode.js.map +1 -0
- package/esm/domain/record/serialization/serializeNodeAsChange.d.ts +4 -0
- package/esm/domain/record/serialization/serializeNodeAsChange.js +150 -0
- package/esm/domain/record/serialization/serializeNodeAsChange.js.map +1 -0
- package/esm/domain/record/serialization/serializeStyleSheets.d.ts +3 -0
- package/esm/domain/record/serialization/serializeStyleSheets.js +27 -0
- package/esm/domain/record/serialization/serializeStyleSheets.js.map +1 -0
- package/esm/domain/record/serializationVerifier.d.ts +18 -0
- package/esm/domain/record/serializationVerifier.js +123 -0
- package/esm/domain/record/serializationVerifier.js.map +1 -0
- package/esm/domain/record/shadowRootsController.d.ts +11 -0
- package/esm/domain/record/shadowRootsController.js +41 -0
- package/esm/domain/record/shadowRootsController.js.map +1 -0
- package/esm/domain/record/startFullSnapshots.d.ts +10 -0
- package/esm/domain/record/startFullSnapshots.js +46 -0
- package/esm/domain/record/startFullSnapshots.js.map +1 -0
- package/esm/domain/record/trackers/index.d.ts +12 -0
- package/esm/domain/record/trackers/index.js +12 -0
- package/esm/domain/record/trackers/index.js.map +1 -0
- package/esm/domain/record/trackers/trackFocus.d.ts +5 -0
- package/esm/domain/record/trackers/trackFocus.js +12 -0
- package/esm/domain/record/trackers/trackFocus.js.map +1 -0
- package/esm/domain/record/trackers/trackFrustration.d.ts +6 -0
- package/esm/domain/record/trackers/trackFrustration.js +28 -0
- package/esm/domain/record/trackers/trackFrustration.js.map +1 -0
- package/esm/domain/record/trackers/trackInput.d.ts +4 -0
- package/esm/domain/record/trackers/trackInput.js +101 -0
- package/esm/domain/record/trackers/trackInput.js.map +1 -0
- package/esm/domain/record/trackers/trackMediaInteraction.d.ts +5 -0
- package/esm/domain/record/trackers/trackMediaInteraction.js +26 -0
- package/esm/domain/record/trackers/trackMediaInteraction.js.map +1 -0
- package/esm/domain/record/trackers/trackMouseInteraction.d.ts +5 -0
- package/esm/domain/record/trackers/trackMouseInteraction.js +56 -0
- package/esm/domain/record/trackers/trackMouseInteraction.js.map +1 -0
- package/esm/domain/record/trackers/trackMove.d.ts +9 -0
- package/esm/domain/record/trackers/trackMove.js +51 -0
- package/esm/domain/record/trackers/trackMove.js.map +1 -0
- package/esm/domain/record/trackers/trackMutation.d.ts +13 -0
- package/esm/domain/record/trackers/trackMutation.js +38 -0
- package/esm/domain/record/trackers/trackMutation.js.map +1 -0
- package/esm/domain/record/trackers/trackScroll.d.ts +5 -0
- package/esm/domain/record/trackers/trackScroll.js +45 -0
- package/esm/domain/record/trackers/trackScroll.js.map +1 -0
- package/esm/domain/record/trackers/trackStyleSheet.d.ts +6 -0
- package/esm/domain/record/trackers/trackStyleSheet.js +85 -0
- package/esm/domain/record/trackers/trackStyleSheet.js.map +1 -0
- package/esm/domain/record/trackers/trackViewEnd.d.ts +5 -0
- package/esm/domain/record/trackers/trackViewEnd.js +17 -0
- package/esm/domain/record/trackers/trackViewEnd.js.map +1 -0
- package/esm/domain/record/trackers/trackViewportResize.d.ts +6 -0
- package/esm/domain/record/trackers/trackViewportResize.js +42 -0
- package/esm/domain/record/trackers/trackViewportResize.js.map +1 -0
- package/esm/domain/record/trackers/tracker.types.d.ts +3 -0
- package/esm/domain/record/trackers/tracker.types.js +2 -0
- package/esm/domain/record/trackers/tracker.types.js.map +1 -0
- package/esm/domain/record/viewports.d.ts +20 -0
- package/esm/domain/record/viewports.js +55 -0
- package/esm/domain/record/viewports.js.map +1 -0
- package/esm/domain/replayStats.d.ts +8 -0
- package/esm/domain/replayStats.js +51 -0
- package/esm/domain/replayStats.js.map +1 -0
- package/esm/domain/scriptLoadingError.d.ts +6 -0
- package/esm/domain/scriptLoadingError.js +23 -0
- package/esm/domain/scriptLoadingError.js.map +1 -0
- package/esm/domain/segmentCollection/buildReplayPayload.d.ts +15 -0
- package/esm/domain/segmentCollection/buildReplayPayload.js +23 -0
- package/esm/domain/segmentCollection/buildReplayPayload.js.map +1 -0
- package/esm/domain/segmentCollection/index.d.ts +4 -0
- package/esm/domain/segmentCollection/index.js +4 -0
- package/esm/domain/segmentCollection/index.js.map +1 -0
- package/esm/domain/segmentCollection/segment.d.ts +16 -0
- package/esm/domain/segmentCollection/segment.js +46 -0
- package/esm/domain/segmentCollection/segment.js.map +1 -0
- package/esm/domain/segmentCollection/segmentCollection.d.ts +31 -0
- package/esm/domain/segmentCollection/segmentCollection.js +106 -0
- package/esm/domain/segmentCollection/segmentCollection.js.map +1 -0
- package/esm/domain/segmentCollection/startSegmentTelemetry.d.ts +6 -0
- package/esm/domain/segmentCollection/startSegmentTelemetry.js +49 -0
- package/esm/domain/segmentCollection/startSegmentTelemetry.js.map +1 -0
- package/esm/domain/startRecordBridge.d.ts +5 -0
- package/esm/domain/startRecordBridge.js +14 -0
- package/esm/domain/startRecordBridge.js.map +1 -0
- package/esm/domain/startRecorderInitTelemetry.d.ts +15 -0
- package/esm/domain/startRecorderInitTelemetry.js +52 -0
- package/esm/domain/startRecorderInitTelemetry.js.map +1 -0
- package/esm/entries/internal.d.ts +11 -0
- package/esm/entries/internal.js +4 -0
- package/esm/entries/internal.js.map +1 -0
- package/esm/entries/internalSynthetics.d.ts +2 -0
- package/esm/entries/internalSynthetics.js +23 -0
- package/esm/entries/internalSynthetics.js.map +1 -0
- package/esm/entries/main.d.ts +23 -0
- package/esm/entries/main.js +31 -0
- package/esm/entries/main.js.map +1 -0
- package/esm/types/index.d.ts +3 -0
- package/esm/types/index.js +2 -0
- package/esm/types/index.js.map +1 -0
- package/esm/types/profiling.d.ts +296 -0
- package/esm/types/profiling.js +5 -0
- package/esm/types/profiling.js.map +1 -0
- package/esm/types/sessionReplay.d.ts +934 -0
- package/esm/types/sessionReplay.js +5 -0
- package/esm/types/sessionReplay.js.map +1 -0
- package/esm/types/sessionReplayConstants.d.ts +71 -0
- package/esm/types/sessionReplayConstants.js +64 -0
- package/esm/types/sessionReplayConstants.js.map +1 -0
- package/internal/package.json +6 -0
- package/internal-synthetics/package.json +6 -0
- package/package.json +52 -0
- package/src/boot/isBrowserSupported.ts +14 -0
- package/src/boot/lazyLoadProfiler.ts +20 -0
- package/src/boot/lazyLoadRecorder.ts +20 -0
- package/src/boot/postStartStrategy.ts +176 -0
- package/src/boot/preStartStrategy.ts +34 -0
- package/src/boot/profilerApi.ts +82 -0
- package/src/boot/recorderApi.ts +113 -0
- package/src/boot/startRecording.ts +70 -0
- package/src/domain/deflate/deflateEncoder.ts +144 -0
- package/src/domain/deflate/deflateWorker.ts +152 -0
- package/src/domain/deflate/index.ts +9 -0
- package/src/domain/getSessionReplayLink.ts +40 -0
- package/src/domain/profiling/actionHistory.ts +65 -0
- package/src/domain/profiling/longTaskHistory.ts +40 -0
- package/src/domain/profiling/profiler.ts +366 -0
- package/src/domain/profiling/profilingContext.ts +39 -0
- package/src/domain/profiling/profilingSupported.ts +10 -0
- package/src/domain/profiling/test-utils/mockedTrace.ts +58 -0
- package/src/domain/profiling/transport/assembly.ts +63 -0
- package/src/domain/profiling/transport/buildProfileEventAttributes.ts +106 -0
- package/src/domain/profiling/types/index.ts +2 -0
- package/src/domain/profiling/types/profilerApi.types.ts +87 -0
- package/src/domain/profiling/types/rumProfiler.types.ts +62 -0
- package/src/domain/profiling/utils/getCustomOrDefaultViewName.ts +4 -0
- package/src/domain/profiling/utils/getDefaultViewName.ts +12 -0
- package/src/domain/profiling/utils/getNumberOfSamples.ts +17 -0
- package/src/domain/profiling/vitalHistory.ts +58 -0
- package/src/domain/record/assembly.ts +19 -0
- package/src/domain/record/elementsScrollPositions.ts +28 -0
- package/src/domain/record/eventsUtils.ts +12 -0
- package/src/domain/record/index.ts +12 -0
- package/src/domain/record/internalApi.ts +84 -0
- package/src/domain/record/itemIds.ts +97 -0
- package/src/domain/record/mutationBatch.ts +47 -0
- package/src/domain/record/record.ts +90 -0
- package/src/domain/record/record.types.ts +22 -0
- package/src/domain/record/recordingScope.ts +58 -0
- package/src/domain/record/serialization/changeEncoder.ts +89 -0
- package/src/domain/record/serialization/conversions/changeConverter.ts +277 -0
- package/src/domain/record/serialization/conversions/changeDecoder.ts +192 -0
- package/src/domain/record/serialization/conversions/index.ts +7 -0
- package/src/domain/record/serialization/conversions/mutationLog.ts +56 -0
- package/src/domain/record/serialization/conversions/nodeIdRemapper.ts +69 -0
- package/src/domain/record/serialization/conversions/renderOptions.ts +14 -0
- package/src/domain/record/serialization/conversions/stringTable.ts +25 -0
- package/src/domain/record/serialization/conversions/vDocument.ts +239 -0
- package/src/domain/record/serialization/conversions/vNode.ts +417 -0
- package/src/domain/record/serialization/conversions/vStyleSheet.ts +47 -0
- package/src/domain/record/serialization/experimentalFeatures.ts +15 -0
- package/src/domain/record/serialization/index.ts +21 -0
- package/src/domain/record/serialization/insertionCursor.ts +131 -0
- package/src/domain/record/serialization/serialization.types.ts +38 -0
- package/src/domain/record/serialization/serializationStats.ts +43 -0
- package/src/domain/record/serialization/serializationTransaction.ts +255 -0
- package/src/domain/record/serialization/serializationUtils.ts +103 -0
- package/src/domain/record/serialization/serializeAttribute.ts +55 -0
- package/src/domain/record/serialization/serializeAttributes.ts +194 -0
- package/src/domain/record/serialization/serializeFullSnapshot.ts +46 -0
- package/src/domain/record/serialization/serializeFullSnapshotAsChange.ts +33 -0
- package/src/domain/record/serialization/serializeMutations.ts +395 -0
- package/src/domain/record/serialization/serializeMutationsAsChange.ts +298 -0
- package/src/domain/record/serialization/serializeNode.ts +229 -0
- package/src/domain/record/serialization/serializeNodeAsChange.ts +237 -0
- package/src/domain/record/serialization/serializeStyleSheets.ts +36 -0
- package/src/domain/record/serializationVerifier.ts +208 -0
- package/src/domain/record/shadowRootsController.ts +62 -0
- package/src/domain/record/startFullSnapshots.ts +92 -0
- package/src/domain/record/trackers/index.ts +12 -0
- package/src/domain/record/trackers/trackFocus.ts +16 -0
- package/src/domain/record/trackers/trackFrustration.ts +39 -0
- package/src/domain/record/trackers/trackInput.ts +128 -0
- package/src/domain/record/trackers/trackMediaInteraction.ts +43 -0
- package/src/domain/record/trackers/trackMouseInteraction.ts +74 -0
- package/src/domain/record/trackers/trackMove.ts +78 -0
- package/src/domain/record/trackers/trackMutation.ts +74 -0
- package/src/domain/record/trackers/trackScroll.ts +61 -0
- package/src/domain/record/trackers/trackStyleSheet.ts +117 -0
- package/src/domain/record/trackers/trackViewEnd.ts +27 -0
- package/src/domain/record/trackers/trackViewportResize.ts +69 -0
- package/src/domain/record/trackers/tracker.types.ts +3 -0
- package/src/domain/record/viewports.ts +68 -0
- package/src/domain/replayStats.ts +61 -0
- package/src/domain/scriptLoadingError.ts +36 -0
- package/src/domain/segmentCollection/buildReplayPayload.ts +52 -0
- package/src/domain/segmentCollection/index.ts +4 -0
- package/src/domain/segmentCollection/segment.ts +79 -0
- package/src/domain/segmentCollection/segmentCollection.ts +200 -0
- package/src/domain/segmentCollection/startSegmentTelemetry.ts +91 -0
- package/src/domain/startRecordBridge.ts +17 -0
- package/src/domain/startRecorderInitTelemetry.ts +90 -0
- package/src/entries/internal.ts +18 -0
- package/src/entries/internalSynthetics.ts +24 -0
- package/src/entries/main.ts +96 -0
- package/src/types/index.ts +3 -0
- package/src/types/profiling.ts +298 -0
- package/src/types/sessionReplay.ts +990 -0
- package/src/types/sessionReplayConstants.ts +130 -0
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { LifeCycle } from '@datadog/browser-rum-core'
|
|
2
|
+
import { ActionType, RumEventType, LifeCycleEventType } from '@datadog/browser-rum-core'
|
|
3
|
+
import type { FrustrationRecord } from '../../../types'
|
|
4
|
+
import { RecordType } from '../../../types'
|
|
5
|
+
import type { EmitRecordCallback } from '../record.types'
|
|
6
|
+
import type { RecordingScope } from '../recordingScope'
|
|
7
|
+
import type { Tracker } from './tracker.types'
|
|
8
|
+
|
|
9
|
+
export function trackFrustration(
|
|
10
|
+
lifeCycle: LifeCycle,
|
|
11
|
+
emitRecord: EmitRecordCallback<FrustrationRecord>,
|
|
12
|
+
scope: RecordingScope
|
|
13
|
+
): Tracker {
|
|
14
|
+
const frustrationSubscription = lifeCycle.subscribe(LifeCycleEventType.RAW_RUM_EVENT_COLLECTED, (data) => {
|
|
15
|
+
if (
|
|
16
|
+
data.rawRumEvent.type === RumEventType.ACTION &&
|
|
17
|
+
data.rawRumEvent.action.type === ActionType.CLICK &&
|
|
18
|
+
data.rawRumEvent.action.frustration?.type?.length &&
|
|
19
|
+
'events' in data.domainContext &&
|
|
20
|
+
data.domainContext.events &&
|
|
21
|
+
data.domainContext.events.length
|
|
22
|
+
) {
|
|
23
|
+
emitRecord({
|
|
24
|
+
timestamp: data.rawRumEvent.date,
|
|
25
|
+
type: RecordType.FrustrationRecord,
|
|
26
|
+
data: {
|
|
27
|
+
frustrationTypes: data.rawRumEvent.action.frustration.type,
|
|
28
|
+
recordIds: data.domainContext.events.map((e) => scope.eventIds.getOrInsert(e)),
|
|
29
|
+
},
|
|
30
|
+
})
|
|
31
|
+
}
|
|
32
|
+
})
|
|
33
|
+
|
|
34
|
+
return {
|
|
35
|
+
stop: () => {
|
|
36
|
+
frustrationSubscription.unsubscribe()
|
|
37
|
+
},
|
|
38
|
+
}
|
|
39
|
+
}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import { instrumentSetter, DOM_EVENT, addEventListeners, noop } from '@datadog/browser-core'
|
|
2
|
+
import { NodePrivacyLevel, getNodePrivacyLevel, shouldMaskNode } from '@datadog/browser-rum-core'
|
|
3
|
+
import { IncrementalSource } from '../../../types'
|
|
4
|
+
import type { InputData, InputState } from '../../../types'
|
|
5
|
+
import { getEventTarget } from '../eventsUtils'
|
|
6
|
+
import type { RecordingScope } from '../recordingScope'
|
|
7
|
+
import { getElementInputValue } from '../serialization'
|
|
8
|
+
import { assembleIncrementalSnapshot } from '../assembly'
|
|
9
|
+
import type { EmitRecordCallback } from '../record.types'
|
|
10
|
+
import type { Tracker } from './tracker.types'
|
|
11
|
+
|
|
12
|
+
export function trackInput(
|
|
13
|
+
target: Document | ShadowRoot,
|
|
14
|
+
emitRecord: EmitRecordCallback,
|
|
15
|
+
scope: RecordingScope
|
|
16
|
+
): Tracker {
|
|
17
|
+
const defaultPrivacyLevel = scope.configuration.defaultPrivacyLevel
|
|
18
|
+
const lastInputStateMap: WeakMap<Node, InputState> = new WeakMap()
|
|
19
|
+
|
|
20
|
+
const isShadowRoot = target !== document
|
|
21
|
+
|
|
22
|
+
const { stop: stopEventListeners } = addEventListeners(
|
|
23
|
+
scope.configuration,
|
|
24
|
+
target,
|
|
25
|
+
// The 'input' event bubbles across shadow roots, so we don't have to listen for it on shadow
|
|
26
|
+
// roots since it will be handled by the event listener that we did add to the document. Only
|
|
27
|
+
// the 'change' event is blocked and needs to be handled on shadow roots.
|
|
28
|
+
isShadowRoot ? [DOM_EVENT.CHANGE] : [DOM_EVENT.INPUT, DOM_EVENT.CHANGE],
|
|
29
|
+
(event) => {
|
|
30
|
+
const target = getEventTarget(event)
|
|
31
|
+
if (
|
|
32
|
+
target instanceof HTMLInputElement ||
|
|
33
|
+
target instanceof HTMLTextAreaElement ||
|
|
34
|
+
target instanceof HTMLSelectElement
|
|
35
|
+
) {
|
|
36
|
+
onElementChange(target)
|
|
37
|
+
}
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
capture: true,
|
|
41
|
+
passive: true,
|
|
42
|
+
}
|
|
43
|
+
)
|
|
44
|
+
|
|
45
|
+
let stopPropertySetterInstrumentation: () => void
|
|
46
|
+
if (!isShadowRoot) {
|
|
47
|
+
const instrumentationStoppers = [
|
|
48
|
+
instrumentSetter(HTMLInputElement.prototype, 'value', onElementChange),
|
|
49
|
+
instrumentSetter(HTMLInputElement.prototype, 'checked', onElementChange),
|
|
50
|
+
instrumentSetter(HTMLSelectElement.prototype, 'value', onElementChange),
|
|
51
|
+
instrumentSetter(HTMLTextAreaElement.prototype, 'value', onElementChange),
|
|
52
|
+
instrumentSetter(HTMLSelectElement.prototype, 'selectedIndex', onElementChange),
|
|
53
|
+
]
|
|
54
|
+
stopPropertySetterInstrumentation = () => {
|
|
55
|
+
instrumentationStoppers.forEach((stopper) => stopper.stop())
|
|
56
|
+
}
|
|
57
|
+
} else {
|
|
58
|
+
stopPropertySetterInstrumentation = noop
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
return {
|
|
62
|
+
stop: () => {
|
|
63
|
+
stopPropertySetterInstrumentation()
|
|
64
|
+
stopEventListeners()
|
|
65
|
+
},
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
function onElementChange(target: HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement) {
|
|
69
|
+
const nodePrivacyLevel = getNodePrivacyLevel(target, defaultPrivacyLevel)
|
|
70
|
+
if (nodePrivacyLevel === NodePrivacyLevel.HIDDEN) {
|
|
71
|
+
return
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
const type = target.type
|
|
75
|
+
|
|
76
|
+
let inputState: InputState
|
|
77
|
+
if (type === 'radio' || type === 'checkbox') {
|
|
78
|
+
if (shouldMaskNode(target, nodePrivacyLevel)) {
|
|
79
|
+
return
|
|
80
|
+
}
|
|
81
|
+
inputState = { isChecked: (target as HTMLInputElement).checked }
|
|
82
|
+
} else {
|
|
83
|
+
const value = getElementInputValue(target, nodePrivacyLevel)
|
|
84
|
+
if (value === undefined) {
|
|
85
|
+
return
|
|
86
|
+
}
|
|
87
|
+
inputState = { text: value }
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
// Can be multiple changes on the same node within the same batched mutation observation.
|
|
91
|
+
createRecordIfStateChanged(target, inputState)
|
|
92
|
+
|
|
93
|
+
// If a radio was checked, other radios with the same name attribute will be unchecked.
|
|
94
|
+
const name = target.name
|
|
95
|
+
if (type === 'radio' && name && (target as HTMLInputElement).checked) {
|
|
96
|
+
document.querySelectorAll(`input[type="radio"][name="${CSS.escape(name)}"]`).forEach((el: Element) => {
|
|
97
|
+
if (el !== target) {
|
|
98
|
+
// TODO: Consider the privacy implications for various differing input privacy levels
|
|
99
|
+
createRecordIfStateChanged(el, { isChecked: false })
|
|
100
|
+
}
|
|
101
|
+
})
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* There can be multiple changes on the same node within the same batched mutation observation.
|
|
107
|
+
*/
|
|
108
|
+
function createRecordIfStateChanged(target: Node, inputState: InputState) {
|
|
109
|
+
const id = scope.nodeIds.get(target)
|
|
110
|
+
if (id === undefined) {
|
|
111
|
+
return
|
|
112
|
+
}
|
|
113
|
+
const lastInputState = lastInputStateMap.get(target)
|
|
114
|
+
if (
|
|
115
|
+
!lastInputState ||
|
|
116
|
+
(lastInputState as { text?: string }).text !== (inputState as { text?: string }).text ||
|
|
117
|
+
(lastInputState as { isChecked?: boolean }).isChecked !== (inputState as { isChecked?: boolean }).isChecked
|
|
118
|
+
) {
|
|
119
|
+
lastInputStateMap.set(target, inputState)
|
|
120
|
+
emitRecord(
|
|
121
|
+
assembleIncrementalSnapshot<InputData>(IncrementalSource.Input, {
|
|
122
|
+
id,
|
|
123
|
+
...inputState,
|
|
124
|
+
})
|
|
125
|
+
)
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { DOM_EVENT, addEventListeners } from '@datadog/browser-core'
|
|
2
|
+
import { NodePrivacyLevel, getNodePrivacyLevel } from '@datadog/browser-rum-core'
|
|
3
|
+
import type { MediaInteractionData, BrowserIncrementalSnapshotRecord } from '../../../types'
|
|
4
|
+
import { IncrementalSource, MediaInteractionType } from '../../../types'
|
|
5
|
+
import { getEventTarget } from '../eventsUtils'
|
|
6
|
+
import { assembleIncrementalSnapshot } from '../assembly'
|
|
7
|
+
import type { EmitRecordCallback } from '../record.types'
|
|
8
|
+
import type { RecordingScope } from '../recordingScope'
|
|
9
|
+
import type { Tracker } from './tracker.types'
|
|
10
|
+
|
|
11
|
+
export function trackMediaInteraction(
|
|
12
|
+
emitRecord: EmitRecordCallback<BrowserIncrementalSnapshotRecord>,
|
|
13
|
+
scope: RecordingScope
|
|
14
|
+
): Tracker {
|
|
15
|
+
return addEventListeners(
|
|
16
|
+
scope.configuration,
|
|
17
|
+
document,
|
|
18
|
+
[DOM_EVENT.PLAY, DOM_EVENT.PAUSE],
|
|
19
|
+
(event) => {
|
|
20
|
+
const target = getEventTarget(event)
|
|
21
|
+
if (!target) {
|
|
22
|
+
return
|
|
23
|
+
}
|
|
24
|
+
const id = scope.nodeIds.get(target)
|
|
25
|
+
if (
|
|
26
|
+
id === undefined ||
|
|
27
|
+
getNodePrivacyLevel(target, scope.configuration.defaultPrivacyLevel) === NodePrivacyLevel.HIDDEN
|
|
28
|
+
) {
|
|
29
|
+
return
|
|
30
|
+
}
|
|
31
|
+
emitRecord(
|
|
32
|
+
assembleIncrementalSnapshot<MediaInteractionData>(IncrementalSource.MediaInteraction, {
|
|
33
|
+
id,
|
|
34
|
+
type: event.type === DOM_EVENT.PLAY ? MediaInteractionType.Play : MediaInteractionType.Pause,
|
|
35
|
+
})
|
|
36
|
+
)
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
capture: true,
|
|
40
|
+
passive: true,
|
|
41
|
+
}
|
|
42
|
+
)
|
|
43
|
+
}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { addEventListeners, DOM_EVENT } from '@datadog/browser-core'
|
|
2
|
+
import { getNodePrivacyLevel, NodePrivacyLevel } from '@datadog/browser-rum-core'
|
|
3
|
+
import type { MouseInteraction, MouseInteractionData, BrowserIncrementalSnapshotRecord } from '../../../types'
|
|
4
|
+
import { IncrementalSource, MouseInteractionType } from '../../../types'
|
|
5
|
+
import { assembleIncrementalSnapshot } from '../assembly'
|
|
6
|
+
import { getEventTarget } from '../eventsUtils'
|
|
7
|
+
import type { RecordingScope } from '../recordingScope'
|
|
8
|
+
import type { EmitRecordCallback } from '../record.types'
|
|
9
|
+
import { tryToComputeCoordinates } from './trackMove'
|
|
10
|
+
import type { Tracker } from './tracker.types'
|
|
11
|
+
|
|
12
|
+
const eventTypeToMouseInteraction = {
|
|
13
|
+
// Listen for pointerup DOM events instead of mouseup for MouseInteraction/MouseUp records. This
|
|
14
|
+
// allows to reference such records from Frustration records.
|
|
15
|
+
//
|
|
16
|
+
// In the context of supporting Mobile Session Replay, we introduced `PointerInteraction` records
|
|
17
|
+
// used by the Mobile SDKs in place of `MouseInteraction`. In the future, we should replace
|
|
18
|
+
// `MouseInteraction` by `PointerInteraction` in the Browser SDK so we have an uniform way to
|
|
19
|
+
// convey such interaction. This would cleanly solve the issue since we would have
|
|
20
|
+
// `PointerInteraction/Up` records that we could reference from `Frustration` records.
|
|
21
|
+
[DOM_EVENT.POINTER_UP]: MouseInteractionType.MouseUp,
|
|
22
|
+
|
|
23
|
+
[DOM_EVENT.MOUSE_DOWN]: MouseInteractionType.MouseDown,
|
|
24
|
+
[DOM_EVENT.CLICK]: MouseInteractionType.Click,
|
|
25
|
+
[DOM_EVENT.CONTEXT_MENU]: MouseInteractionType.ContextMenu,
|
|
26
|
+
[DOM_EVENT.DBL_CLICK]: MouseInteractionType.DblClick,
|
|
27
|
+
[DOM_EVENT.FOCUS]: MouseInteractionType.Focus,
|
|
28
|
+
[DOM_EVENT.BLUR]: MouseInteractionType.Blur,
|
|
29
|
+
[DOM_EVENT.TOUCH_START]: MouseInteractionType.TouchStart,
|
|
30
|
+
[DOM_EVENT.TOUCH_END]: MouseInteractionType.TouchEnd,
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export function trackMouseInteraction(
|
|
34
|
+
emitRecord: EmitRecordCallback<BrowserIncrementalSnapshotRecord>,
|
|
35
|
+
scope: RecordingScope
|
|
36
|
+
): Tracker {
|
|
37
|
+
const handler = (event: MouseEvent | TouchEvent | FocusEvent) => {
|
|
38
|
+
const target = getEventTarget(event)
|
|
39
|
+
const id = scope.nodeIds.get(target)
|
|
40
|
+
if (
|
|
41
|
+
id === undefined ||
|
|
42
|
+
getNodePrivacyLevel(target, scope.configuration.defaultPrivacyLevel) === NodePrivacyLevel.HIDDEN
|
|
43
|
+
) {
|
|
44
|
+
return
|
|
45
|
+
}
|
|
46
|
+
const type = eventTypeToMouseInteraction[event.type as keyof typeof eventTypeToMouseInteraction]
|
|
47
|
+
|
|
48
|
+
let interaction: MouseInteraction
|
|
49
|
+
if (type !== MouseInteractionType.Blur && type !== MouseInteractionType.Focus) {
|
|
50
|
+
const coordinates = tryToComputeCoordinates(event as MouseEvent | TouchEvent)
|
|
51
|
+
if (!coordinates) {
|
|
52
|
+
return
|
|
53
|
+
}
|
|
54
|
+
interaction = { id, type, x: coordinates.x, y: coordinates.y }
|
|
55
|
+
} else {
|
|
56
|
+
interaction = { id, type }
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
emitRecord({
|
|
60
|
+
id: scope.eventIds.getOrInsert(event),
|
|
61
|
+
...assembleIncrementalSnapshot<MouseInteractionData>(IncrementalSource.MouseInteraction, interaction),
|
|
62
|
+
})
|
|
63
|
+
}
|
|
64
|
+
return addEventListeners(
|
|
65
|
+
scope.configuration,
|
|
66
|
+
document,
|
|
67
|
+
Object.keys(eventTypeToMouseInteraction) as Array<keyof typeof eventTypeToMouseInteraction>,
|
|
68
|
+
handler,
|
|
69
|
+
{
|
|
70
|
+
capture: true,
|
|
71
|
+
passive: true,
|
|
72
|
+
}
|
|
73
|
+
)
|
|
74
|
+
}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { addEventListeners, DOM_EVENT, throttle } from '@datadog/browser-core'
|
|
2
|
+
import type { BrowserIncrementalSnapshotRecord, MousemoveData, MousePosition } from '../../../types'
|
|
3
|
+
import { IncrementalSource } from '../../../types'
|
|
4
|
+
import { getEventTarget, isTouchEvent } from '../eventsUtils'
|
|
5
|
+
import { convertMouseEventToLayoutCoordinates } from '../viewports'
|
|
6
|
+
import { assembleIncrementalSnapshot } from '../assembly'
|
|
7
|
+
import type { RecordingScope } from '../recordingScope'
|
|
8
|
+
import type { EmitRecordCallback } from '../record.types'
|
|
9
|
+
import type { Tracker } from './tracker.types'
|
|
10
|
+
|
|
11
|
+
const MOUSE_MOVE_OBSERVER_THRESHOLD = 50
|
|
12
|
+
|
|
13
|
+
export function trackMove(
|
|
14
|
+
emitRecord: EmitRecordCallback<BrowserIncrementalSnapshotRecord>,
|
|
15
|
+
scope: RecordingScope
|
|
16
|
+
): Tracker {
|
|
17
|
+
const { throttled: updatePosition, cancel: cancelThrottle } = throttle(
|
|
18
|
+
(event: MouseEvent | TouchEvent) => {
|
|
19
|
+
const target = getEventTarget(event)
|
|
20
|
+
const id = scope.nodeIds.get(target)
|
|
21
|
+
if (id === undefined) {
|
|
22
|
+
return
|
|
23
|
+
}
|
|
24
|
+
const coordinates = tryToComputeCoordinates(event)
|
|
25
|
+
if (!coordinates) {
|
|
26
|
+
return
|
|
27
|
+
}
|
|
28
|
+
const position: MousePosition = {
|
|
29
|
+
id,
|
|
30
|
+
timeOffset: 0,
|
|
31
|
+
x: coordinates.x,
|
|
32
|
+
y: coordinates.y,
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
emitRecord(
|
|
36
|
+
assembleIncrementalSnapshot<MousemoveData>(
|
|
37
|
+
isTouchEvent(event) ? IncrementalSource.TouchMove : IncrementalSource.MouseMove,
|
|
38
|
+
{ positions: [position] }
|
|
39
|
+
)
|
|
40
|
+
)
|
|
41
|
+
},
|
|
42
|
+
MOUSE_MOVE_OBSERVER_THRESHOLD,
|
|
43
|
+
{
|
|
44
|
+
trailing: false,
|
|
45
|
+
}
|
|
46
|
+
)
|
|
47
|
+
|
|
48
|
+
const { stop: removeListener } = addEventListeners(
|
|
49
|
+
scope.configuration,
|
|
50
|
+
document,
|
|
51
|
+
[DOM_EVENT.MOUSE_MOVE, DOM_EVENT.TOUCH_MOVE],
|
|
52
|
+
updatePosition,
|
|
53
|
+
{
|
|
54
|
+
capture: true,
|
|
55
|
+
passive: true,
|
|
56
|
+
}
|
|
57
|
+
)
|
|
58
|
+
|
|
59
|
+
return {
|
|
60
|
+
stop: () => {
|
|
61
|
+
removeListener()
|
|
62
|
+
cancelThrottle()
|
|
63
|
+
},
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
export function tryToComputeCoordinates(event: MouseEvent | TouchEvent) {
|
|
68
|
+
let { clientX: x, clientY: y } = isTouchEvent(event) ? event.changedTouches[0] : event
|
|
69
|
+
if (window.visualViewport) {
|
|
70
|
+
const { visualViewportX, visualViewportY } = convertMouseEventToLayoutCoordinates(x, y)
|
|
71
|
+
x = visualViewportX
|
|
72
|
+
y = visualViewportY
|
|
73
|
+
}
|
|
74
|
+
if (!Number.isFinite(x) || !Number.isFinite(y)) {
|
|
75
|
+
return undefined
|
|
76
|
+
}
|
|
77
|
+
return { x, y }
|
|
78
|
+
}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import type { TimeStamp } from '@datadog/browser-core'
|
|
2
|
+
import { monitor, noop, timeStampNow } from '@datadog/browser-core'
|
|
3
|
+
import type { RumMutationRecord } from '@datadog/browser-rum-core'
|
|
4
|
+
import { getMutationObserverConstructor } from '@datadog/browser-rum-core'
|
|
5
|
+
import type { RecordingScope } from '../recordingScope'
|
|
6
|
+
import { createMutationBatch } from '../mutationBatch'
|
|
7
|
+
import type { EmitRecordCallback, EmitStatsCallback } from '../record.types'
|
|
8
|
+
import {
|
|
9
|
+
isIncrementalSnapshotChangeRecordsEnabled,
|
|
10
|
+
serializeMutations,
|
|
11
|
+
serializeMutationsAsChange,
|
|
12
|
+
} from '../serialization'
|
|
13
|
+
import type { Tracker } from './tracker.types'
|
|
14
|
+
|
|
15
|
+
export type MutationTracker = Tracker & { flush: () => void }
|
|
16
|
+
|
|
17
|
+
export type SerializeMutationsCallback = (
|
|
18
|
+
timestamp: TimeStamp,
|
|
19
|
+
mutations: RumMutationRecord[],
|
|
20
|
+
emitRecord: EmitRecordCallback,
|
|
21
|
+
emitStats: EmitStatsCallback,
|
|
22
|
+
scope: RecordingScope
|
|
23
|
+
) => void
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Buffers and aggregate mutations generated by a MutationObserver into MutationPayload
|
|
27
|
+
*/
|
|
28
|
+
export function trackMutation(
|
|
29
|
+
target: Node,
|
|
30
|
+
emitRecord: EmitRecordCallback,
|
|
31
|
+
emitStats: EmitStatsCallback,
|
|
32
|
+
scope: RecordingScope,
|
|
33
|
+
serialize: SerializeMutationsCallback = defaultSerializeMutationsCallback()
|
|
34
|
+
): MutationTracker {
|
|
35
|
+
const MutationObserver = getMutationObserverConstructor()
|
|
36
|
+
if (!MutationObserver) {
|
|
37
|
+
return { stop: noop, flush: noop }
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
const mutationBatch = createMutationBatch((mutations) => {
|
|
41
|
+
serialize(
|
|
42
|
+
timeStampNow(),
|
|
43
|
+
mutations.concat(observer.takeRecords() as RumMutationRecord[]),
|
|
44
|
+
emitRecord,
|
|
45
|
+
emitStats,
|
|
46
|
+
scope
|
|
47
|
+
)
|
|
48
|
+
})
|
|
49
|
+
|
|
50
|
+
const observer = new MutationObserver(monitor(mutationBatch.addMutations) as (callback: RumMutationRecord[]) => void)
|
|
51
|
+
|
|
52
|
+
observer.observe(target, {
|
|
53
|
+
attributeOldValue: true,
|
|
54
|
+
attributes: true,
|
|
55
|
+
characterData: true,
|
|
56
|
+
characterDataOldValue: true,
|
|
57
|
+
childList: true,
|
|
58
|
+
subtree: true,
|
|
59
|
+
})
|
|
60
|
+
|
|
61
|
+
return {
|
|
62
|
+
stop: () => {
|
|
63
|
+
observer.disconnect()
|
|
64
|
+
mutationBatch.stop()
|
|
65
|
+
},
|
|
66
|
+
flush: () => {
|
|
67
|
+
mutationBatch.flush()
|
|
68
|
+
},
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
function defaultSerializeMutationsCallback(): SerializeMutationsCallback {
|
|
73
|
+
return isIncrementalSnapshotChangeRecordsEnabled() ? serializeMutationsAsChange : serializeMutations
|
|
74
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { DOM_EVENT, throttle, addEventListener } from '@datadog/browser-core'
|
|
2
|
+
import { getScrollX, getScrollY, getNodePrivacyLevel, NodePrivacyLevel } from '@datadog/browser-rum-core'
|
|
3
|
+
import { getEventTarget } from '../eventsUtils'
|
|
4
|
+
import { IncrementalSource } from '../../../types'
|
|
5
|
+
import type { BrowserIncrementalSnapshotRecord, ScrollData } from '../../../types'
|
|
6
|
+
import { assembleIncrementalSnapshot } from '../assembly'
|
|
7
|
+
import type { RecordingScope } from '../recordingScope'
|
|
8
|
+
import type { EmitRecordCallback } from '../record.types'
|
|
9
|
+
import type { Tracker } from './tracker.types'
|
|
10
|
+
|
|
11
|
+
const SCROLL_OBSERVER_THRESHOLD = 100
|
|
12
|
+
|
|
13
|
+
export function trackScroll(
|
|
14
|
+
target: Document | ShadowRoot,
|
|
15
|
+
emitRecord: EmitRecordCallback<BrowserIncrementalSnapshotRecord>,
|
|
16
|
+
scope: RecordingScope
|
|
17
|
+
): Tracker {
|
|
18
|
+
const { throttled: updatePosition, cancel: cancelThrottle } = throttle((event: Event) => {
|
|
19
|
+
const target = getEventTarget(event) as HTMLElement | Document
|
|
20
|
+
if (!target) {
|
|
21
|
+
return
|
|
22
|
+
}
|
|
23
|
+
const id = scope.nodeIds.get(target)
|
|
24
|
+
if (
|
|
25
|
+
id === undefined ||
|
|
26
|
+
getNodePrivacyLevel(target, scope.configuration.defaultPrivacyLevel) === NodePrivacyLevel.HIDDEN
|
|
27
|
+
) {
|
|
28
|
+
return
|
|
29
|
+
}
|
|
30
|
+
const scrollPositions =
|
|
31
|
+
target === document
|
|
32
|
+
? {
|
|
33
|
+
scrollTop: getScrollY(),
|
|
34
|
+
scrollLeft: getScrollX(),
|
|
35
|
+
}
|
|
36
|
+
: {
|
|
37
|
+
scrollTop: Math.round((target as HTMLElement).scrollTop),
|
|
38
|
+
scrollLeft: Math.round((target as HTMLElement).scrollLeft),
|
|
39
|
+
}
|
|
40
|
+
scope.elementsScrollPositions.set(target, scrollPositions)
|
|
41
|
+
emitRecord(
|
|
42
|
+
assembleIncrementalSnapshot<ScrollData>(IncrementalSource.Scroll, {
|
|
43
|
+
id,
|
|
44
|
+
x: scrollPositions.scrollLeft,
|
|
45
|
+
y: scrollPositions.scrollTop,
|
|
46
|
+
})
|
|
47
|
+
)
|
|
48
|
+
}, SCROLL_OBSERVER_THRESHOLD)
|
|
49
|
+
|
|
50
|
+
const { stop: removeListener } = addEventListener(scope.configuration, target, DOM_EVENT.SCROLL, updatePosition, {
|
|
51
|
+
capture: true,
|
|
52
|
+
passive: true,
|
|
53
|
+
})
|
|
54
|
+
|
|
55
|
+
return {
|
|
56
|
+
stop: () => {
|
|
57
|
+
removeListener()
|
|
58
|
+
cancelThrottle()
|
|
59
|
+
},
|
|
60
|
+
}
|
|
61
|
+
}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import { instrumentMethod } from '@datadog/browser-core'
|
|
2
|
+
import { IncrementalSource } from '../../../types'
|
|
3
|
+
import type { BrowserIncrementalSnapshotRecord, StyleSheetRuleData } from '../../../types'
|
|
4
|
+
import { assembleIncrementalSnapshot } from '../assembly'
|
|
5
|
+
import type { RecordingScope } from '../recordingScope'
|
|
6
|
+
import type { EmitRecordCallback } from '../record.types'
|
|
7
|
+
import type { Tracker } from './tracker.types'
|
|
8
|
+
|
|
9
|
+
type GroupingCSSRuleTypes = typeof CSSGroupingRule | typeof CSSMediaRule | typeof CSSSupportsRule
|
|
10
|
+
|
|
11
|
+
export function trackStyleSheet(
|
|
12
|
+
emitRecord: EmitRecordCallback<BrowserIncrementalSnapshotRecord>,
|
|
13
|
+
scope: RecordingScope
|
|
14
|
+
): Tracker {
|
|
15
|
+
function checkStyleSheetAndCallback(styleSheet: CSSStyleSheet | null, callback: (id: number) => void): void {
|
|
16
|
+
if (!styleSheet || !styleSheet.ownerNode) {
|
|
17
|
+
return
|
|
18
|
+
}
|
|
19
|
+
const id = scope.nodeIds.get(styleSheet.ownerNode)
|
|
20
|
+
if (id === undefined) {
|
|
21
|
+
return
|
|
22
|
+
}
|
|
23
|
+
callback(id)
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
const instrumentationStoppers = [
|
|
27
|
+
instrumentMethod(CSSStyleSheet.prototype, 'insertRule', ({ target: styleSheet, parameters: [rule, index] }) => {
|
|
28
|
+
checkStyleSheetAndCallback(styleSheet, (id) =>
|
|
29
|
+
emitRecord(
|
|
30
|
+
assembleIncrementalSnapshot<StyleSheetRuleData>(IncrementalSource.StyleSheetRule, {
|
|
31
|
+
id,
|
|
32
|
+
adds: [{ rule, index }],
|
|
33
|
+
})
|
|
34
|
+
)
|
|
35
|
+
)
|
|
36
|
+
}),
|
|
37
|
+
|
|
38
|
+
instrumentMethod(CSSStyleSheet.prototype, 'deleteRule', ({ target: styleSheet, parameters: [index] }) => {
|
|
39
|
+
checkStyleSheetAndCallback(styleSheet, (id) =>
|
|
40
|
+
emitRecord(
|
|
41
|
+
assembleIncrementalSnapshot<StyleSheetRuleData>(IncrementalSource.StyleSheetRule, {
|
|
42
|
+
id,
|
|
43
|
+
removes: [{ index }],
|
|
44
|
+
})
|
|
45
|
+
)
|
|
46
|
+
)
|
|
47
|
+
}),
|
|
48
|
+
]
|
|
49
|
+
|
|
50
|
+
if (typeof CSSGroupingRule !== 'undefined') {
|
|
51
|
+
instrumentGroupingCSSRuleClass(CSSGroupingRule)
|
|
52
|
+
} else {
|
|
53
|
+
instrumentGroupingCSSRuleClass(CSSMediaRule)
|
|
54
|
+
instrumentGroupingCSSRuleClass(CSSSupportsRule)
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
function instrumentGroupingCSSRuleClass(cls: GroupingCSSRuleTypes) {
|
|
58
|
+
instrumentationStoppers.push(
|
|
59
|
+
instrumentMethod(cls.prototype, 'insertRule', ({ target: styleSheet, parameters: [rule, index] }) => {
|
|
60
|
+
checkStyleSheetAndCallback(styleSheet.parentStyleSheet, (id) => {
|
|
61
|
+
const path = getPathToNestedCSSRule(styleSheet)
|
|
62
|
+
if (path) {
|
|
63
|
+
path.push(index || 0)
|
|
64
|
+
emitRecord(
|
|
65
|
+
assembleIncrementalSnapshot<StyleSheetRuleData>(IncrementalSource.StyleSheetRule, {
|
|
66
|
+
id,
|
|
67
|
+
adds: [{ rule, index: path }],
|
|
68
|
+
})
|
|
69
|
+
)
|
|
70
|
+
}
|
|
71
|
+
})
|
|
72
|
+
}),
|
|
73
|
+
|
|
74
|
+
instrumentMethod(cls.prototype, 'deleteRule', ({ target: styleSheet, parameters: [index] }) => {
|
|
75
|
+
checkStyleSheetAndCallback(styleSheet.parentStyleSheet, (id) => {
|
|
76
|
+
const path = getPathToNestedCSSRule(styleSheet)
|
|
77
|
+
if (path) {
|
|
78
|
+
path.push(index)
|
|
79
|
+
emitRecord(
|
|
80
|
+
assembleIncrementalSnapshot<StyleSheetRuleData>(IncrementalSource.StyleSheetRule, {
|
|
81
|
+
id,
|
|
82
|
+
removes: [{ index: path }],
|
|
83
|
+
})
|
|
84
|
+
)
|
|
85
|
+
}
|
|
86
|
+
})
|
|
87
|
+
})
|
|
88
|
+
)
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
return {
|
|
92
|
+
stop: () => {
|
|
93
|
+
instrumentationStoppers.forEach((stopper) => stopper.stop())
|
|
94
|
+
},
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
export function getPathToNestedCSSRule(rule: CSSRule): number[] | undefined {
|
|
99
|
+
const path: number[] = []
|
|
100
|
+
let currentRule = rule
|
|
101
|
+
while (currentRule.parentRule) {
|
|
102
|
+
const rules = Array.from((currentRule.parentRule as CSSGroupingRule).cssRules)
|
|
103
|
+
const index = rules.indexOf(currentRule)
|
|
104
|
+
path.unshift(index)
|
|
105
|
+
currentRule = currentRule.parentRule
|
|
106
|
+
}
|
|
107
|
+
// A rule may not be attached to a stylesheet
|
|
108
|
+
if (!currentRule.parentStyleSheet) {
|
|
109
|
+
return
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
const rules = Array.from(currentRule.parentStyleSheet.cssRules)
|
|
113
|
+
const index = rules.indexOf(currentRule)
|
|
114
|
+
path.unshift(index)
|
|
115
|
+
|
|
116
|
+
return path
|
|
117
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { timeStampNow } from '@datadog/browser-core'
|
|
2
|
+
import type { LifeCycle } from '@datadog/browser-rum-core'
|
|
3
|
+
import { LifeCycleEventType } from '@datadog/browser-rum-core'
|
|
4
|
+
import type { ViewEndRecord } from '../../../types'
|
|
5
|
+
import { RecordType } from '../../../types'
|
|
6
|
+
import type { EmitRecordCallback } from '../record.types'
|
|
7
|
+
import type { Tracker } from './tracker.types'
|
|
8
|
+
|
|
9
|
+
export function trackViewEnd(
|
|
10
|
+
lifeCycle: LifeCycle,
|
|
11
|
+
emitRecord: EmitRecordCallback<ViewEndRecord>,
|
|
12
|
+
flushMutations: () => void
|
|
13
|
+
): Tracker {
|
|
14
|
+
const viewEndSubscription = lifeCycle.subscribe(LifeCycleEventType.VIEW_ENDED, () => {
|
|
15
|
+
flushMutations()
|
|
16
|
+
emitRecord({
|
|
17
|
+
timestamp: timeStampNow(),
|
|
18
|
+
type: RecordType.ViewEnd,
|
|
19
|
+
})
|
|
20
|
+
})
|
|
21
|
+
|
|
22
|
+
return {
|
|
23
|
+
stop: () => {
|
|
24
|
+
viewEndSubscription.unsubscribe()
|
|
25
|
+
},
|
|
26
|
+
}
|
|
27
|
+
}
|