@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,87 @@
|
|
|
1
|
+
// Define types for the new Profiler API
|
|
2
|
+
// https://wicg.github.io/js-self-profiling/
|
|
3
|
+
|
|
4
|
+
export interface ProfilerFrame {
|
|
5
|
+
/** A function instance name. */
|
|
6
|
+
readonly name: string
|
|
7
|
+
/** Index in the trace.resources array. */
|
|
8
|
+
readonly resourceId?: number
|
|
9
|
+
/** 1-based index of the line. */
|
|
10
|
+
readonly line?: number
|
|
11
|
+
/** 1-based index of the column. */
|
|
12
|
+
readonly column?: number
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export interface ProfilerStack {
|
|
16
|
+
/** Index in the trace.stacks array. */
|
|
17
|
+
readonly parentId?: number
|
|
18
|
+
/** Index in the trace.frames array. */
|
|
19
|
+
readonly frameId: number
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export interface ProfilerSample {
|
|
23
|
+
/** High resolution time relative to the profiling session's time origin. */
|
|
24
|
+
readonly timestamp: number
|
|
25
|
+
/** Index in the trace.stacks array. */
|
|
26
|
+
readonly stackId?: number
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export type ProfilerResource = string
|
|
30
|
+
|
|
31
|
+
export interface ProfilerTrace {
|
|
32
|
+
/** An array of profiler resources. */
|
|
33
|
+
readonly resources: ProfilerResource[]
|
|
34
|
+
/** An array of profiler frames. */
|
|
35
|
+
readonly frames: ProfilerFrame[]
|
|
36
|
+
/** An array of profiler stacks. */
|
|
37
|
+
readonly stacks: ProfilerStack[]
|
|
38
|
+
/** An array of profiler samples. */
|
|
39
|
+
readonly samples: ProfilerSample[]
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export interface ProfilerInitOptions {
|
|
43
|
+
/** Sample interval in ms. */
|
|
44
|
+
readonly sampleInterval: number
|
|
45
|
+
/** Max buffer size in number of samples. */
|
|
46
|
+
readonly maxBufferSize: number
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
export interface Profiler extends EventTarget {
|
|
50
|
+
/** Sample interval in ms. */
|
|
51
|
+
readonly sampleInterval: number
|
|
52
|
+
/** True if profiler is stopped. */
|
|
53
|
+
readonly stopped: boolean
|
|
54
|
+
|
|
55
|
+
// eslint-disable-next-line @typescript-eslint/no-misused-new
|
|
56
|
+
new (options: ProfilerInitOptions): Profiler
|
|
57
|
+
stop(): Promise<ProfilerTrace>
|
|
58
|
+
|
|
59
|
+
addEventListener<K extends keyof ProfilerEventMap>(
|
|
60
|
+
type: K,
|
|
61
|
+
listener: (this: typeof globalThis, ev: ProfilerEventMap[K]) => any,
|
|
62
|
+
options?: boolean | AddEventListenerOptions
|
|
63
|
+
): void
|
|
64
|
+
addEventListener(
|
|
65
|
+
type: string,
|
|
66
|
+
listener: EventListenerOrEventListenerObject,
|
|
67
|
+
options?: boolean | AddEventListenerOptions
|
|
68
|
+
): void
|
|
69
|
+
removeEventListener<K extends keyof ProfilerEventMap>(
|
|
70
|
+
type: K,
|
|
71
|
+
listener: (this: typeof globalThis, ev: ProfilerEventMap[K]) => any,
|
|
72
|
+
options?: boolean | EventListenerOptions
|
|
73
|
+
): void
|
|
74
|
+
removeEventListener(
|
|
75
|
+
type: string,
|
|
76
|
+
listener: EventListenerOrEventListenerObject,
|
|
77
|
+
options?: boolean | EventListenerOptions
|
|
78
|
+
): void
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
interface ProfilerEventMap {
|
|
82
|
+
samplebufferfull: SampleBufferFullEvent
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
export interface SampleBufferFullEvent extends Event {
|
|
86
|
+
readonly target: Profiler
|
|
87
|
+
}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import type { TimeoutId, ClocksState } from '@datadog/browser-core'
|
|
2
|
+
import type { RumViewEntry } from '../../../types'
|
|
3
|
+
import type { LongTaskContext } from '../longTaskHistory'
|
|
4
|
+
import type { Profiler } from './profilerApi.types'
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Additional data recorded during profiling session
|
|
8
|
+
*/
|
|
9
|
+
export interface RumProfilerEnrichmentData {
|
|
10
|
+
/** List of detected long tasks */
|
|
11
|
+
readonly longTasks: LongTaskContext[]
|
|
12
|
+
/** List of detected navigation entries */
|
|
13
|
+
readonly views: RumViewEntry[]
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Describes profiler session state when it's stopped
|
|
18
|
+
*/
|
|
19
|
+
export interface RumProfilerStoppedInstance {
|
|
20
|
+
readonly state: 'stopped'
|
|
21
|
+
readonly stateReason: 'session-expired' | 'stopped-by-user' | 'initializing'
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Describes profiler session state when it's paused
|
|
26
|
+
* (this happens when user focuses on a different tab)
|
|
27
|
+
*/
|
|
28
|
+
export interface RumProfilerPausedInstance {
|
|
29
|
+
readonly state: 'paused'
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Describes profiler session state when it's running
|
|
34
|
+
*/
|
|
35
|
+
export interface RumProfilerRunningInstance extends RumProfilerEnrichmentData {
|
|
36
|
+
readonly state: 'running'
|
|
37
|
+
/** Current profiler instance */
|
|
38
|
+
readonly profiler: Profiler
|
|
39
|
+
/** High resolution time when profiler session started */
|
|
40
|
+
readonly startClocks: ClocksState
|
|
41
|
+
/** Timeout id to stop current session */
|
|
42
|
+
readonly timeoutId: TimeoutId
|
|
43
|
+
/** Clean-up tasks to execute after running the Profiler */
|
|
44
|
+
readonly cleanupTasks: Array<() => void>
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
export type RumProfilerInstance = RumProfilerStoppedInstance | RumProfilerPausedInstance | RumProfilerRunningInstance
|
|
48
|
+
|
|
49
|
+
export interface RUMProfiler {
|
|
50
|
+
start: () => void
|
|
51
|
+
stop: () => void
|
|
52
|
+
isStopped: () => boolean
|
|
53
|
+
isRunning: () => boolean
|
|
54
|
+
isPaused: () => boolean
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
export interface RUMProfilerConfiguration {
|
|
58
|
+
sampleIntervalMs: number // Sample stack trace every x milliseconds (defaults to 10ms for Unix, 16ms on Windows)
|
|
59
|
+
collectIntervalMs: number // Interval for collecting RUM Profiles (defaults to 1min)
|
|
60
|
+
minProfileDurationMs: number // Minimum duration of a profile for it be sent (defaults to 5s). Profiles shorter than this duration are discarded.
|
|
61
|
+
minNumberOfSamples: number // Minimum number of samples to be collected before it can be sent (defaults to 50). Profiles with fewer samples are discarded.
|
|
62
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
// This is the regex used to extract the path from the url (from SimpleUrlGroupingProcessor.java)
|
|
2
|
+
// It's a bit different from the one in the java code because we removed the lookbehind unsupported by Safari.
|
|
3
|
+
const PATH_MIXED_ALPHANUMERICS = /\/(?![vV]\d{1,2}\/)([^/\d?]*\d+[^/?]*)/g
|
|
4
|
+
|
|
5
|
+
export function getDefaultViewName(viewPathUrl: string): string {
|
|
6
|
+
if (!viewPathUrl) {
|
|
7
|
+
return '/'
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
// Replace all the mixed alphanumerics with a ?
|
|
11
|
+
return viewPathUrl.replace(PATH_MIXED_ALPHANUMERICS, '/?')
|
|
12
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { ProfilerSample } from '../types'
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Counts number of samples when the thread was not idle (stackId is defined)
|
|
5
|
+
*
|
|
6
|
+
* @param samples - Array of collected samples
|
|
7
|
+
* @returns Number of samples
|
|
8
|
+
*/
|
|
9
|
+
export function getNumberOfSamples(samples: ProfilerSample[]): number {
|
|
10
|
+
let numberOfSamples = 0
|
|
11
|
+
for (const sample of samples) {
|
|
12
|
+
if (sample.stackId !== undefined) {
|
|
13
|
+
numberOfSamples++
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
return numberOfSamples
|
|
17
|
+
}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import type { ClocksState, Duration } from '@datadog/browser-core'
|
|
2
|
+
import { addDuration, createValueHistory, SESSION_TIME_OUT_DELAY } from '@datadog/browser-core'
|
|
3
|
+
import type { LifeCycle } from '@datadog/browser-rum-core'
|
|
4
|
+
import { LifeCycleEventType } from '@datadog/browser-rum-core'
|
|
5
|
+
|
|
6
|
+
export const VITAL_ID_HISTORY_TIME_OUT_DELAY = SESSION_TIME_OUT_DELAY
|
|
7
|
+
|
|
8
|
+
export interface VitalContext {
|
|
9
|
+
id: string
|
|
10
|
+
label: string
|
|
11
|
+
duration?: Duration
|
|
12
|
+
startClocks: ClocksState
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export function createVitalHistory(lifeCycle: LifeCycle) {
|
|
16
|
+
const history = createValueHistory<VitalContext>({
|
|
17
|
+
expireDelay: VITAL_ID_HISTORY_TIME_OUT_DELAY,
|
|
18
|
+
})
|
|
19
|
+
|
|
20
|
+
lifeCycle.subscribe(LifeCycleEventType.VITAL_STARTED, (vitalStart) => {
|
|
21
|
+
history.add(
|
|
22
|
+
{
|
|
23
|
+
id: vitalStart.id,
|
|
24
|
+
startClocks: vitalStart.startClocks,
|
|
25
|
+
duration: undefined,
|
|
26
|
+
label: vitalStart.name,
|
|
27
|
+
},
|
|
28
|
+
vitalStart.startClocks.relative
|
|
29
|
+
)
|
|
30
|
+
})
|
|
31
|
+
|
|
32
|
+
lifeCycle.subscribe(LifeCycleEventType.RAW_RUM_EVENT_COLLECTED, ({ rawRumEvent, startClocks, duration }) => {
|
|
33
|
+
if (rawRumEvent.type === 'vital') {
|
|
34
|
+
const historyEntry = history
|
|
35
|
+
.getEntries(startClocks.relative)
|
|
36
|
+
.find((entry) => entry.value.id === rawRumEvent.vital.id)
|
|
37
|
+
|
|
38
|
+
if (historyEntry) {
|
|
39
|
+
historyEntry.value.duration = duration!
|
|
40
|
+
historyEntry.close(addDuration(startClocks.relative, duration!))
|
|
41
|
+
} else {
|
|
42
|
+
history
|
|
43
|
+
.add(
|
|
44
|
+
{
|
|
45
|
+
id: rawRumEvent.vital.id,
|
|
46
|
+
startClocks,
|
|
47
|
+
duration,
|
|
48
|
+
label: rawRumEvent.vital.name,
|
|
49
|
+
},
|
|
50
|
+
startClocks.relative
|
|
51
|
+
)
|
|
52
|
+
.close(addDuration(startClocks.relative, duration!))
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
})
|
|
56
|
+
|
|
57
|
+
return history
|
|
58
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { TimeStamp } from '@datadog/browser-core'
|
|
2
|
+
import { timeStampNow } from '@datadog/browser-core'
|
|
3
|
+
import type { BrowserIncrementalData, BrowserIncrementalSnapshotRecord } from '../../types'
|
|
4
|
+
import { RecordType } from '../../types'
|
|
5
|
+
|
|
6
|
+
export function assembleIncrementalSnapshot<Data extends BrowserIncrementalData>(
|
|
7
|
+
source: Data['source'],
|
|
8
|
+
data: Omit<Data, 'source'>,
|
|
9
|
+
timestamp: TimeStamp = timeStampNow()
|
|
10
|
+
): BrowserIncrementalSnapshotRecord {
|
|
11
|
+
return {
|
|
12
|
+
data: {
|
|
13
|
+
source,
|
|
14
|
+
...data,
|
|
15
|
+
} as Data,
|
|
16
|
+
type: RecordType.IncrementalSnapshot,
|
|
17
|
+
timestamp,
|
|
18
|
+
}
|
|
19
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export type ElementsScrollPositions = ReturnType<typeof createElementsScrollPositions>
|
|
2
|
+
export interface ScrollPositions {
|
|
3
|
+
scrollLeft: number
|
|
4
|
+
scrollTop: number
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
export function createElementsScrollPositions() {
|
|
8
|
+
const scrollPositionsByElement = new WeakMap<Element, ScrollPositions>()
|
|
9
|
+
return {
|
|
10
|
+
set(element: Element | Document, scrollPositions: ScrollPositions) {
|
|
11
|
+
if (element === document && !document.scrollingElement) {
|
|
12
|
+
// cf https://drafts.csswg.org/cssom-view/#dom-document-scrollingelement,
|
|
13
|
+
// in some cases scrolling elements can not be defined, we don't support those for now
|
|
14
|
+
return
|
|
15
|
+
}
|
|
16
|
+
scrollPositionsByElement.set(
|
|
17
|
+
element === document ? document.scrollingElement! : (element as Element),
|
|
18
|
+
scrollPositions
|
|
19
|
+
)
|
|
20
|
+
},
|
|
21
|
+
get(element: Element) {
|
|
22
|
+
return scrollPositionsByElement.get(element)
|
|
23
|
+
},
|
|
24
|
+
has(element: Element) {
|
|
25
|
+
return scrollPositionsByElement.has(element)
|
|
26
|
+
},
|
|
27
|
+
}
|
|
28
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { isNodeShadowHost } from '@datadog/browser-rum-core'
|
|
2
|
+
|
|
3
|
+
export function isTouchEvent(event: MouseEvent | TouchEvent): event is TouchEvent {
|
|
4
|
+
return Boolean((event as TouchEvent).changedTouches)
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
export function getEventTarget(event: Event): Node {
|
|
8
|
+
if (event.composed === true && isNodeShadowHost(event.target as Node)) {
|
|
9
|
+
return event.composedPath()[0] as Node
|
|
10
|
+
}
|
|
11
|
+
return event.target as Node
|
|
12
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export { takeFullSnapshot, takeNodeSnapshot } from './internalApi'
|
|
2
|
+
export { record } from './record'
|
|
3
|
+
export type { SerializationMetric, SerializationStats } from './serialization'
|
|
4
|
+
export {
|
|
5
|
+
aggregateSerializationStats,
|
|
6
|
+
createSerializationStats,
|
|
7
|
+
isFullSnapshotChangeRecordsEnabled,
|
|
8
|
+
isIncrementalSnapshotChangeRecordsEnabled,
|
|
9
|
+
serializeNode,
|
|
10
|
+
} from './serialization'
|
|
11
|
+
export { createElementsScrollPositions } from './elementsScrollPositions'
|
|
12
|
+
export type { ShadowRootsController } from './shadowRootsController'
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { noop, timeStampNow } from '@datadog/browser-core'
|
|
2
|
+
import type { RumConfiguration } from '@datadog/browser-rum-core'
|
|
3
|
+
import { getNodePrivacyLevel, NodePrivacyLevel } from '@datadog/browser-rum-core'
|
|
4
|
+
import type { BrowserRecord, SerializedNodeWithId } from '../../types'
|
|
5
|
+
import { takeFullSnapshot as doTakeFullSnapshot } from './startFullSnapshots'
|
|
6
|
+
import type { ShadowRootsController } from './shadowRootsController'
|
|
7
|
+
import type { RecordingScope } from './recordingScope'
|
|
8
|
+
import { createRecordingScope } from './recordingScope'
|
|
9
|
+
import { createElementsScrollPositions } from './elementsScrollPositions'
|
|
10
|
+
import type { EmitRecordCallback } from './record.types'
|
|
11
|
+
import type { SerializationTransaction } from './serialization'
|
|
12
|
+
import { SerializationKind, serializeInTransaction, serializeNode } from './serialization'
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Take a full snapshot of the document, generating the same records that the browser SDK
|
|
16
|
+
* would generate.
|
|
17
|
+
*
|
|
18
|
+
* This is an internal API function. Be sure to update Datadog-internal callers if you
|
|
19
|
+
* change its signature or behavior.
|
|
20
|
+
*/
|
|
21
|
+
export function takeFullSnapshot({
|
|
22
|
+
configuration,
|
|
23
|
+
}: { configuration?: Partial<RumConfiguration> } = {}): BrowserRecord[] {
|
|
24
|
+
const records: BrowserRecord[] = []
|
|
25
|
+
const emitRecord: EmitRecordCallback = (record: BrowserRecord) => {
|
|
26
|
+
records.push(record)
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
doTakeFullSnapshot(
|
|
30
|
+
timeStampNow(),
|
|
31
|
+
SerializationKind.INITIAL_FULL_SNAPSHOT,
|
|
32
|
+
emitRecord,
|
|
33
|
+
noop,
|
|
34
|
+
createTemporaryRecordingScope(configuration)
|
|
35
|
+
)
|
|
36
|
+
|
|
37
|
+
return records
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Take a snapshot of a DOM node, generating the serialized representation that the
|
|
42
|
+
* browser SDK would generate.
|
|
43
|
+
*
|
|
44
|
+
* This is an internal API function. Be sure to update Datadog-internal callers if you
|
|
45
|
+
* change its signature or behavior.
|
|
46
|
+
*/
|
|
47
|
+
export function takeNodeSnapshot(
|
|
48
|
+
node: Node,
|
|
49
|
+
{ configuration }: { configuration?: Partial<RumConfiguration> } = {}
|
|
50
|
+
): SerializedNodeWithId | null {
|
|
51
|
+
let serializedNode: SerializedNodeWithId | null = null
|
|
52
|
+
|
|
53
|
+
serializeInTransaction(
|
|
54
|
+
SerializationKind.INITIAL_FULL_SNAPSHOT,
|
|
55
|
+
noop,
|
|
56
|
+
noop,
|
|
57
|
+
createTemporaryRecordingScope(configuration),
|
|
58
|
+
(transaction: SerializationTransaction): void => {
|
|
59
|
+
const privacyLevel = getNodePrivacyLevel(node, transaction.scope.configuration.defaultPrivacyLevel)
|
|
60
|
+
if (privacyLevel === NodePrivacyLevel.HIDDEN || privacyLevel === NodePrivacyLevel.IGNORE) {
|
|
61
|
+
return
|
|
62
|
+
}
|
|
63
|
+
serializedNode = serializeNode(node, privacyLevel, transaction)
|
|
64
|
+
}
|
|
65
|
+
)
|
|
66
|
+
|
|
67
|
+
return serializedNode
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
function createTemporaryRecordingScope(configuration?: Partial<RumConfiguration>): RecordingScope {
|
|
71
|
+
return createRecordingScope(
|
|
72
|
+
{
|
|
73
|
+
defaultPrivacyLevel: NodePrivacyLevel.ALLOW,
|
|
74
|
+
...configuration,
|
|
75
|
+
} as RumConfiguration,
|
|
76
|
+
createElementsScrollPositions(),
|
|
77
|
+
{
|
|
78
|
+
addShadowRoot: noop,
|
|
79
|
+
removeShadowRoot: noop,
|
|
80
|
+
flush: noop,
|
|
81
|
+
stop: noop,
|
|
82
|
+
} as ShadowRootsController
|
|
83
|
+
)
|
|
84
|
+
}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
export type EventId = number & { __brand: 'EventId' }
|
|
2
|
+
export type EventIds = ItemIds<Event, EventId>
|
|
3
|
+
export const enum EventIdConstants {
|
|
4
|
+
FIRST_ID = 1,
|
|
5
|
+
}
|
|
6
|
+
export function createEventIds(): EventIds {
|
|
7
|
+
return createWeakIdMap(EventIdConstants.FIRST_ID as EventId)
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export type NodeId = number & { __brand: 'NodeId' }
|
|
11
|
+
export type NodeIds = ItemIds<Node, NodeId>
|
|
12
|
+
export const enum NodeIdConstants {
|
|
13
|
+
FIRST_ID = 0,
|
|
14
|
+
}
|
|
15
|
+
export function createNodeIds(): NodeIds {
|
|
16
|
+
return createWeakIdMap(NodeIdConstants.FIRST_ID as NodeId)
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export type StringId = number & { __brand: 'StringId' }
|
|
20
|
+
export type StringIds = ItemIds<string, StringId>
|
|
21
|
+
export const enum StringIdConstants {
|
|
22
|
+
FIRST_ID = 0,
|
|
23
|
+
}
|
|
24
|
+
export function createStringIds(): StringIds {
|
|
25
|
+
return createIdMap(StringIdConstants.FIRST_ID as StringId)
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export type StyleSheetId = number & { __brand: 'StyleSheetId' }
|
|
29
|
+
export type StyleSheetIds = ItemIds<CSSStyleSheet, StyleSheetId>
|
|
30
|
+
export const enum StyleSheetIdConstants {
|
|
31
|
+
FIRST_ID = 0,
|
|
32
|
+
}
|
|
33
|
+
export function createStyleSheetIds(): StyleSheetIds {
|
|
34
|
+
return createWeakIdMap(StyleSheetIdConstants.FIRST_ID as StyleSheetId)
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export interface ItemIds<ItemType, ItemId extends number> {
|
|
38
|
+
clear(this: void): void
|
|
39
|
+
delete(this: void, item: ItemType): void
|
|
40
|
+
get(this: void, item: ItemType): ItemId | undefined
|
|
41
|
+
getOrInsert(this: void, item: ItemType): ItemId
|
|
42
|
+
get nextId(): ItemId
|
|
43
|
+
get size(): number
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
function createIdMap<ItemType, ItemId extends number>(firstId: ItemId): ItemIds<ItemType, ItemId> {
|
|
47
|
+
return createItemIds(() => new Map<ItemType, ItemId>(), firstId)
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
function createWeakIdMap<ItemType extends object, ItemId extends number>(firstId: ItemId): ItemIds<ItemType, ItemId> {
|
|
51
|
+
return createItemIds(() => new WeakMap<ItemType, ItemId>(), firstId)
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
interface MapLike<Key, Value> {
|
|
55
|
+
delete(key: Key): void
|
|
56
|
+
get(key: Key): Value | undefined
|
|
57
|
+
set(key: Key, value: Value): void
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
function createItemIds<ItemType, ItemId extends number>(
|
|
61
|
+
createMap: () => MapLike<ItemType, ItemId>,
|
|
62
|
+
firstId: ItemId
|
|
63
|
+
): ItemIds<ItemType, ItemId> {
|
|
64
|
+
let map = createMap()
|
|
65
|
+
let nextId = firstId
|
|
66
|
+
|
|
67
|
+
const get = (object: ItemType): ItemId | undefined => map.get(object)
|
|
68
|
+
|
|
69
|
+
return {
|
|
70
|
+
clear(): void {
|
|
71
|
+
if (nextId === firstId) {
|
|
72
|
+
return
|
|
73
|
+
}
|
|
74
|
+
map = createMap()
|
|
75
|
+
nextId = firstId
|
|
76
|
+
},
|
|
77
|
+
delete(object: ItemType): void {
|
|
78
|
+
map.delete(object)
|
|
79
|
+
},
|
|
80
|
+
get,
|
|
81
|
+
getOrInsert(object: ItemType): ItemId {
|
|
82
|
+
// Try to reuse any existing id.
|
|
83
|
+
let id = get(object)
|
|
84
|
+
if (id === undefined) {
|
|
85
|
+
id = nextId++ as ItemId
|
|
86
|
+
map.set(object, id)
|
|
87
|
+
}
|
|
88
|
+
return id
|
|
89
|
+
},
|
|
90
|
+
get nextId(): ItemId {
|
|
91
|
+
return nextId
|
|
92
|
+
},
|
|
93
|
+
get size(): number {
|
|
94
|
+
return nextId - firstId
|
|
95
|
+
},
|
|
96
|
+
}
|
|
97
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { noop, throttle, requestIdleCallback } from '@datadog/browser-core'
|
|
2
|
+
import type { RumMutationRecord } from '@datadog/browser-rum-core'
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Maximum duration to wait before processing mutations. If the browser is idle, mutations will be
|
|
6
|
+
* processed more quickly. If the browser is busy executing small tasks (ex: rendering frames), the
|
|
7
|
+
* mutations will wait MUTATION_PROCESS_MAX_DELAY milliseconds before being processed. If the
|
|
8
|
+
* browser is busy executing a longer task, mutations will be processed after this task.
|
|
9
|
+
*/
|
|
10
|
+
const MUTATION_PROCESS_MAX_DELAY = 100
|
|
11
|
+
/**
|
|
12
|
+
* Minimum duration to wait before processing mutations. This is used to batch mutations together
|
|
13
|
+
* and be able to deduplicate them to save processing time and bandwidth.
|
|
14
|
+
* 16ms is the duration of a frame at 60fps that ensure fluid UI.
|
|
15
|
+
*/
|
|
16
|
+
export const MUTATION_PROCESS_MIN_DELAY = 16
|
|
17
|
+
|
|
18
|
+
export function createMutationBatch(processMutationBatch: (mutations: RumMutationRecord[]) => void) {
|
|
19
|
+
let cancelScheduledFlush = noop
|
|
20
|
+
let pendingMutations: RumMutationRecord[] = []
|
|
21
|
+
|
|
22
|
+
function flush() {
|
|
23
|
+
cancelScheduledFlush()
|
|
24
|
+
processMutationBatch(pendingMutations)
|
|
25
|
+
pendingMutations = []
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
const { throttled: throttledFlush, cancel: cancelThrottle } = throttle(flush, MUTATION_PROCESS_MIN_DELAY, {
|
|
29
|
+
leading: false,
|
|
30
|
+
})
|
|
31
|
+
|
|
32
|
+
return {
|
|
33
|
+
addMutations: (mutations: RumMutationRecord[]) => {
|
|
34
|
+
if (pendingMutations.length === 0) {
|
|
35
|
+
cancelScheduledFlush = requestIdleCallback(throttledFlush, { timeout: MUTATION_PROCESS_MAX_DELAY })
|
|
36
|
+
}
|
|
37
|
+
pendingMutations.push(...mutations)
|
|
38
|
+
},
|
|
39
|
+
|
|
40
|
+
flush,
|
|
41
|
+
|
|
42
|
+
stop: () => {
|
|
43
|
+
cancelScheduledFlush()
|
|
44
|
+
cancelThrottle()
|
|
45
|
+
},
|
|
46
|
+
}
|
|
47
|
+
}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { sendToExtension } from '@datadog/browser-core'
|
|
2
|
+
import type { LifeCycle, RumConfiguration, ViewHistory } from '@datadog/browser-rum-core'
|
|
3
|
+
import * as replayStats from '../replayStats'
|
|
4
|
+
import type { BrowserRecord } from '../../types'
|
|
5
|
+
import type { Tracker } from './trackers'
|
|
6
|
+
import {
|
|
7
|
+
trackFocus,
|
|
8
|
+
trackFrustration,
|
|
9
|
+
trackInput,
|
|
10
|
+
trackMediaInteraction,
|
|
11
|
+
trackMouseInteraction,
|
|
12
|
+
trackMove,
|
|
13
|
+
trackMutation,
|
|
14
|
+
trackScroll,
|
|
15
|
+
trackStyleSheet,
|
|
16
|
+
trackViewEnd,
|
|
17
|
+
trackViewportResize,
|
|
18
|
+
trackVisualViewportResize,
|
|
19
|
+
} from './trackers'
|
|
20
|
+
import { createElementsScrollPositions } from './elementsScrollPositions'
|
|
21
|
+
import type { ShadowRootsController } from './shadowRootsController'
|
|
22
|
+
import { initShadowRootsController } from './shadowRootsController'
|
|
23
|
+
import { startFullSnapshots } from './startFullSnapshots'
|
|
24
|
+
import type { EmitRecordCallback, EmitStatsCallback } from './record.types'
|
|
25
|
+
import { createRecordingScope } from './recordingScope'
|
|
26
|
+
|
|
27
|
+
export interface RecordOptions {
|
|
28
|
+
emitRecord: EmitRecordCallback
|
|
29
|
+
emitStats: EmitStatsCallback
|
|
30
|
+
configuration: RumConfiguration
|
|
31
|
+
lifeCycle: LifeCycle
|
|
32
|
+
viewHistory: ViewHistory
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export interface RecordAPI {
|
|
36
|
+
stop: () => void
|
|
37
|
+
flushMutations: () => void
|
|
38
|
+
shadowRootsController: ShadowRootsController
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export function record(options: RecordOptions): RecordAPI {
|
|
42
|
+
const { emitRecord, emitStats, configuration, lifeCycle } = options
|
|
43
|
+
// runtime checks for user options
|
|
44
|
+
if (!emitRecord || !emitStats) {
|
|
45
|
+
throw new Error('emit functions are required')
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
const processRecord: EmitRecordCallback = (record: BrowserRecord) => {
|
|
49
|
+
emitRecord(record)
|
|
50
|
+
sendToExtension('record', { record })
|
|
51
|
+
const view = options.viewHistory.findView()!
|
|
52
|
+
replayStats.addRecord(view.id)
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
const shadowRootsController = initShadowRootsController(processRecord, emitStats)
|
|
56
|
+
const scope = createRecordingScope(configuration, createElementsScrollPositions(), shadowRootsController)
|
|
57
|
+
|
|
58
|
+
const { stop: stopFullSnapshots } = startFullSnapshots(lifeCycle, processRecord, emitStats, flushMutations, scope)
|
|
59
|
+
|
|
60
|
+
function flushMutations() {
|
|
61
|
+
shadowRootsController.flush()
|
|
62
|
+
mutationTracker.flush()
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
const mutationTracker = trackMutation(document, processRecord, emitStats, scope)
|
|
66
|
+
const trackers: Tracker[] = [
|
|
67
|
+
mutationTracker,
|
|
68
|
+
trackMove(processRecord, scope),
|
|
69
|
+
trackMouseInteraction(processRecord, scope),
|
|
70
|
+
trackScroll(document, processRecord, scope),
|
|
71
|
+
trackViewportResize(processRecord, scope),
|
|
72
|
+
trackInput(document, processRecord, scope),
|
|
73
|
+
trackMediaInteraction(processRecord, scope),
|
|
74
|
+
trackStyleSheet(processRecord, scope),
|
|
75
|
+
trackFocus(processRecord, scope),
|
|
76
|
+
trackVisualViewportResize(processRecord, scope),
|
|
77
|
+
trackFrustration(lifeCycle, processRecord, scope),
|
|
78
|
+
trackViewEnd(lifeCycle, processRecord, flushMutations),
|
|
79
|
+
]
|
|
80
|
+
|
|
81
|
+
return {
|
|
82
|
+
stop: () => {
|
|
83
|
+
shadowRootsController.stop()
|
|
84
|
+
trackers.forEach((tracker) => tracker.stop())
|
|
85
|
+
stopFullSnapshots()
|
|
86
|
+
},
|
|
87
|
+
flushMutations,
|
|
88
|
+
shadowRootsController,
|
|
89
|
+
}
|
|
90
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { RumMutationRecord } from '@datadog/browser-rum-core'
|
|
2
|
+
import type { TimeStamp } from '@datadog/browser-core'
|
|
3
|
+
import type { BrowserFullSnapshotRecord, BrowserIncrementalSnapshotRecord, BrowserRecord } from '../../types'
|
|
4
|
+
import type { SerializationKind, SerializationStats } from './serialization'
|
|
5
|
+
|
|
6
|
+
export type EmitRecordCallback<Record extends BrowserRecord = BrowserRecord> = (record: Record) => void
|
|
7
|
+
export type EmitStatsCallback = (stats: SerializationStats) => void
|
|
8
|
+
|
|
9
|
+
export type SerializeEvent =
|
|
10
|
+
| {
|
|
11
|
+
type: 'full'
|
|
12
|
+
kind: SerializationKind
|
|
13
|
+
target: Document
|
|
14
|
+
timestamp: TimeStamp
|
|
15
|
+
v1: BrowserFullSnapshotRecord
|
|
16
|
+
}
|
|
17
|
+
| {
|
|
18
|
+
type: 'incremental'
|
|
19
|
+
target: RumMutationRecord[]
|
|
20
|
+
timestamp: TimeStamp
|
|
21
|
+
v1: BrowserIncrementalSnapshotRecord
|
|
22
|
+
}
|