@kubesense/kubesense-browser-rum 1.8.0 → 2.0.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +1 -1
- package/README.md +23 -0
- package/bundle/chunks/kubesenseProfiler-4b8cfd8f889074788478-kubesense-rum.js +1 -0
- package/bundle/chunks/kubesenseRecorder-db948e96649585a2b3e9-kubesense-rum.js +1 -0
- package/bundle/kubesense-rum.js +1 -1
- package/cjs/boot/kubesenseRecorder.d.ts +6 -0
- package/cjs/boot/kubesenseRecorder.js +75 -0
- package/cjs/boot/kubesenseRecorder.js.map +1 -0
- package/cjs/boot/lazyLoadProfiler.d.ts +3 -4
- package/cjs/boot/lazyLoadProfiler.js +18 -50
- package/cjs/boot/lazyLoadProfiler.js.map +1 -1
- package/cjs/boot/lazyLoadRecorder.d.ts +3 -4
- package/cjs/boot/lazyLoadRecorder.js +18 -50
- package/cjs/boot/lazyLoadRecorder.js.map +1 -1
- package/cjs/boot/postStartStrategy.d.ts +4 -4
- package/cjs/boot/postStartStrategy.js +89 -110
- package/cjs/boot/postStartStrategy.js.map +1 -1
- package/cjs/boot/preStartStrategy.js +21 -21
- package/cjs/boot/preStartStrategy.js.map +1 -1
- package/cjs/boot/profilerApi.js +44 -50
- package/cjs/boot/profilerApi.js.map +1 -1
- package/cjs/boot/recorderApi.d.ts +1 -3
- package/cjs/boot/recorderApi.js +41 -71
- package/cjs/boot/recorderApi.js.map +1 -1
- package/cjs/domain/deflate/deflateEncoder.d.ts +1 -2
- package/cjs/domain/deflate/deflateEncoder.js +94 -108
- package/cjs/domain/deflate/deflateEncoder.js.map +1 -1
- package/cjs/domain/deflate/deflateWorker.d.ts +3 -4
- package/cjs/domain/deflate/deflateWorker.js +79 -90
- package/cjs/domain/deflate/deflateWorker.js.map +1 -1
- package/cjs/domain/deflate/index.d.ts +1 -1
- package/cjs/domain/deflate/index.js +5 -10
- package/cjs/domain/getSessionReplayLink.d.ts +3 -2
- package/cjs/domain/getSessionReplayLink.js +17 -31
- package/cjs/domain/getSessionReplayLink.js.map +1 -1
- package/cjs/domain/profiling/actionHistory.d.ts +10 -0
- package/cjs/domain/profiling/actionHistory.js +37 -0
- package/cjs/domain/profiling/actionHistory.js.map +1 -0
- package/cjs/domain/profiling/kubesenseProfiler.d.ts +6 -0
- package/cjs/domain/profiling/kubesenseProfiler.js +243 -0
- package/cjs/domain/profiling/kubesenseProfiler.js.map +1 -0
- package/cjs/domain/profiling/longTaskHistory.d.ts +11 -0
- package/cjs/domain/profiling/longTaskHistory.js +22 -0
- package/cjs/domain/profiling/longTaskHistory.js.map +1 -0
- package/cjs/domain/profiling/profilerDebugIds.d.ts +2 -0
- package/cjs/domain/profiling/profilerDebugIds.js +18 -0
- package/cjs/domain/profiling/profilerDebugIds.js.map +1 -0
- package/cjs/domain/profiling/profilingContext.js +20 -25
- package/cjs/domain/profiling/profilingContext.js.map +1 -1
- package/cjs/domain/profiling/profilingSupported.js +6 -8
- package/cjs/domain/profiling/profilingSupported.js.map +1 -1
- package/cjs/domain/profiling/quotaCheck.d.ts +9 -0
- package/cjs/domain/profiling/quotaCheck.js +66 -0
- package/cjs/domain/profiling/quotaCheck.js.map +1 -0
- package/cjs/domain/profiling/test-utils/mockedTrace.d.ts +1 -1
- package/cjs/domain/profiling/transport/buildProfileEvent.d.ts +38 -0
- package/cjs/domain/profiling/transport/buildProfileEvent.js +91 -0
- package/cjs/domain/profiling/transport/buildProfileEvent.js.map +1 -0
- package/cjs/domain/profiling/transport/formDataEmitter.d.ts +5 -0
- package/cjs/domain/profiling/transport/formDataEmitter.js +17 -0
- package/cjs/domain/profiling/transport/formDataEmitter.js.map +1 -0
- package/cjs/domain/profiling/transport/profilingBridge.d.ts +2 -0
- package/cjs/domain/profiling/transport/profilingBridge.js +12 -0
- package/cjs/domain/profiling/transport/profilingBridge.js.map +1 -0
- package/cjs/domain/profiling/{types/rumProfiler.types.d.ts → types.d.ts} +13 -24
- package/cjs/domain/profiling/utils/getCustomOrDefaultViewName.js +5 -5
- package/cjs/domain/profiling/utils/getCustomOrDefaultViewName.js.map +1 -1
- package/cjs/domain/profiling/utils/getDefaultViewName.js +6 -10
- package/cjs/domain/profiling/utils/getDefaultViewName.js.map +1 -1
- package/cjs/domain/profiling/vitalHistory.d.ts +13 -0
- package/cjs/domain/profiling/vitalHistory.js +56 -0
- package/cjs/domain/profiling/vitalHistory.js.map +1 -0
- package/cjs/domain/record/assembly.d.ts +2 -1
- package/cjs/domain/record/assembly.js +15 -14
- package/cjs/domain/record/assembly.js.map +1 -1
- package/cjs/domain/record/canvas/canvasHash.d.ts +2 -0
- package/cjs/domain/record/canvas/canvasHash.js +33 -0
- package/cjs/domain/record/canvas/canvasHash.js.map +1 -0
- package/cjs/domain/record/canvas/canvasManager.d.ts +42 -0
- package/cjs/domain/record/canvas/canvasManager.js +99 -0
- package/cjs/domain/record/canvas/canvasManager.js.map +1 -0
- package/cjs/domain/record/canvas/canvasSnapshot.d.ts +8 -0
- package/cjs/domain/record/canvas/canvasSnapshot.js +40 -0
- package/cjs/domain/record/canvas/canvasSnapshot.js.map +1 -0
- package/cjs/domain/record/canvas/canvasUtils.d.ts +2 -0
- package/cjs/domain/record/canvas/canvasUtils.js +14 -0
- package/cjs/domain/record/canvas/canvasUtils.js.map +1 -0
- package/cjs/domain/record/elementsScrollPositions.js +17 -20
- package/cjs/domain/record/elementsScrollPositions.js.map +1 -1
- package/cjs/domain/record/encoding/changeDecoder.d.ts +39 -0
- package/cjs/domain/record/encoding/changeDecoder.js +152 -0
- package/cjs/domain/record/encoding/changeDecoder.js.map +1 -0
- package/cjs/domain/record/encoding/changeEncoder.d.ts +39 -0
- package/cjs/domain/record/encoding/changeEncoder.js +146 -0
- package/cjs/domain/record/encoding/changeEncoder.js.map +1 -0
- package/cjs/domain/record/encoding/index.d.ts +10 -0
- package/cjs/domain/record/encoding/itemIds.d.ts +32 -0
- package/cjs/domain/record/encoding/itemIds.js +49 -0
- package/cjs/domain/record/encoding/itemIds.js.map +1 -0
- package/cjs/domain/record/encoding/roles.d.ts +52 -0
- package/cjs/domain/record/encoding/roles.js +66 -0
- package/cjs/domain/record/encoding/roles.js.map +1 -0
- package/cjs/domain/record/encoding/stringIds.d.ts +15 -0
- package/cjs/domain/record/encoding/stringIds.js +47 -0
- package/cjs/domain/record/encoding/stringIds.js.map +1 -0
- package/cjs/domain/record/encoding/stringTable.d.ts +15 -0
- package/cjs/domain/record/encoding/stringTable.js +38 -0
- package/cjs/domain/record/encoding/stringTable.js.map +1 -0
- package/cjs/domain/record/eventsUtils.js +9 -10
- package/cjs/domain/record/eventsUtils.js.map +1 -1
- package/cjs/domain/record/index.d.ts +5 -2
- package/cjs/domain/record/index.js +13 -17
- package/cjs/domain/record/internalApi.d.ts +6 -6
- package/cjs/domain/record/internalApi.js +55 -49
- package/cjs/domain/record/internalApi.js.map +1 -1
- package/cjs/domain/record/mutationBatch.d.ts +1 -0
- package/cjs/domain/record/mutationBatch.js +38 -39
- package/cjs/domain/record/mutationBatch.js.map +1 -1
- package/cjs/domain/record/record.d.ts +7 -1
- package/cjs/domain/record/record.js +76 -87
- package/cjs/domain/record/record.js.map +1 -1
- package/cjs/domain/record/record.types.d.ts +1 -0
- package/cjs/domain/record/recordingScope.d.ts +7 -3
- package/cjs/domain/record/recordingScope.js +25 -11
- package/cjs/domain/record/recordingScope.js.map +1 -1
- package/cjs/domain/record/serialization/index.d.ts +4 -2
- package/cjs/domain/record/serialization/index.js +16 -18
- package/cjs/domain/record/serialization/insertionCursor.d.ts +57 -0
- package/cjs/domain/record/serialization/insertionCursor.js +55 -0
- package/cjs/domain/record/serialization/insertionCursor.js.map +1 -0
- package/cjs/domain/record/serialization/serialization.types.d.ts +0 -6
- package/cjs/domain/record/serialization/serializationStats.js +26 -25
- package/cjs/domain/record/serialization/serializationStats.js.map +1 -1
- package/cjs/domain/record/serialization/serializationTransaction.d.ts +44 -22
- package/cjs/domain/record/serialization/serializationTransaction.js +90 -36
- package/cjs/domain/record/serialization/serializationTransaction.js.map +1 -1
- package/cjs/domain/record/serialization/serializationUtils.d.ts +0 -1
- package/cjs/domain/record/serialization/serializationUtils.js +46 -75
- package/cjs/domain/record/serialization/serializationUtils.js.map +1 -1
- package/cjs/domain/record/serialization/serializeAttribute.js +24 -39
- package/cjs/domain/record/serialization/serializeAttribute.js.map +1 -1
- package/cjs/domain/record/serialization/serializeAttributes.d.ts +2 -2
- package/cjs/domain/record/serialization/serializeAttributes.js +100 -152
- package/cjs/domain/record/serialization/serializeAttributes.js.map +1 -1
- package/cjs/domain/record/serialization/serializeFullSnapshot.d.ts +5 -0
- package/cjs/domain/record/serialization/serializeFullSnapshot.js +14 -0
- package/cjs/domain/record/serialization/serializeFullSnapshot.js.map +1 -0
- package/cjs/domain/record/serialization/serializeMutations.d.ts +5 -0
- package/cjs/domain/record/serialization/serializeMutations.js +152 -0
- package/cjs/domain/record/serialization/serializeMutations.js.map +1 -0
- package/cjs/domain/record/serialization/serializeNode.d.ts +3 -6
- package/cjs/domain/record/serialization/serializeNode.js +116 -144
- package/cjs/domain/record/serialization/serializeNode.js.map +1 -1
- package/cjs/domain/record/shadowRootsController.d.ts +2 -2
- package/cjs/domain/record/shadowRootsController.js +37 -42
- package/cjs/domain/record/shadowRootsController.js.map +1 -1
- package/cjs/domain/record/startFullSnapshots.d.ts +1 -1
- package/cjs/domain/record/startFullSnapshots.js +38 -54
- package/cjs/domain/record/startFullSnapshots.js.map +1 -1
- package/cjs/domain/record/trackers/index.d.ts +2 -1
- package/cjs/domain/record/trackers/index.js +25 -27
- package/cjs/domain/record/trackers/trackCanvasCapture.d.ts +3 -0
- package/cjs/domain/record/trackers/trackCanvasCapture.js +102 -0
- package/cjs/domain/record/trackers/trackCanvasCapture.js.map +1 -0
- package/cjs/domain/record/trackers/trackCanvasContent.d.ts +3 -0
- package/cjs/domain/record/trackers/trackCanvasContent.js +31 -0
- package/cjs/domain/record/trackers/trackCanvasContent.js.map +1 -0
- package/cjs/domain/record/trackers/trackFocus.d.ts +1 -2
- package/cjs/domain/record/trackers/trackFocus.js +15 -13
- package/cjs/domain/record/trackers/trackFocus.js.map +1 -1
- package/cjs/domain/record/trackers/trackInput.d.ts +2 -2
- package/cjs/domain/record/trackers/trackInput.js +129 -102
- package/cjs/domain/record/trackers/trackInput.js.map +1 -1
- package/cjs/domain/record/trackers/trackMediaInteraction.js +22 -26
- package/cjs/domain/record/trackers/trackMediaInteraction.js.map +1 -1
- package/cjs/domain/record/trackers/trackMouseInteraction.js +47 -54
- package/cjs/domain/record/trackers/trackMouseInteraction.js.map +1 -1
- package/cjs/domain/record/trackers/trackMove.js +43 -49
- package/cjs/domain/record/trackers/trackMove.js.map +1 -1
- package/cjs/domain/record/trackers/trackMutation.d.ts +3 -3
- package/cjs/domain/record/trackers/trackMutation.js +42 -267
- package/cjs/domain/record/trackers/trackMutation.js.map +1 -1
- package/cjs/domain/record/trackers/trackScroll.js +36 -44
- package/cjs/domain/record/trackers/trackScroll.js.map +1 -1
- package/cjs/domain/record/trackers/trackStyleSheet.js +75 -84
- package/cjs/domain/record/trackers/trackStyleSheet.js.map +1 -1
- package/cjs/domain/record/trackers/trackViewEnd.js +17 -17
- package/cjs/domain/record/trackers/trackViewEnd.js.map +1 -1
- package/cjs/domain/record/trackers/trackViewportResize.d.ts +2 -3
- package/cjs/domain/record/trackers/trackViewportResize.js +36 -42
- package/cjs/domain/record/trackers/trackViewportResize.js.map +1 -1
- package/cjs/domain/record/viewports.js +32 -50
- package/cjs/domain/record/viewports.js.map +1 -1
- package/cjs/domain/replayStats.d.ts +1 -0
- package/cjs/domain/replayStats.js +36 -44
- package/cjs/domain/replayStats.js.map +1 -1
- package/cjs/domain/scriptLoadingError.js +15 -22
- package/cjs/domain/scriptLoadingError.js.map +1 -1
- package/cjs/domain/segmentCollection/buildReplayPayload.js +22 -23
- package/cjs/domain/segmentCollection/buildReplayPayload.js.map +1 -1
- package/cjs/domain/segmentCollection/buildResourcePayload.d.ts +5 -0
- package/cjs/domain/segmentCollection/buildResourcePayload.js +19 -0
- package/cjs/domain/segmentCollection/buildResourcePayload.js.map +1 -0
- package/cjs/domain/segmentCollection/index.d.ts +3 -0
- package/cjs/domain/segmentCollection/index.js +14 -11
- package/cjs/domain/segmentCollection/replayResourceCollection.d.ts +10 -0
- package/cjs/domain/segmentCollection/replayResourceCollection.js +52 -0
- package/cjs/domain/segmentCollection/replayResourceCollection.js.map +1 -0
- package/cjs/domain/segmentCollection/segment.js +50 -80
- package/cjs/domain/segmentCollection/segment.js.map +1 -1
- package/cjs/domain/segmentCollection/segmentCollection.d.ts +4 -4
- package/cjs/domain/segmentCollection/segmentCollection.js +87 -105
- package/cjs/domain/segmentCollection/segmentCollection.js.map +1 -1
- package/cjs/domain/segmentCollection/startDroppedSegmentRecovery.d.ts +16 -0
- package/cjs/domain/segmentCollection/startDroppedSegmentRecovery.js +29 -0
- package/cjs/domain/segmentCollection/startDroppedSegmentRecovery.js.map +1 -0
- package/cjs/domain/segmentCollection/startSegmentTelemetry.js +40 -42
- package/cjs/domain/segmentCollection/startSegmentTelemetry.js.map +1 -1
- package/cjs/domain/startRecordBridge.js +10 -14
- package/cjs/domain/startRecordBridge.js.map +1 -1
- package/cjs/domain/startRecorderInitTelemetry.js +42 -50
- package/cjs/domain/startRecorderInitTelemetry.js.map +1 -1
- package/cjs/entries/internal.d.ts +11 -2
- package/cjs/entries/internal.js +47 -28
- package/cjs/entries/internalSynthetics.js +26 -24
- package/cjs/entries/internalSynthetics.js.map +1 -1
- package/cjs/entries/main.d.ts +5 -3
- package/cjs/entries/main.js +50 -31
- package/cjs/entries/main.js.map +1 -1
- package/cjs/types/index.d.ts +1 -0
- package/cjs/types/profiling.d.ts +313 -0
- package/cjs/types/sessionReplay.d.ts +381 -3
- package/cjs/types/sessionReplayConstants.d.ts +57 -0
- package/cjs/types/sessionReplayConstants.js +104 -47
- package/cjs/types/sessionReplayConstants.js.map +1 -1
- package/esm/boot/kubesenseRecorder.mjs +75 -0
- package/esm/boot/kubesenseRecorder.mjs.map +1 -0
- package/esm/boot/lazyLoadProfiler.mjs +24 -0
- package/esm/boot/lazyLoadProfiler.mjs.map +1 -0
- package/esm/boot/lazyLoadRecorder.mjs +24 -0
- package/esm/boot/lazyLoadRecorder.mjs.map +1 -0
- package/esm/boot/postStartStrategy.mjs +97 -0
- package/esm/boot/postStartStrategy.mjs.map +1 -0
- package/esm/boot/preStartStrategy.mjs +24 -0
- package/esm/boot/preStartStrategy.mjs.map +1 -0
- package/esm/boot/profilerApi.mjs +47 -0
- package/esm/boot/profilerApi.mjs.map +1 -0
- package/esm/boot/recorderApi.mjs +43 -0
- package/esm/boot/recorderApi.mjs.map +1 -0
- package/esm/domain/deflate/deflateEncoder.mjs +96 -0
- package/esm/domain/deflate/deflateEncoder.mjs.map +1 -0
- package/esm/domain/deflate/deflateWorker.mjs +90 -0
- package/esm/domain/deflate/deflateWorker.mjs.map +1 -0
- package/esm/domain/deflate/index.mjs +3 -0
- package/esm/domain/getSessionReplayLink.mjs +21 -0
- package/esm/domain/getSessionReplayLink.mjs.map +1 -0
- package/esm/domain/profiling/actionHistory.mjs +36 -0
- package/esm/domain/profiling/actionHistory.mjs.map +1 -0
- package/esm/domain/profiling/kubesenseProfiler.mjs +242 -0
- package/esm/domain/profiling/kubesenseProfiler.mjs.map +1 -0
- package/esm/domain/profiling/longTaskHistory.mjs +21 -0
- package/esm/domain/profiling/longTaskHistory.mjs.map +1 -0
- package/esm/domain/profiling/profilerDebugIds.mjs +18 -0
- package/esm/domain/profiling/profilerDebugIds.mjs.map +1 -0
- package/esm/domain/profiling/profilingContext.mjs +23 -0
- package/esm/domain/profiling/profilingContext.mjs.map +1 -0
- package/esm/domain/profiling/profilingSupported.mjs +9 -0
- package/esm/domain/profiling/profilingSupported.mjs.map +1 -0
- package/esm/domain/profiling/quotaCheck.mjs +66 -0
- package/esm/domain/profiling/quotaCheck.mjs.map +1 -0
- package/esm/domain/profiling/transport/buildProfileEvent.mjs +90 -0
- package/esm/domain/profiling/transport/buildProfileEvent.mjs.map +1 -0
- package/esm/domain/profiling/transport/formDataEmitter.mjs +17 -0
- package/esm/domain/profiling/transport/formDataEmitter.mjs.map +1 -0
- package/esm/domain/profiling/transport/profilingBridge.mjs +12 -0
- package/esm/domain/profiling/transport/profilingBridge.mjs.map +1 -0
- package/esm/domain/profiling/utils/getCustomOrDefaultViewName.mjs +7 -0
- package/esm/domain/profiling/utils/getCustomOrDefaultViewName.mjs.map +1 -0
- package/esm/domain/profiling/utils/getDefaultViewName.mjs +10 -0
- package/esm/domain/profiling/utils/getDefaultViewName.mjs.map +1 -0
- package/esm/domain/profiling/vitalHistory.mjs +55 -0
- package/esm/domain/profiling/vitalHistory.mjs.map +1 -0
- package/esm/domain/record/assembly.mjs +17 -0
- package/esm/domain/record/assembly.mjs.map +1 -0
- package/esm/domain/record/canvas/canvasHash.mjs +33 -0
- package/esm/domain/record/canvas/canvasHash.mjs.map +1 -0
- package/esm/domain/record/canvas/canvasManager.mjs +99 -0
- package/esm/domain/record/canvas/canvasManager.mjs.map +1 -0
- package/esm/domain/record/canvas/canvasSnapshot.mjs +38 -0
- package/esm/domain/record/canvas/canvasSnapshot.mjs.map +1 -0
- package/esm/domain/record/canvas/canvasUtils.mjs +13 -0
- package/esm/domain/record/canvas/canvasUtils.mjs.map +1 -0
- package/esm/domain/record/elementsScrollPositions.mjs +20 -0
- package/esm/domain/record/elementsScrollPositions.mjs.map +1 -0
- package/esm/domain/record/encoding/changeDecoder.mjs +152 -0
- package/esm/domain/record/encoding/changeDecoder.mjs.map +1 -0
- package/esm/domain/record/encoding/changeEncoder.mjs +146 -0
- package/esm/domain/record/encoding/changeEncoder.mjs.map +1 -0
- package/esm/domain/record/encoding/itemIds.mjs +47 -0
- package/esm/domain/record/encoding/itemIds.mjs.map +1 -0
- package/esm/domain/record/encoding/roles.mjs +64 -0
- package/esm/domain/record/encoding/roles.mjs.map +1 -0
- package/esm/domain/record/encoding/stringIds.mjs +47 -0
- package/esm/domain/record/encoding/stringIds.mjs.map +1 -0
- package/esm/domain/record/encoding/stringTable.mjs +38 -0
- package/esm/domain/record/encoding/stringTable.mjs.map +1 -0
- package/esm/domain/record/eventsUtils.mjs +13 -0
- package/esm/domain/record/eventsUtils.mjs.map +1 -0
- package/esm/domain/record/index.mjs +8 -0
- package/esm/domain/record/internalApi.mjs +62 -0
- package/esm/domain/record/internalApi.mjs.map +1 -0
- package/esm/domain/record/mutationBatch.mjs +43 -0
- package/esm/domain/record/mutationBatch.mjs.map +1 -0
- package/esm/domain/record/record.mjs +79 -0
- package/esm/domain/record/record.mjs.map +1 -0
- package/esm/domain/record/recordingScope.mjs +27 -0
- package/esm/domain/record/recordingScope.mjs.map +1 -0
- package/esm/domain/record/serialization/index.mjs +9 -0
- package/esm/domain/record/serialization/insertionCursor.mjs +54 -0
- package/esm/domain/record/serialization/insertionCursor.mjs.map +1 -0
- package/esm/domain/record/serialization/serializationStats.mjs +31 -0
- package/esm/domain/record/serialization/serializationStats.mjs.map +1 -0
- package/esm/domain/record/serialization/serializationTransaction.mjs +92 -0
- package/esm/domain/record/serialization/serializationTransaction.mjs.map +1 -0
- package/esm/domain/record/serialization/serializationUtils.mjs +53 -0
- package/esm/domain/record/serialization/serializationUtils.mjs.map +1 -0
- package/esm/domain/record/serialization/serializeAttribute.mjs +26 -0
- package/esm/domain/record/serialization/serializeAttribute.mjs.map +1 -0
- package/esm/domain/record/serialization/serializeAttributes.mjs +113 -0
- package/esm/domain/record/serialization/serializeAttributes.mjs.map +1 -0
- package/esm/domain/record/serialization/serializeFullSnapshot.mjs +14 -0
- package/esm/domain/record/serialization/serializeFullSnapshot.mjs.map +1 -0
- package/esm/domain/record/serialization/serializeMutations.mjs +152 -0
- package/esm/domain/record/serialization/serializeMutations.mjs.map +1 -0
- package/esm/domain/record/serialization/serializeNode.mjs +126 -0
- package/esm/domain/record/serialization/serializeNode.mjs.map +1 -0
- package/esm/domain/record/shadowRootsController.mjs +40 -0
- package/esm/domain/record/shadowRootsController.mjs.map +1 -0
- package/esm/domain/record/startFullSnapshots.mjs +42 -0
- package/esm/domain/record/startFullSnapshots.mjs.map +1 -0
- package/esm/domain/record/trackers/index.mjs +13 -0
- package/esm/domain/record/trackers/trackCanvasCapture.mjs +102 -0
- package/esm/domain/record/trackers/trackCanvasCapture.mjs.map +1 -0
- package/esm/domain/record/trackers/trackCanvasContent.mjs +31 -0
- package/esm/domain/record/trackers/trackCanvasContent.mjs.map +1 -0
- package/esm/domain/record/trackers/trackFocus.mjs +17 -0
- package/esm/domain/record/trackers/trackFocus.mjs.map +1 -0
- package/esm/domain/record/trackers/trackInput.mjs +131 -0
- package/esm/domain/record/trackers/trackInput.mjs.map +1 -0
- package/esm/domain/record/trackers/trackMediaInteraction.mjs +25 -0
- package/esm/domain/record/trackers/trackMediaInteraction.mjs.map +1 -0
- package/esm/domain/record/trackers/trackMouseInteraction.mjs +52 -0
- package/esm/domain/record/trackers/trackMouseInteraction.mjs.map +1 -0
- package/esm/domain/record/trackers/trackMove.mjs +48 -0
- package/esm/domain/record/trackers/trackMove.mjs.map +1 -0
- package/esm/domain/record/trackers/trackMutation.mjs +45 -0
- package/esm/domain/record/trackers/trackMutation.mjs.map +1 -0
- package/esm/domain/record/trackers/trackScroll.mjs +40 -0
- package/esm/domain/record/trackers/trackScroll.mjs.map +1 -0
- package/esm/domain/record/trackers/trackStyleSheet.mjs +79 -0
- package/esm/domain/record/trackers/trackStyleSheet.mjs.map +1 -0
- package/esm/domain/record/trackers/trackViewEnd.mjs +20 -0
- package/esm/domain/record/trackers/trackViewEnd.mjs.map +1 -0
- package/esm/domain/record/trackers/trackViewportResize.mjs +39 -0
- package/esm/domain/record/trackers/trackViewportResize.mjs.map +1 -0
- package/esm/domain/record/viewports.mjs +41 -0
- package/esm/domain/record/viewports.mjs.map +1 -0
- package/esm/domain/replayStats.mjs +46 -0
- package/esm/domain/replayStats.mjs.map +1 -0
- package/esm/domain/scriptLoadingError.mjs +19 -0
- package/esm/domain/scriptLoadingError.mjs.map +1 -0
- package/esm/domain/segmentCollection/buildReplayPayload.mjs +25 -0
- package/esm/domain/segmentCollection/buildReplayPayload.mjs.map +1 -0
- package/esm/domain/segmentCollection/buildResourcePayload.mjs +19 -0
- package/esm/domain/segmentCollection/buildResourcePayload.mjs.map +1 -0
- package/esm/domain/segmentCollection/index.mjs +5 -0
- package/esm/domain/segmentCollection/replayResourceCollection.mjs +52 -0
- package/esm/domain/segmentCollection/replayResourceCollection.mjs.map +1 -0
- package/esm/domain/segmentCollection/segment.mjs +52 -0
- package/esm/domain/segmentCollection/segment.mjs.map +1 -0
- package/esm/domain/segmentCollection/segmentCollection.mjs +87 -0
- package/esm/domain/segmentCollection/segmentCollection.mjs.map +1 -0
- package/esm/domain/segmentCollection/startDroppedSegmentRecovery.mjs +28 -0
- package/esm/domain/segmentCollection/startDroppedSegmentRecovery.mjs.map +1 -0
- package/esm/domain/segmentCollection/startSegmentTelemetry.mjs +45 -0
- package/esm/domain/segmentCollection/startSegmentTelemetry.mjs.map +1 -0
- package/esm/domain/startRecordBridge.mjs +13 -0
- package/esm/domain/startRecordBridge.mjs.map +1 -0
- package/esm/domain/startRecorderInitTelemetry.mjs +47 -0
- package/esm/domain/startRecorderInitTelemetry.mjs.map +1 -0
- package/esm/entries/internal.mjs +8 -0
- package/esm/entries/internalSynthetics.mjs +22 -0
- package/esm/entries/internalSynthetics.mjs.map +1 -0
- package/esm/entries/main.mjs +35 -0
- package/esm/entries/main.mjs.map +1 -0
- package/esm/types/sessionReplayConstants.mjs +97 -0
- package/esm/types/sessionReplayConstants.mjs.map +1 -0
- package/internal/package.json +1 -1
- package/internal-synthetics/package.json +1 -1
- package/package.json +26 -15
- package/src/boot/kubesenseRecorder.ts +134 -0
- package/src/boot/lazyLoadProfiler.ts +6 -7
- package/src/boot/lazyLoadRecorder.ts +6 -7
- package/src/boot/postStartStrategy.ts +18 -16
- package/src/boot/profilerApi.ts +29 -19
- package/src/boot/recorderApi.ts +6 -21
- package/src/domain/deflate/deflateEncoder.ts +3 -8
- package/src/domain/deflate/deflateWorker.ts +8 -13
- package/src/domain/deflate/index.ts +1 -0
- package/src/domain/getSessionReplayLink.ts +15 -11
- package/src/domain/profiling/actionHistory.ts +66 -0
- package/src/domain/profiling/{profiler.ts → kubesenseProfiler.ts} +166 -79
- package/src/domain/profiling/longTaskHistory.ts +45 -0
- package/src/domain/profiling/profilerDebugIds.ts +17 -0
- package/src/domain/profiling/profilingContext.ts +8 -3
- package/src/domain/profiling/profilingSupported.ts +2 -7
- package/src/domain/profiling/quotaCheck.ts +89 -0
- package/src/domain/profiling/test-utils/mockedTrace.ts +1 -2
- package/src/domain/profiling/transport/buildProfileEvent.ts +143 -0
- package/src/domain/profiling/transport/formDataEmitter.ts +17 -0
- package/src/domain/profiling/transport/profilingBridge.ts +9 -0
- package/src/domain/profiling/{types/rumProfiler.types.ts → types.ts} +14 -26
- package/src/domain/profiling/vitalHistory.ts +106 -0
- package/src/domain/record/assembly.ts +5 -3
- package/src/domain/record/canvas/canvasHash.ts +54 -0
- package/src/domain/record/canvas/canvasManager.ts +175 -0
- package/src/domain/record/canvas/canvasSnapshot.ts +52 -0
- package/src/domain/record/canvas/canvasUtils.ts +11 -0
- package/src/domain/record/encoding/changeDecoder.ts +287 -0
- package/src/domain/record/encoding/changeEncoder.ts +327 -0
- package/src/domain/record/encoding/index.ts +19 -0
- package/src/domain/record/encoding/itemIds.ts +84 -0
- package/src/domain/record/encoding/roles.ts +136 -0
- package/src/domain/record/encoding/stringIds.ts +70 -0
- package/src/domain/record/encoding/stringTable.ts +68 -0
- package/src/domain/record/index.ts +5 -2
- package/src/domain/record/internalApi.ts +21 -18
- package/src/domain/record/mutationBatch.ts +14 -3
- package/src/domain/record/record.ts +35 -16
- package/src/domain/record/record.types.ts +1 -0
- package/src/domain/record/recordingScope.ts +28 -5
- package/src/domain/record/serialization/index.ts +4 -2
- package/src/domain/record/serialization/insertionCursor.ts +131 -0
- package/src/domain/record/serialization/serialization.types.ts +0 -16
- package/src/domain/record/serialization/serializationTransaction.ts +191 -37
- package/src/domain/record/serialization/serializationUtils.ts +1 -15
- package/src/domain/record/serialization/serializeAttributes.ts +36 -32
- package/src/domain/record/serialization/serializeFullSnapshot.ts +26 -0
- package/src/domain/record/serialization/serializeMutations.ts +357 -0
- package/src/domain/record/serialization/serializeNode.ts +200 -164
- package/src/domain/record/shadowRootsController.ts +4 -3
- package/src/domain/record/startFullSnapshots.ts +28 -41
- package/src/domain/record/trackers/index.ts +2 -1
- package/src/domain/record/trackers/trackCanvasCapture.ts +137 -0
- package/src/domain/record/trackers/trackCanvasContent.ts +46 -0
- package/src/domain/record/trackers/trackFocus.ts +4 -4
- package/src/domain/record/trackers/trackInput.ts +146 -41
- package/src/domain/record/trackers/trackMediaInteraction.ts +0 -1
- package/src/domain/record/trackers/trackMouseInteraction.ts +1 -2
- package/src/domain/record/trackers/trackMove.ts +0 -1
- package/src/domain/record/trackers/trackMutation.ts +17 -355
- package/src/domain/record/trackers/trackScroll.ts +1 -1
- package/src/domain/record/trackers/trackStyleSheet.ts +1 -1
- package/src/domain/record/trackers/trackViewEnd.ts +1 -1
- package/src/domain/record/trackers/trackViewportResize.ts +7 -16
- package/src/domain/record/trackers/tracker.types.ts +1 -1
- package/src/domain/replayStats.ts +5 -0
- package/src/domain/scriptLoadingError.ts +2 -1
- package/src/domain/segmentCollection/buildResourcePayload.ts +20 -0
- package/src/domain/segmentCollection/index.ts +3 -0
- package/src/domain/segmentCollection/replayResourceCollection.ts +79 -0
- package/src/domain/segmentCollection/segment.ts +2 -1
- package/src/domain/segmentCollection/segmentCollection.ts +14 -13
- package/src/domain/segmentCollection/startDroppedSegmentRecovery.ts +37 -0
- package/src/domain/segmentCollection/startSegmentTelemetry.ts +16 -2
- package/src/domain/startRecorderInitTelemetry.ts +5 -3
- package/src/entries/internal.ts +13 -2
- package/src/entries/internalSynthetics.ts +3 -4
- package/src/entries/main.ts +23 -14
- package/src/types/index.ts +1 -0
- package/src/types/profiling.ts +315 -0
- package/src/types/sessionReplay.ts +395 -3
- package/src/types/sessionReplayConstants.ts +109 -0
- package/bundle/chunks/profiler-6f621c66a29d9f39a9bd-kubesense-rum.js +0 -1
- package/bundle/chunks/recorder-c73b8d42b98d4a01f120-kubesense-rum.js +0 -1
- package/cjs/boot/isBrowserSupported.d.ts +0 -4
- package/cjs/boot/isBrowserSupported.js +0 -17
- package/cjs/boot/isBrowserSupported.js.map +0 -1
- package/cjs/boot/startRecording.d.ts +0 -6
- package/cjs/boot/startRecording.js +0 -45
- package/cjs/boot/startRecording.js.map +0 -1
- package/cjs/domain/deflate/index.js.map +0 -1
- package/cjs/domain/profiling/profiler.d.ts +0 -7
- package/cjs/domain/profiling/profiler.js +0 -244
- package/cjs/domain/profiling/profiler.js.map +0 -1
- package/cjs/domain/profiling/test-utils/mockedTrace.js +0 -57
- package/cjs/domain/profiling/test-utils/mockedTrace.js.map +0 -1
- package/cjs/domain/profiling/transport/assembly.d.ts +0 -21
- package/cjs/domain/profiling/transport/assembly.js +0 -45
- package/cjs/domain/profiling/transport/assembly.js.map +0 -1
- package/cjs/domain/profiling/transport/buildProfileEventAttributes.d.ts +0 -25
- package/cjs/domain/profiling/transport/buildProfileEventAttributes.js +0 -50
- package/cjs/domain/profiling/transport/buildProfileEventAttributes.js.map +0 -1
- package/cjs/domain/profiling/types/index.d.ts +0 -2
- package/cjs/domain/profiling/types/index.js +0 -3
- package/cjs/domain/profiling/types/index.js.map +0 -1
- package/cjs/domain/profiling/types/profilerApi.types.d.ts +0 -58
- package/cjs/domain/profiling/types/profilerApi.types.js +0 -5
- package/cjs/domain/profiling/types/profilerApi.types.js.map +0 -1
- package/cjs/domain/profiling/types/rumProfiler.types.js +0 -3
- package/cjs/domain/profiling/types/rumProfiler.types.js.map +0 -1
- package/cjs/domain/profiling/utils/getNumberOfSamples.d.ts +0 -7
- package/cjs/domain/profiling/utils/getNumberOfSamples.js +0 -18
- package/cjs/domain/profiling/utils/getNumberOfSamples.js.map +0 -1
- package/cjs/domain/record/eventIds.d.ts +0 -4
- package/cjs/domain/record/eventIds.js +0 -16
- package/cjs/domain/record/eventIds.js.map +0 -1
- package/cjs/domain/record/index.js.map +0 -1
- package/cjs/domain/record/nodeIds.d.ts +0 -15
- package/cjs/domain/record/nodeIds.js +0 -32
- package/cjs/domain/record/nodeIds.js.map +0 -1
- package/cjs/domain/record/record.types.js +0 -3
- package/cjs/domain/record/record.types.js.map +0 -1
- package/cjs/domain/record/serialization/index.js.map +0 -1
- package/cjs/domain/record/serialization/serialization.types.js +0 -3
- package/cjs/domain/record/serialization/serialization.types.js.map +0 -1
- package/cjs/domain/record/serialization/serializeDocument.d.ts +0 -3
- package/cjs/domain/record/serialization/serializeDocument.js +0 -11
- package/cjs/domain/record/serialization/serializeDocument.js.map +0 -1
- package/cjs/domain/record/serialization/serializeStyleSheets.d.ts +0 -2
- package/cjs/domain/record/serialization/serializeStyleSheets.js +0 -19
- package/cjs/domain/record/serialization/serializeStyleSheets.js.map +0 -1
- package/cjs/domain/record/trackers/index.js.map +0 -1
- package/cjs/domain/record/trackers/trackFrustration.d.ts +0 -7
- package/cjs/domain/record/trackers/trackFrustration.js +0 -31
- package/cjs/domain/record/trackers/trackFrustration.js.map +0 -1
- package/cjs/domain/record/trackers/tracker.types.js +0 -3
- package/cjs/domain/record/trackers/tracker.types.js.map +0 -1
- package/cjs/domain/segmentCollection/index.js.map +0 -1
- package/cjs/entries/internal.js.map +0 -1
- package/cjs/types/index.js +0 -18
- package/cjs/types/index.js.map +0 -1
- package/cjs/types/sessionReplay.js +0 -7
- package/cjs/types/sessionReplay.js.map +0 -1
- package/esm/boot/isBrowserSupported.d.ts +0 -4
- package/esm/boot/isBrowserSupported.js +0 -14
- package/esm/boot/isBrowserSupported.js.map +0 -1
- package/esm/boot/lazyLoadProfiler.d.ts +0 -4
- package/esm/boot/lazyLoadProfiler.js +0 -18
- package/esm/boot/lazyLoadProfiler.js.map +0 -1
- package/esm/boot/lazyLoadRecorder.d.ts +0 -4
- package/esm/boot/lazyLoadRecorder.js +0 -18
- package/esm/boot/lazyLoadRecorder.js.map +0 -1
- package/esm/boot/postStartStrategy.d.ts +0 -33
- package/esm/boot/postStartStrategy.js +0 -115
- package/esm/boot/postStartStrategy.js.map +0 -1
- package/esm/boot/preStartStrategy.d.ts +0 -6
- package/esm/boot/preStartStrategy.js +0 -21
- package/esm/boot/preStartStrategy.js.map +0 -1
- package/esm/boot/profilerApi.d.ts +0 -2
- package/esm/boot/profilerApi.js +0 -50
- package/esm/boot/profilerApi.js.map +0 -1
- package/esm/boot/recorderApi.d.ts +0 -4
- package/esm/boot/recorderApi.js +0 -70
- package/esm/boot/recorderApi.js.map +0 -1
- package/esm/boot/startRecording.d.ts +0 -6
- package/esm/boot/startRecording.js +0 -42
- package/esm/boot/startRecording.js.map +0 -1
- package/esm/domain/deflate/deflateEncoder.d.ts +0 -3
- package/esm/domain/deflate/deflateEncoder.js +0 -107
- package/esm/domain/deflate/deflateEncoder.js.map +0 -1
- package/esm/domain/deflate/deflateWorker.d.ts +0 -30
- package/esm/domain/deflate/deflateWorker.js +0 -97
- package/esm/domain/deflate/deflateWorker.js.map +0 -1
- package/esm/domain/deflate/index.d.ts +0 -3
- package/esm/domain/deflate/index.js +0 -3
- package/esm/domain/deflate/index.js.map +0 -1
- package/esm/domain/getSessionReplayLink.d.ts +0 -2
- package/esm/domain/getSessionReplayLink.js +0 -32
- package/esm/domain/getSessionReplayLink.js.map +0 -1
- package/esm/domain/profiling/profiler.d.ts +0 -7
- package/esm/domain/profiling/profiler.js +0 -240
- package/esm/domain/profiling/profiler.js.map +0 -1
- package/esm/domain/profiling/profilingContext.d.ts +0 -6
- package/esm/domain/profiling/profilingContext.js +0 -25
- package/esm/domain/profiling/profilingContext.js.map +0 -1
- package/esm/domain/profiling/profilingSupported.d.ts +0 -1
- package/esm/domain/profiling/profilingSupported.js +0 -8
- package/esm/domain/profiling/profilingSupported.js.map +0 -1
- package/esm/domain/profiling/test-utils/mockedTrace.d.ts +0 -3
- package/esm/domain/profiling/test-utils/mockedTrace.js +0 -54
- package/esm/domain/profiling/test-utils/mockedTrace.js.map +0 -1
- package/esm/domain/profiling/transport/assembly.d.ts +0 -21
- package/esm/domain/profiling/transport/assembly.js +0 -42
- package/esm/domain/profiling/transport/assembly.js.map +0 -1
- package/esm/domain/profiling/transport/buildProfileEventAttributes.d.ts +0 -25
- package/esm/domain/profiling/transport/buildProfileEventAttributes.js +0 -47
- package/esm/domain/profiling/transport/buildProfileEventAttributes.js.map +0 -1
- package/esm/domain/profiling/types/index.d.ts +0 -2
- package/esm/domain/profiling/types/index.js +0 -2
- package/esm/domain/profiling/types/index.js.map +0 -1
- package/esm/domain/profiling/types/profilerApi.types.d.ts +0 -58
- package/esm/domain/profiling/types/profilerApi.types.js +0 -4
- package/esm/domain/profiling/types/profilerApi.types.js.map +0 -1
- package/esm/domain/profiling/types/rumProfiler.types.d.ts +0 -72
- package/esm/domain/profiling/types/rumProfiler.types.js +0 -2
- package/esm/domain/profiling/types/rumProfiler.types.js.map +0 -1
- package/esm/domain/profiling/utils/getCustomOrDefaultViewName.d.ts +0 -1
- package/esm/domain/profiling/utils/getCustomOrDefaultViewName.js +0 -3
- package/esm/domain/profiling/utils/getCustomOrDefaultViewName.js.map +0 -1
- package/esm/domain/profiling/utils/getDefaultViewName.d.ts +0 -1
- package/esm/domain/profiling/utils/getDefaultViewName.js +0 -11
- package/esm/domain/profiling/utils/getDefaultViewName.js.map +0 -1
- package/esm/domain/profiling/utils/getNumberOfSamples.d.ts +0 -7
- package/esm/domain/profiling/utils/getNumberOfSamples.js +0 -15
- package/esm/domain/profiling/utils/getNumberOfSamples.js.map +0 -1
- package/esm/domain/record/assembly.d.ts +0 -2
- package/esm/domain/record/assembly.js +0 -13
- package/esm/domain/record/assembly.js.map +0 -1
- package/esm/domain/record/elementsScrollPositions.d.ts +0 -10
- package/esm/domain/record/elementsScrollPositions.js +0 -20
- package/esm/domain/record/elementsScrollPositions.js.map +0 -1
- package/esm/domain/record/eventIds.d.ts +0 -4
- package/esm/domain/record/eventIds.js +0 -13
- package/esm/domain/record/eventIds.js.map +0 -1
- package/esm/domain/record/eventsUtils.d.ts +0 -2
- package/esm/domain/record/eventsUtils.js +0 -11
- package/esm/domain/record/eventsUtils.js.map +0 -1
- package/esm/domain/record/index.d.ts +0 -7
- package/esm/domain/record/index.js +0 -6
- package/esm/domain/record/index.js.map +0 -1
- package/esm/domain/record/internalApi.d.ts +0 -22
- package/esm/domain/record/internalApi.js +0 -53
- package/esm/domain/record/internalApi.js.map +0 -1
- package/esm/domain/record/mutationBatch.d.ts +0 -12
- package/esm/domain/record/mutationBatch.js +0 -40
- package/esm/domain/record/mutationBatch.js.map +0 -1
- package/esm/domain/record/nodeIds.d.ts +0 -15
- package/esm/domain/record/nodeIds.js +0 -29
- package/esm/domain/record/nodeIds.js.map +0 -1
- package/esm/domain/record/record.d.ts +0 -16
- package/esm/domain/record/record.js +0 -54
- package/esm/domain/record/record.js.map +0 -1
- package/esm/domain/record/record.types.d.ts +0 -4
- package/esm/domain/record/record.types.js +0 -2
- package/esm/domain/record/record.types.js.map +0 -1
- package/esm/domain/record/recordingScope.d.ts +0 -19
- package/esm/domain/record/recordingScope.js +0 -10
- package/esm/domain/record/recordingScope.js.map +0 -1
- package/esm/domain/record/serialization/index.d.ts +0 -8
- package/esm/domain/record/serialization/index.js +0 -7
- package/esm/domain/record/serialization/index.js.map +0 -1
- package/esm/domain/record/serialization/serialization.types.d.ts +0 -28
- package/esm/domain/record/serialization/serialization.types.js +0 -2
- package/esm/domain/record/serialization/serialization.types.js.map +0 -1
- package/esm/domain/record/serialization/serializationStats.d.ts +0 -12
- package/esm/domain/record/serialization/serializationStats.js +0 -27
- package/esm/domain/record/serialization/serializationStats.js.map +0 -1
- package/esm/domain/record/serialization/serializationTransaction.d.ts +0 -45
- package/esm/domain/record/serialization/serializationTransaction.js +0 -35
- package/esm/domain/record/serialization/serializationTransaction.js.map +0 -1
- package/esm/domain/record/serialization/serializationUtils.d.ts +0 -18
- package/esm/domain/record/serialization/serializationUtils.js +0 -80
- package/esm/domain/record/serialization/serializationUtils.js.map +0 -1
- package/esm/domain/record/serialization/serializeAttribute.d.ts +0 -4
- package/esm/domain/record/serialization/serializeAttribute.js +0 -38
- package/esm/domain/record/serialization/serializeAttribute.js.map +0 -1
- package/esm/domain/record/serialization/serializeAttributes.d.ts +0 -7
- package/esm/domain/record/serialization/serializeAttributes.js +0 -161
- package/esm/domain/record/serialization/serializeAttributes.js.map +0 -1
- package/esm/domain/record/serialization/serializeDocument.d.ts +0 -3
- package/esm/domain/record/serialization/serializeDocument.js +0 -8
- package/esm/domain/record/serialization/serializeDocument.js.map +0 -1
- package/esm/domain/record/serialization/serializeNode.d.ts +0 -7
- package/esm/domain/record/serialization/serializeNode.js +0 -149
- package/esm/domain/record/serialization/serializeNode.js.map +0 -1
- package/esm/domain/record/serialization/serializeStyleSheets.d.ts +0 -2
- package/esm/domain/record/serialization/serializeStyleSheets.js +0 -16
- package/esm/domain/record/serialization/serializeStyleSheets.js.map +0 -1
- package/esm/domain/record/shadowRootsController.d.ts +0 -11
- package/esm/domain/record/shadowRootsController.js +0 -41
- package/esm/domain/record/shadowRootsController.js.map +0 -1
- package/esm/domain/record/startFullSnapshots.d.ts +0 -9
- package/esm/domain/record/startFullSnapshots.js +0 -55
- package/esm/domain/record/startFullSnapshots.js.map +0 -1
- package/esm/domain/record/trackers/index.d.ts +0 -12
- package/esm/domain/record/trackers/index.js +0 -12
- package/esm/domain/record/trackers/index.js.map +0 -1
- package/esm/domain/record/trackers/trackFocus.d.ts +0 -5
- package/esm/domain/record/trackers/trackFocus.js +0 -12
- package/esm/domain/record/trackers/trackFocus.js.map +0 -1
- package/esm/domain/record/trackers/trackFrustration.d.ts +0 -7
- package/esm/domain/record/trackers/trackFrustration.js +0 -28
- package/esm/domain/record/trackers/trackFrustration.js.map +0 -1
- package/esm/domain/record/trackers/trackInput.d.ts +0 -4
- package/esm/domain/record/trackers/trackInput.js +0 -101
- package/esm/domain/record/trackers/trackInput.js.map +0 -1
- package/esm/domain/record/trackers/trackMediaInteraction.d.ts +0 -5
- package/esm/domain/record/trackers/trackMediaInteraction.js +0 -26
- package/esm/domain/record/trackers/trackMediaInteraction.js.map +0 -1
- package/esm/domain/record/trackers/trackMouseInteraction.d.ts +0 -5
- package/esm/domain/record/trackers/trackMouseInteraction.js +0 -56
- package/esm/domain/record/trackers/trackMouseInteraction.js.map +0 -1
- package/esm/domain/record/trackers/trackMove.d.ts +0 -9
- package/esm/domain/record/trackers/trackMove.js +0 -51
- package/esm/domain/record/trackers/trackMove.js.map +0 -1
- package/esm/domain/record/trackers/trackMutation.d.ts +0 -11
- package/esm/domain/record/trackers/trackMutation.js +0 -266
- package/esm/domain/record/trackers/trackMutation.js.map +0 -1
- package/esm/domain/record/trackers/trackScroll.d.ts +0 -5
- package/esm/domain/record/trackers/trackScroll.js +0 -45
- package/esm/domain/record/trackers/trackScroll.js.map +0 -1
- package/esm/domain/record/trackers/trackStyleSheet.d.ts +0 -6
- package/esm/domain/record/trackers/trackStyleSheet.js +0 -85
- package/esm/domain/record/trackers/trackStyleSheet.js.map +0 -1
- package/esm/domain/record/trackers/trackViewEnd.d.ts +0 -5
- package/esm/domain/record/trackers/trackViewEnd.js +0 -17
- package/esm/domain/record/trackers/trackViewEnd.js.map +0 -1
- package/esm/domain/record/trackers/trackViewportResize.d.ts +0 -6
- package/esm/domain/record/trackers/trackViewportResize.js +0 -42
- package/esm/domain/record/trackers/trackViewportResize.js.map +0 -1
- package/esm/domain/record/trackers/tracker.types.d.ts +0 -3
- package/esm/domain/record/trackers/tracker.types.js +0 -2
- package/esm/domain/record/trackers/tracker.types.js.map +0 -1
- package/esm/domain/record/viewports.d.ts +0 -20
- package/esm/domain/record/viewports.js +0 -55
- package/esm/domain/record/viewports.js.map +0 -1
- package/esm/domain/replayStats.d.ts +0 -8
- package/esm/domain/replayStats.js +0 -51
- package/esm/domain/replayStats.js.map +0 -1
- package/esm/domain/scriptLoadingError.d.ts +0 -6
- package/esm/domain/scriptLoadingError.js +0 -23
- package/esm/domain/scriptLoadingError.js.map +0 -1
- package/esm/domain/segmentCollection/buildReplayPayload.d.ts +0 -15
- package/esm/domain/segmentCollection/buildReplayPayload.js +0 -23
- package/esm/domain/segmentCollection/buildReplayPayload.js.map +0 -1
- package/esm/domain/segmentCollection/index.d.ts +0 -4
- package/esm/domain/segmentCollection/index.js +0 -4
- package/esm/domain/segmentCollection/index.js.map +0 -1
- package/esm/domain/segmentCollection/segment.d.ts +0 -16
- package/esm/domain/segmentCollection/segment.js +0 -46
- package/esm/domain/segmentCollection/segment.js.map +0 -1
- package/esm/domain/segmentCollection/segmentCollection.d.ts +0 -31
- package/esm/domain/segmentCollection/segmentCollection.js +0 -106
- package/esm/domain/segmentCollection/segmentCollection.js.map +0 -1
- package/esm/domain/segmentCollection/startSegmentTelemetry.d.ts +0 -6
- package/esm/domain/segmentCollection/startSegmentTelemetry.js +0 -44
- package/esm/domain/segmentCollection/startSegmentTelemetry.js.map +0 -1
- package/esm/domain/startRecordBridge.d.ts +0 -5
- package/esm/domain/startRecordBridge.js +0 -14
- package/esm/domain/startRecordBridge.js.map +0 -1
- package/esm/domain/startRecorderInitTelemetry.d.ts +0 -15
- package/esm/domain/startRecorderInitTelemetry.js +0 -52
- package/esm/domain/startRecorderInitTelemetry.js.map +0 -1
- package/esm/entries/internal.d.ts +0 -11
- package/esm/entries/internal.js +0 -4
- package/esm/entries/internal.js.map +0 -1
- package/esm/entries/internalSynthetics.d.ts +0 -2
- package/esm/entries/internalSynthetics.js +0 -23
- package/esm/entries/internalSynthetics.js.map +0 -1
- package/esm/entries/main.d.ts +0 -23
- package/esm/entries/main.js +0 -31
- package/esm/entries/main.js.map +0 -1
- package/esm/types/index.d.ts +0 -2
- package/esm/types/index.js +0 -2
- package/esm/types/index.js.map +0 -1
- package/esm/types/sessionReplay.d.ts +0 -703
- package/esm/types/sessionReplay.js +0 -6
- package/esm/types/sessionReplay.js.map +0 -1
- package/esm/types/sessionReplayConstants.d.ts +0 -49
- package/esm/types/sessionReplayConstants.js +0 -46
- package/esm/types/sessionReplayConstants.js.map +0 -1
- package/src/boot/isBrowserSupported.ts +0 -14
- package/src/boot/startRecording.ts +0 -70
- package/src/domain/profiling/transport/assembly.ts +0 -78
- package/src/domain/profiling/transport/buildProfileEventAttributes.ts +0 -66
- package/src/domain/profiling/types/index.ts +0 -2
- package/src/domain/profiling/types/profilerApi.types.ts +0 -87
- package/src/domain/profiling/utils/getNumberOfSamples.ts +0 -16
- package/src/domain/record/eventIds.ts +0 -17
- package/src/domain/record/nodeIds.ts +0 -46
- package/src/domain/record/serialization/serializeDocument.ts +0 -13
- package/src/domain/record/serialization/serializeStyleSheets.ts +0 -18
- package/src/domain/record/trackers/trackFrustration.ts +0 -41
|
@@ -0,0 +1,287 @@
|
|
|
1
|
+
import { ChangeType, StringRole } from '../../../types'
|
|
2
|
+
import type {
|
|
3
|
+
AddDocTypeNodeChange,
|
|
4
|
+
AddRoleAnnotatedStringsChange,
|
|
5
|
+
AddElementNodeChange,
|
|
6
|
+
AddNodeChange,
|
|
7
|
+
AddStyleSheetChange,
|
|
8
|
+
AddTextNodeChange,
|
|
9
|
+
AttributeAssignmentOrDeletion,
|
|
10
|
+
AttributeChange,
|
|
11
|
+
BrowserChangeRecord,
|
|
12
|
+
BrowserFullSnapshotChangeRecord,
|
|
13
|
+
Change,
|
|
14
|
+
InputValueChange,
|
|
15
|
+
StyleSheetRules,
|
|
16
|
+
TextChange,
|
|
17
|
+
ImageContentChange,
|
|
18
|
+
} from '../../../types'
|
|
19
|
+
import type { StringTable } from './stringTable'
|
|
20
|
+
import { createStringTable } from './stringTable'
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* ChangeDecoder converts a BrowserChangeRecord, or a stream of BrowserChangeRecords, into
|
|
24
|
+
* a more human-readable form by:
|
|
25
|
+
* - Removing the changes that manage the string table.
|
|
26
|
+
* - Replacing string table references in all other changes with their literal values.
|
|
27
|
+
*
|
|
28
|
+
* This makes it easier to visualize the contents of BrowserChangeRecords or to write test
|
|
29
|
+
* expectations against the record's content.
|
|
30
|
+
*/
|
|
31
|
+
export interface ChangeDecoder {
|
|
32
|
+
decode(record: BrowserChangeRecord): BrowserChangeRecord
|
|
33
|
+
decode(record: BrowserFullSnapshotChangeRecord): BrowserFullSnapshotChangeRecord
|
|
34
|
+
decode(
|
|
35
|
+
record: BrowserChangeRecord | BrowserFullSnapshotChangeRecord
|
|
36
|
+
): BrowserChangeRecord | BrowserFullSnapshotChangeRecord
|
|
37
|
+
|
|
38
|
+
stringTable: StringTable
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export interface ChangeDecoderOptions {
|
|
42
|
+
/**
|
|
43
|
+
* If true, accept the string representations that the ChangeEncoder does not produce:
|
|
44
|
+
* - AddStringChange (replaced by AddRoleAnnotatedStringsChange)
|
|
45
|
+
* - StringLiteral (only string table references are generated)
|
|
46
|
+
* - RoleAnnotatedStringLiteral (only string table references are generated)
|
|
47
|
+
*
|
|
48
|
+
* When this option is false (the default), ChangeDecoder will throw when it encounters
|
|
49
|
+
* these obsolete string representations.
|
|
50
|
+
*
|
|
51
|
+
* In the future, we expect that certain KubeSense features will be unavailable for
|
|
52
|
+
* recordings which include obsolete string representations, so it's important to be
|
|
53
|
+
* sure that we don't accidentally generate them.
|
|
54
|
+
*/
|
|
55
|
+
allowObsoleteStringRepresentations?: boolean
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* If true, decode string references to RoleAnnotatedStringLiteral objects. This allows
|
|
59
|
+
* you to inspect the recorded role annotations. Defaults to false.
|
|
60
|
+
*/
|
|
61
|
+
keepRoles?: boolean
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
export function createChangeDecoder({
|
|
65
|
+
allowObsoleteStringRepresentations = false,
|
|
66
|
+
keepRoles = false,
|
|
67
|
+
}: ChangeDecoderOptions = {}): ChangeDecoder {
|
|
68
|
+
const self = {
|
|
69
|
+
decode(
|
|
70
|
+
record: BrowserChangeRecord | BrowserFullSnapshotChangeRecord
|
|
71
|
+
): BrowserChangeRecord | BrowserFullSnapshotChangeRecord {
|
|
72
|
+
return decodeChangeRecord(record, self.stringTable, allowObsoleteStringRepresentations)
|
|
73
|
+
},
|
|
74
|
+
|
|
75
|
+
stringTable: createStringTable(allowObsoleteStringRepresentations, keepRoles),
|
|
76
|
+
} as ChangeDecoder
|
|
77
|
+
|
|
78
|
+
return self
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
function decodeChangeRecord(
|
|
82
|
+
record: BrowserChangeRecord | BrowserFullSnapshotChangeRecord,
|
|
83
|
+
stringTable: StringTable,
|
|
84
|
+
allowObsoleteStringRepresentations: boolean
|
|
85
|
+
): BrowserChangeRecord | BrowserFullSnapshotChangeRecord {
|
|
86
|
+
const decodedData: Change[] = []
|
|
87
|
+
|
|
88
|
+
for (const change of record.data) {
|
|
89
|
+
switch (change[0]) {
|
|
90
|
+
case ChangeType.AddString:
|
|
91
|
+
if (!allowObsoleteStringRepresentations) {
|
|
92
|
+
throw new Error('Obsolete AddString change: string table entries are defined by role now')
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
// Update the string table.
|
|
96
|
+
for (let i = 1; i < change.length; i++) {
|
|
97
|
+
stringTable.add(change[i] as string, StringRole.Default)
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
// Deliberately don't include this change in the decoded record.
|
|
101
|
+
break
|
|
102
|
+
|
|
103
|
+
case ChangeType.AddRoleAnnotatedStrings:
|
|
104
|
+
// Update the string table, remembering the role each run was defined in so that the
|
|
105
|
+
// decoded record can carry it when the decoder was asked to keep roles.
|
|
106
|
+
for (let i = 1; i < change.length; i++) {
|
|
107
|
+
const [role, ...newStrings] = change[i] as AddRoleAnnotatedStringsChange
|
|
108
|
+
for (const newString of newStrings) {
|
|
109
|
+
stringTable.add(newString, role)
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
// Deliberately don't include this change in the decoded record.
|
|
114
|
+
break
|
|
115
|
+
|
|
116
|
+
case ChangeType.ClearStrings:
|
|
117
|
+
stringTable.clear()
|
|
118
|
+
|
|
119
|
+
// Deliberately don't include this change in the decoded record.
|
|
120
|
+
break
|
|
121
|
+
|
|
122
|
+
case ChangeType.AddNode: {
|
|
123
|
+
const decoded: [typeof ChangeType.AddNode, ...AddNodeChange[]] = [ChangeType.AddNode]
|
|
124
|
+
for (let i = 1; i < change.length; i++) {
|
|
125
|
+
decoded.push(decodeAddNodeChange(change[i] as AddNodeChange, stringTable))
|
|
126
|
+
}
|
|
127
|
+
decodedData.push(decoded)
|
|
128
|
+
break
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
case ChangeType.RemoveNode:
|
|
132
|
+
decodedData.push(change)
|
|
133
|
+
break
|
|
134
|
+
|
|
135
|
+
case ChangeType.Attribute: {
|
|
136
|
+
const decoded: [typeof ChangeType.Attribute, ...AttributeChange[]] = [ChangeType.Attribute]
|
|
137
|
+
for (let i = 1; i < change.length; i++) {
|
|
138
|
+
decoded.push(decodeAttributeChange(change[i] as AttributeChange, stringTable))
|
|
139
|
+
}
|
|
140
|
+
decodedData.push(decoded)
|
|
141
|
+
break
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
case ChangeType.Text: {
|
|
145
|
+
const decoded: [typeof ChangeType.Text, ...TextChange[]] = [ChangeType.Text]
|
|
146
|
+
for (let i = 1; i < change.length; i++) {
|
|
147
|
+
decoded.push(decodeTextChange(change[i] as TextChange, stringTable))
|
|
148
|
+
}
|
|
149
|
+
decodedData.push(decoded)
|
|
150
|
+
break
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
case ChangeType.InputValue: {
|
|
154
|
+
const decoded: [typeof ChangeType.InputValue, ...InputValueChange[]] = [ChangeType.InputValue]
|
|
155
|
+
for (let i = 1; i < change.length; i++) {
|
|
156
|
+
decoded.push(decodeInputValueChange(change[i] as InputValueChange, stringTable))
|
|
157
|
+
}
|
|
158
|
+
decodedData.push(decoded)
|
|
159
|
+
break
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
case ChangeType.Size:
|
|
163
|
+
case ChangeType.ScrollPosition:
|
|
164
|
+
case ChangeType.AttachedStyleSheets:
|
|
165
|
+
case ChangeType.MediaPlaybackState:
|
|
166
|
+
case ChangeType.VisualViewport:
|
|
167
|
+
case ChangeType.InputSelection:
|
|
168
|
+
decodedData.push(change)
|
|
169
|
+
break
|
|
170
|
+
|
|
171
|
+
case ChangeType.AddStyleSheet: {
|
|
172
|
+
const decoded: [typeof ChangeType.AddStyleSheet, ...AddStyleSheetChange[]] = [ChangeType.AddStyleSheet]
|
|
173
|
+
for (let i = 1; i < change.length; i++) {
|
|
174
|
+
decoded.push(decodeAddStyleSheetChange(change[i] as AddStyleSheetChange, stringTable))
|
|
175
|
+
}
|
|
176
|
+
decodedData.push(decoded)
|
|
177
|
+
break
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
case ChangeType.ImageContent: {
|
|
181
|
+
const decoded: [typeof ChangeType.ImageContent, ...ImageContentChange[]] = [ChangeType.ImageContent]
|
|
182
|
+
for (let i = 1; i < change.length; i++) {
|
|
183
|
+
const imageContentChange = change[i] as ImageContentChange
|
|
184
|
+
decoded.push([imageContentChange[0], stringTable.decodeAnnotated(imageContentChange[1])])
|
|
185
|
+
}
|
|
186
|
+
decodedData.push(decoded)
|
|
187
|
+
break
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
default:
|
|
191
|
+
change satisfies never
|
|
192
|
+
throw new Error(`Unsupported ChangeType: ${change[0] as any}`)
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
return { ...record, data: decodedData }
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
function decodeAddNodeChange(change: AddNodeChange, stringTable: StringTable): AddNodeChange {
|
|
200
|
+
const insertionPoint = change[0]
|
|
201
|
+
|
|
202
|
+
// Which kind of node this is has to be decided from the node name on its own, but the name that
|
|
203
|
+
// goes into the decoded record is the annotated one.
|
|
204
|
+
const nodeName = stringTable.decode(change[1])
|
|
205
|
+
const decodedNodeName = stringTable.decodeAnnotated(change[1])
|
|
206
|
+
|
|
207
|
+
switch (nodeName) {
|
|
208
|
+
case '#cdata-section':
|
|
209
|
+
case '#document':
|
|
210
|
+
case '#document-fragment':
|
|
211
|
+
case '#shadow-root':
|
|
212
|
+
return [insertionPoint, decodedNodeName]
|
|
213
|
+
|
|
214
|
+
case '#doctype': {
|
|
215
|
+
const [, , name, publicId, systemId] = change as AddDocTypeNodeChange
|
|
216
|
+
// The schema says an annotated '#doctype' carries the node name role, but the role here is
|
|
217
|
+
// whatever the record gave it, which is exactly what a reader wants to see. The cast keeps a
|
|
218
|
+
// record that got the role wrong legible, rather than hiding it.
|
|
219
|
+
return [
|
|
220
|
+
insertionPoint,
|
|
221
|
+
decodedNodeName,
|
|
222
|
+
stringTable.decodeAnnotated(name),
|
|
223
|
+
stringTable.decodeAnnotated(publicId),
|
|
224
|
+
stringTable.decodeAnnotated(systemId),
|
|
225
|
+
] as AddDocTypeNodeChange
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
case '#text': {
|
|
229
|
+
const [, , textContent] = change as AddTextNodeChange
|
|
230
|
+
// Cast for the same reason as '#doctype' above.
|
|
231
|
+
return [insertionPoint, decodedNodeName, stringTable.decodeAnnotated(textContent)] as AddTextNodeChange
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
default: {
|
|
235
|
+
const decodedChange: AddElementNodeChange = [insertionPoint, decodedNodeName]
|
|
236
|
+
|
|
237
|
+
const [, , ...attrs] = change as AddElementNodeChange
|
|
238
|
+
for (const [name, value] of attrs) {
|
|
239
|
+
decodedChange.push([stringTable.decodeAnnotated(name), stringTable.decodeAnnotated(value)])
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
return decodedChange
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
function decodeAttributeChange(change: AttributeChange, stringTable: StringTable): AttributeChange {
|
|
248
|
+
const [nodeId, ...mutations] = change
|
|
249
|
+
|
|
250
|
+
const decodedMutations: AttributeAssignmentOrDeletion[] = mutations.map((mutation) => {
|
|
251
|
+
if (mutation.length === 1) {
|
|
252
|
+
return [stringTable.decodeAnnotated(mutation[0])]
|
|
253
|
+
}
|
|
254
|
+
return [stringTable.decodeAnnotated(mutation[0]), stringTable.decodeAnnotated(mutation[1])]
|
|
255
|
+
})
|
|
256
|
+
|
|
257
|
+
const decodedChange: AttributeChange = [nodeId]
|
|
258
|
+
decodedChange.push(...decodedMutations)
|
|
259
|
+
return decodedChange
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
function decodeTextChange(change: TextChange, stringTable: StringTable): TextChange {
|
|
263
|
+
return [change[0], stringTable.decodeAnnotated(change[1])]
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
function decodeInputValueChange(change: InputValueChange, stringTable: StringTable): InputValueChange {
|
|
267
|
+
return [change[0], stringTable.decodeAnnotated(change[1])]
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
function decodeAddStyleSheetChange(change: AddStyleSheetChange, stringTable: StringTable): AddStyleSheetChange {
|
|
271
|
+
const rules = change[0]
|
|
272
|
+
const decodedRules: StyleSheetRules = Array.isArray(rules)
|
|
273
|
+
? rules.map((rule) => stringTable.decodeAnnotated(rule))
|
|
274
|
+
: stringTable.decodeAnnotated(rules)
|
|
275
|
+
|
|
276
|
+
if (change.length === 1) {
|
|
277
|
+
return [decodedRules]
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
const decodedMediaList = change[1].map((item) => stringTable.decodeAnnotated(item))
|
|
281
|
+
|
|
282
|
+
if (change.length === 2) {
|
|
283
|
+
return [decodedRules, decodedMediaList]
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
return [decodedRules, decodedMediaList, change[2]]
|
|
287
|
+
}
|
|
@@ -0,0 +1,327 @@
|
|
|
1
|
+
import type { AddRoleAnnotatedStringsChange, Change, RoleAnnotatedStringLiteral } from '../../../types'
|
|
2
|
+
import { ChangeType, StringRole } from '../../../types'
|
|
3
|
+
import { createString } from './roles'
|
|
4
|
+
import { StringIdConstants } from './stringIds'
|
|
5
|
+
import type { StringId, StringIds } from './stringIds'
|
|
6
|
+
|
|
7
|
+
type ChangeData<T extends ChangeType> =
|
|
8
|
+
Extract<Change, [T, ...unknown[]]> extends [T, ...infer Rest] ? Rest[number] : never
|
|
9
|
+
|
|
10
|
+
type StringTableChangeTypes =
|
|
11
|
+
typeof ChangeType.AddString | typeof ChangeType.AddRoleAnnotatedStrings | typeof ChangeType.ClearStrings
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* The change operations a caller can add. Callers are not allowed to generate change
|
|
15
|
+
* operations that manipulate the string table; that's the exclusive responsibility of the
|
|
16
|
+
* encoder.
|
|
17
|
+
*/
|
|
18
|
+
type EncodableChangeType = Exclude<ChangeType, StringTableChangeTypes>
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* ChangeEncoder handles the low-level work of building compact, optimized sequences of
|
|
22
|
+
* Changes. In particular, it:
|
|
23
|
+
* - Converts literal strings to string table references, to eliminate the duplication
|
|
24
|
+
* of transferring the same strings repeatedly.
|
|
25
|
+
* - Groups the strings it defines by role to minimize the cost of transmitting role information.
|
|
26
|
+
* - Sorts the busiest string groups first, so that the strings which are referenced most
|
|
27
|
+
* frequently tend to get ids which have fewer digits and are thus cheaper to reference.
|
|
28
|
+
* - Groups changes by type, instead of transmitting them strictly in order, so that we
|
|
29
|
+
* can avoid transmitting a separate Change data structure with an independent type tag
|
|
30
|
+
* for each small mutation. (It's safe to do this for changes that occur within the same
|
|
31
|
+
* SerializationTransaction since they logically happen at the same time.)
|
|
32
|
+
* - Clears the string table when it reaches its soft maximum size, so that there is always
|
|
33
|
+
* room for the strings the encoder needs to define. Strings are therefore never transmitted
|
|
34
|
+
* outside of the string table.
|
|
35
|
+
*/
|
|
36
|
+
export interface ChangeEncoder {
|
|
37
|
+
/**
|
|
38
|
+
* Encode a Change of the given type and add it to the internal buffer.
|
|
39
|
+
*
|
|
40
|
+
* The encoder takes ownership of `data`; the caller must not modify it after adding it.
|
|
41
|
+
*/
|
|
42
|
+
add<T extends EncodableChangeType>(type: T, data: ChangeData<T>): void
|
|
43
|
+
|
|
44
|
+
/** Flush the internal buffer, returning all Changes added since the last flush(). */
|
|
45
|
+
flush(): Change[]
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
export function createChangeEncoder(stringIds: StringIds): ChangeEncoder {
|
|
49
|
+
// Changes are encoded in runs. A run ends when the string table reaches its maximum
|
|
50
|
+
// size and is cleared; the changes in each run thus always share a single string id
|
|
51
|
+
// namespace. The currently-active run ends when the caller flushes the encoder.
|
|
52
|
+
|
|
53
|
+
// The changes of the runs that have already ended, waiting for the caller to flush them.
|
|
54
|
+
let flushedChanges: Change[] = []
|
|
55
|
+
|
|
56
|
+
// The run that the changes being added now belong to.
|
|
57
|
+
let run = createRunChangeEncoder(stringIds)
|
|
58
|
+
|
|
59
|
+
// Ends the current run, appending the changes it encoded to those of the runs before it,
|
|
60
|
+
// and starts a new one.
|
|
61
|
+
const endRun = (): void => {
|
|
62
|
+
run.flushInto(flushedChanges)
|
|
63
|
+
run = createRunChangeEncoder(stringIds)
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
// Clears the string table. This has the effect of creating a new string id namespace, so
|
|
67
|
+
// we also need to end the current run to ensure that the changes we've generated so far
|
|
68
|
+
// play back in the context of the previous namespace.
|
|
69
|
+
const clearStringTable = (): void => {
|
|
70
|
+
endRun()
|
|
71
|
+
flushedChanges.push([ChangeType.ClearStrings])
|
|
72
|
+
stringIds.clear()
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
const add = <T extends EncodableChangeType>(type: T, data: ChangeData<T>): void => {
|
|
76
|
+
run.add(type, data)
|
|
77
|
+
|
|
78
|
+
// If this change pushed the string table past its soft maximum size, we need to clear
|
|
79
|
+
// the string table.
|
|
80
|
+
if (stringIds.size + run.pendingStringCount >= Number(StringIdConstants.SOFT_MAX_SIZE)) {
|
|
81
|
+
clearStringTable()
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
const flush = (): Change[] => {
|
|
86
|
+
endRun()
|
|
87
|
+
|
|
88
|
+
const changes = flushedChanges
|
|
89
|
+
flushedChanges = []
|
|
90
|
+
|
|
91
|
+
return changes
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
return { add, flush }
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
type StringTableUpdates = [typeof ChangeType.AddRoleAnnotatedStrings, ...AddRoleAnnotatedStringsChange[]]
|
|
98
|
+
|
|
99
|
+
/** A string which is waiting for a string table id. */
|
|
100
|
+
interface PendingString {
|
|
101
|
+
/** The string itself, along with the role it belongs to. */
|
|
102
|
+
literal: RoleAnnotatedStringLiteral
|
|
103
|
+
/** The id this string was given; undefined until string table ids have been assigned. */
|
|
104
|
+
id: StringId | undefined
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/** A group of strings with the same role which are waiting for string table ids. */
|
|
108
|
+
interface PendingStringGroup {
|
|
109
|
+
/** The role all of these strings belong to. */
|
|
110
|
+
role: StringRole
|
|
111
|
+
/** The strings, keyed by value, in the order they were first encountered. */
|
|
112
|
+
strings: Map<string, PendingString>
|
|
113
|
+
/** How many times the changes being encoded refer to a string in this run. */
|
|
114
|
+
references: number
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
* RunChangeEncoder encodes the changes of a single run for ChangeEncoder. Changes within
|
|
119
|
+
* a run are grouped together to optimize their representation, and they share a common
|
|
120
|
+
* string id namespace.
|
|
121
|
+
*/
|
|
122
|
+
interface RunChangeEncoder {
|
|
123
|
+
/**
|
|
124
|
+
* Encode a Change of the given type and add it to the run.
|
|
125
|
+
*
|
|
126
|
+
* The run takes ownership of `data`; the caller must not modify it after adding it.
|
|
127
|
+
*/
|
|
128
|
+
add<T extends EncodableChangeType>(type: T, data: ChangeData<T>): void
|
|
129
|
+
|
|
130
|
+
/**
|
|
131
|
+
* End the run, appending the Changes it encoded to the given output array. The run must
|
|
132
|
+
* not be used again afterwards.
|
|
133
|
+
*/
|
|
134
|
+
flushInto(output: Change[]): void
|
|
135
|
+
|
|
136
|
+
/** The number of strings the run will add to the string table when it ends. */
|
|
137
|
+
get pendingStringCount(): number
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
function createRunChangeEncoder(stringIds: StringIds): RunChangeEncoder {
|
|
141
|
+
// The changes added during this run, grouped by type.
|
|
142
|
+
const pendingChanges: Partial<Record<ChangeType, unknown[]>> = {}
|
|
143
|
+
|
|
144
|
+
// Every string in the changes added during this run which isn't in the string table yet,
|
|
145
|
+
// grouped by role.
|
|
146
|
+
const pendingGroups = new Map<StringRole, PendingStringGroup>()
|
|
147
|
+
|
|
148
|
+
// The changes added during this run that hold a string with no id yet, and so need a
|
|
149
|
+
// second pass once the run has handed out the ids. Tracking them minimizes the amount
|
|
150
|
+
// of work the second pass has to do; many changes, especially after the full snapshot,
|
|
151
|
+
// don't introduce any new strings and hence don't require a second pass.
|
|
152
|
+
const unresolvedChanges: unknown[][] = []
|
|
153
|
+
|
|
154
|
+
// How many strings pendingGroups holds.
|
|
155
|
+
let pendingStringCount = 0
|
|
156
|
+
|
|
157
|
+
// Set while a change is being encoded if any of its strings has no id yet.
|
|
158
|
+
let changeHasPendingStrings = false
|
|
159
|
+
|
|
160
|
+
// The reference that stands in for a string in the change data: its id, when the string
|
|
161
|
+
// is already in the string table, and a PendingString when it isn't. The ids depend on
|
|
162
|
+
// how the strings are grouped and on how often each of them is referenced, so we can't
|
|
163
|
+
// greedily assign ids for new strings as soon as we encounter them; we need to wait for
|
|
164
|
+
// the run to end.
|
|
165
|
+
const referenceString = (literal: RoleAnnotatedStringLiteral): StringId | PendingString => {
|
|
166
|
+
const id = stringIds.get(literal)
|
|
167
|
+
if (id !== undefined) {
|
|
168
|
+
return id
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
changeHasPendingStrings = true
|
|
172
|
+
|
|
173
|
+
let group = pendingGroups.get(literal.role)
|
|
174
|
+
if (!group) {
|
|
175
|
+
group = { role: literal.role, strings: new Map(), references: 0 }
|
|
176
|
+
pendingGroups.set(literal.role, group)
|
|
177
|
+
}
|
|
178
|
+
group.references++
|
|
179
|
+
|
|
180
|
+
const existingPendingString = group.strings.get(literal.string)
|
|
181
|
+
if (existingPendingString) {
|
|
182
|
+
return existingPendingString
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
const pendingString: PendingString = { literal, id: undefined }
|
|
186
|
+
group.strings.set(literal.string, pendingString)
|
|
187
|
+
pendingStringCount++
|
|
188
|
+
return pendingString
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
// A helper that searches for strings in arbitrarily-nested arrays and replaces each one it
|
|
192
|
+
// finds with a reference to it.
|
|
193
|
+
const encodeStrings = (array: any[]): void => {
|
|
194
|
+
for (let index = 0, length = array.length; index < length; index++) {
|
|
195
|
+
const item = array[index]
|
|
196
|
+
if (typeof item === 'string') {
|
|
197
|
+
array[index] = referenceString(createString(StringRole.Default, item))
|
|
198
|
+
} else if (Array.isArray(item)) {
|
|
199
|
+
encodeStrings(item)
|
|
200
|
+
} else if (isRoleAnnotatedStringLiteral(item)) {
|
|
201
|
+
array[index] = referenceString(item)
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
// Inserts the strings that aren't in the string table yet, positionally assigning them
|
|
207
|
+
// ids, and returns the resulting serialized string table update.
|
|
208
|
+
const generateStringTableUpdates = (): StringTableUpdates | undefined => {
|
|
209
|
+
if (pendingGroups.size === 0) {
|
|
210
|
+
return undefined
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
// AddRoleAnnotatedStrings operations logically append to the string table, and the id
|
|
214
|
+
// of each string is just its index in the table. Because a string table reference
|
|
215
|
+
// costs one byte per decimal digit of the target string's index, we sort the groups
|
|
216
|
+
// so that more frequently referenced groups appear first; this tends to reduce the
|
|
217
|
+
// cost of string table references overall in the recording.
|
|
218
|
+
const stringTableUpdates: StringTableUpdates = [ChangeType.AddRoleAnnotatedStrings]
|
|
219
|
+
for (const group of Array.from(pendingGroups.values()).sort(byDescendingReferences)) {
|
|
220
|
+
const update: AddRoleAnnotatedStringsChange = [group.role]
|
|
221
|
+
for (const pendingString of group.strings.values()) {
|
|
222
|
+
pendingString.id = stringIds.getOrInsert(pendingString.literal)
|
|
223
|
+
update.push(pendingString.literal.string)
|
|
224
|
+
}
|
|
225
|
+
stringTableUpdates.push(update)
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
return stringTableUpdates
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
const add = <T extends EncodableChangeType>(type: T, data: ChangeData<T>): void => {
|
|
232
|
+
if (!(type in pendingChanges)) {
|
|
233
|
+
pendingChanges[type] = [type]
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
// Not every kind of change data is an array; a RemoveNode change is a bare node id.
|
|
237
|
+
if (Array.isArray(data)) {
|
|
238
|
+
changeHasPendingStrings = false
|
|
239
|
+
encodeStrings(data)
|
|
240
|
+
if (changeHasPendingStrings) {
|
|
241
|
+
unresolvedChanges.push(data)
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
pendingChanges[type]!.push(data)
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
const flushInto = (output: Change[]): void => {
|
|
249
|
+
// String table updates have to come before any change that refers to them.
|
|
250
|
+
const stringTableUpdates = generateStringTableUpdates()
|
|
251
|
+
if (stringTableUpdates) {
|
|
252
|
+
output.push(stringTableUpdates)
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
// Every string has an id assigned now, so we can resolve the pending strings.
|
|
256
|
+
for (const change of unresolvedChanges) {
|
|
257
|
+
resolvePendingStrings(change)
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
// Place all changes into a single array. Because the player always just plays back
|
|
261
|
+
// the changes in order, the ordering of the changes matters; if a dependency can
|
|
262
|
+
// exist between two kinds of change, then the dependent change must come after the
|
|
263
|
+
// change it depends on. This list defines an ordering that ensures that these
|
|
264
|
+
// dependencies are always satisfied.
|
|
265
|
+
//
|
|
266
|
+
// Only the changes of this run need to be ordered this way. Callers add changes in an
|
|
267
|
+
// order that already satisfies their dependencies, so a change can only depend on one
|
|
268
|
+
// that was added before it, which is one in this run or in a run that already ended;
|
|
269
|
+
// it's grouping the changes by type that reorders them, and that happens within a run.
|
|
270
|
+
;[
|
|
271
|
+
ChangeType.AddNode,
|
|
272
|
+
ChangeType.RemoveNode,
|
|
273
|
+
ChangeType.Attribute,
|
|
274
|
+
ChangeType.Text,
|
|
275
|
+
ChangeType.InputValue,
|
|
276
|
+
ChangeType.InputSelection,
|
|
277
|
+
ChangeType.Size,
|
|
278
|
+
ChangeType.ScrollPosition,
|
|
279
|
+
ChangeType.AddStyleSheet,
|
|
280
|
+
ChangeType.AttachedStyleSheets,
|
|
281
|
+
ChangeType.MediaPlaybackState,
|
|
282
|
+
ChangeType.VisualViewport,
|
|
283
|
+
ChangeType.ImageContent,
|
|
284
|
+
].forEach((changeType: ChangeType): void => {
|
|
285
|
+
const change = pendingChanges[changeType]
|
|
286
|
+
if (change) {
|
|
287
|
+
output.push(change as Change)
|
|
288
|
+
}
|
|
289
|
+
})
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
return {
|
|
293
|
+
add,
|
|
294
|
+
flushInto,
|
|
295
|
+
get pendingStringCount(): number {
|
|
296
|
+
return pendingStringCount
|
|
297
|
+
},
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
/**
|
|
302
|
+
* Replaces every string in the given change with the id it was assigned. A run gives every
|
|
303
|
+
* pending string an id before it resolves anything, so by this point they all have one.
|
|
304
|
+
*/
|
|
305
|
+
function resolvePendingStrings(array: any[]): void {
|
|
306
|
+
for (let index = 0, length = array.length; index < length; index++) {
|
|
307
|
+
const item = array[index]
|
|
308
|
+
if (Array.isArray(item)) {
|
|
309
|
+
resolvePendingStrings(item)
|
|
310
|
+
} else if (isPendingString(item)) {
|
|
311
|
+
array[index] = item.id
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
function byDescendingReferences(a: PendingStringGroup, b: PendingStringGroup): number {
|
|
317
|
+
return b.references - a.references
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
function isRoleAnnotatedStringLiteral(item: unknown): item is RoleAnnotatedStringLiteral {
|
|
321
|
+
return typeof item === 'object' && item !== null && 'string' in item
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
/** Every object left in change data once encodeStrings() has been over it is one of these. */
|
|
325
|
+
function isPendingString(item: unknown): item is PendingString {
|
|
326
|
+
return typeof item === 'object' && item !== null && 'literal' in item
|
|
327
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export type { ChangeDecoder, ChangeDecoderOptions } from './changeDecoder'
|
|
2
|
+
export { createChangeDecoder } from './changeDecoder'
|
|
3
|
+
export type { ChangeEncoder } from './changeEncoder'
|
|
4
|
+
export { createChangeEncoder } from './changeEncoder'
|
|
5
|
+
export type { EventId, EventIds, NodeId, NodeIds, StyleSheetId, StyleSheetIds } from './itemIds'
|
|
6
|
+
export { createEventIds, createNodeIds, createStyleSheetIds } from './itemIds'
|
|
7
|
+
export type {
|
|
8
|
+
RoleAnnotatedAddNodeName,
|
|
9
|
+
RoleAnnotatedAddNodeParams,
|
|
10
|
+
RoleAnnotatedAttributeAssignment,
|
|
11
|
+
RoleAnnotatedAttributeAssignmentOrDeletion,
|
|
12
|
+
RoleAnnotatedAttributeChange,
|
|
13
|
+
RoleAnnotatedStringLiteralValue,
|
|
14
|
+
RoleAnnotatedStyleSheetMediaList,
|
|
15
|
+
RoleAnnotatedStyleSheetRules,
|
|
16
|
+
} from './roles'
|
|
17
|
+
export { createAttributeAssignment, createAttributeAssignmentOrDeletion, createString } from './roles'
|
|
18
|
+
export type { StringId, StringIds } from './stringIds'
|
|
19
|
+
export { createStringIds } from './stringIds'
|