@cloudcare/browser-rum-slim 3.3.3
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 +21 -0
- package/README.md +15 -0
- package/bundle/dataflux-rum-slim.js +1 -0
- package/cjs/boot/buildEnv.js +11 -0
- package/cjs/boot/buildEnv.js.map +1 -0
- package/cjs/boot/perStartRum.js +227 -0
- package/cjs/boot/perStartRum.js.map +1 -0
- package/cjs/boot/rum.js +180 -0
- package/cjs/boot/rum.js.map +1 -0
- package/cjs/boot/rum.slim.entry.js +13 -0
- package/cjs/boot/rum.slim.entry.js.map +1 -0
- package/cjs/boot/rumEntryFactory.js +15 -0
- package/cjs/boot/rumEntryFactory.js.map +1 -0
- package/cjs/boot/rumPublicApi.js +285 -0
- package/cjs/boot/rumPublicApi.js.map +1 -0
- package/cjs/boot/rumRecorderApiStub.js +19 -0
- package/cjs/boot/rumRecorderApiStub.js.map +1 -0
- package/cjs/boot/rumSlimConfiguration.js +16 -0
- package/cjs/boot/rumSlimConfiguration.js.map +1 -0
- package/cjs/constants.js +41 -0
- package/cjs/constants.js.map +1 -0
- package/cjs/domain/assembly.js +172 -0
- package/cjs/domain/assembly.js.map +1 -0
- package/cjs/domain/configuration.js +272 -0
- package/cjs/domain/configuration.js.map +1 -0
- package/cjs/domain/contexts/commonContext.js +14 -0
- package/cjs/domain/contexts/commonContext.js.map +1 -0
- package/cjs/domain/contexts/displayContext.js +22 -0
- package/cjs/domain/contexts/displayContext.js.map +1 -0
- package/cjs/domain/contexts/foregroundContexts.js +111 -0
- package/cjs/domain/contexts/foregroundContexts.js.map +1 -0
- package/cjs/domain/contexts/internalContext.js +47 -0
- package/cjs/domain/contexts/internalContext.js.map +1 -0
- package/cjs/domain/contexts/pageStateHistory.js +111 -0
- package/cjs/domain/contexts/pageStateHistory.js.map +1 -0
- package/cjs/domain/contexts/urlContexts.js +73 -0
- package/cjs/domain/contexts/urlContexts.js.map +1 -0
- package/cjs/domain/contexts/viewContexts.js +51 -0
- package/cjs/domain/contexts/viewContexts.js.map +1 -0
- package/cjs/domain/domMutationObservable.js +69 -0
- package/cjs/domain/domMutationObservable.js.map +1 -0
- package/cjs/domain/encoderStreamId.js +11 -0
- package/cjs/domain/encoderStreamId.js.map +1 -0
- package/cjs/domain/firstInputPolyfill.js +83 -0
- package/cjs/domain/firstInputPolyfill.js.map +1 -0
- package/cjs/domain/initViewportObservable.js +44 -0
- package/cjs/domain/initViewportObservable.js.map +1 -0
- package/cjs/domain/locationChangeObservable.js +57 -0
- package/cjs/domain/locationChangeObservable.js.map +1 -0
- package/cjs/domain/performanceObservable.js +124 -0
- package/cjs/domain/performanceObservable.js.map +1 -0
- package/cjs/domain/performanceUtils.js +47 -0
- package/cjs/domain/performanceUtils.js.map +1 -0
- package/cjs/domain/requestCollection.js +127 -0
- package/cjs/domain/requestCollection.js.map +1 -0
- package/cjs/domain/rumEventsCollection/actions/actionCollection.js +89 -0
- package/cjs/domain/rumEventsCollection/actions/actionCollection.js.map +1 -0
- package/cjs/domain/rumEventsCollection/actions/clickChain.js +69 -0
- package/cjs/domain/rumEventsCollection/actions/clickChain.js.map +1 -0
- package/cjs/domain/rumEventsCollection/actions/computeFrustration.js +75 -0
- package/cjs/domain/rumEventsCollection/actions/computeFrustration.js.map +1 -0
- package/cjs/domain/rumEventsCollection/actions/getActionNameFromElement.js +232 -0
- package/cjs/domain/rumEventsCollection/actions/getActionNameFromElement.js.map +1 -0
- package/cjs/domain/rumEventsCollection/actions/getSelectorsFromElement.js +220 -0
- package/cjs/domain/rumEventsCollection/actions/getSelectorsFromElement.js.map +1 -0
- package/cjs/domain/rumEventsCollection/actions/interactionSelectorCache.js +28 -0
- package/cjs/domain/rumEventsCollection/actions/interactionSelectorCache.js.map +1 -0
- package/cjs/domain/rumEventsCollection/actions/listenActionEvents.js +73 -0
- package/cjs/domain/rumEventsCollection/actions/listenActionEvents.js.map +1 -0
- package/cjs/domain/rumEventsCollection/actions/trackClickActions.js +253 -0
- package/cjs/domain/rumEventsCollection/actions/trackClickActions.js.map +1 -0
- package/cjs/domain/rumEventsCollection/error/errorCollection.js +90 -0
- package/cjs/domain/rumEventsCollection/error/errorCollection.js.map +1 -0
- package/cjs/domain/rumEventsCollection/error/trackConsoleError.js +18 -0
- package/cjs/domain/rumEventsCollection/error/trackConsoleError.js.map +1 -0
- package/cjs/domain/rumEventsCollection/error/trackReportError.js +25 -0
- package/cjs/domain/rumEventsCollection/error/trackReportError.js.map +1 -0
- package/cjs/domain/rumEventsCollection/longTask/longAnimationFrameCollection.js +61 -0
- package/cjs/domain/rumEventsCollection/longTask/longAnimationFrameCollection.js.map +1 -0
- package/cjs/domain/rumEventsCollection/longTask/longTaskCollection.js +44 -0
- package/cjs/domain/rumEventsCollection/longTask/longTaskCollection.js.map +1 -0
- package/cjs/domain/rumEventsCollection/resource/matchRequestResourceEntry.js +74 -0
- package/cjs/domain/rumEventsCollection/resource/matchRequestResourceEntry.js.map +1 -0
- package/cjs/domain/rumEventsCollection/resource/resourceCollection.js +239 -0
- package/cjs/domain/rumEventsCollection/resource/resourceCollection.js.map +1 -0
- package/cjs/domain/rumEventsCollection/resource/resourceTrackerManager.js +237 -0
- package/cjs/domain/rumEventsCollection/resource/resourceTrackerManager.js.map +1 -0
- package/cjs/domain/rumEventsCollection/resource/resourceUtils.js +240 -0
- package/cjs/domain/rumEventsCollection/resource/resourceUtils.js.map +1 -0
- package/cjs/domain/rumEventsCollection/resource/retrieveInitialDocumentResourceTiming.js +25 -0
- package/cjs/domain/rumEventsCollection/resource/retrieveInitialDocumentResourceTiming.js.map +1 -0
- package/cjs/domain/rumEventsCollection/view/interactionCountPolyfill.js +54 -0
- package/cjs/domain/rumEventsCollection/view/interactionCountPolyfill.js.map +1 -0
- package/cjs/domain/rumEventsCollection/view/trackCommonViewMetrics.js +48 -0
- package/cjs/domain/rumEventsCollection/view/trackCommonViewMetrics.js.map +1 -0
- package/cjs/domain/rumEventsCollection/view/trackCumulativeLayoutShift.js +125 -0
- package/cjs/domain/rumEventsCollection/view/trackCumulativeLayoutShift.js.map +1 -0
- package/cjs/domain/rumEventsCollection/view/trackFirstContentfulPaint.js +27 -0
- package/cjs/domain/rumEventsCollection/view/trackFirstContentfulPaint.js.map +1 -0
- package/cjs/domain/rumEventsCollection/view/trackFirstHidden.js +55 -0
- package/cjs/domain/rumEventsCollection/view/trackFirstHidden.js.map +1 -0
- package/cjs/domain/rumEventsCollection/view/trackFirstInput.js +47 -0
- package/cjs/domain/rumEventsCollection/view/trackFirstInput.js.map +1 -0
- package/cjs/domain/rumEventsCollection/view/trackInitialViewTimings.js +51 -0
- package/cjs/domain/rumEventsCollection/view/trackInitialViewTimings.js.map +1 -0
- package/cjs/domain/rumEventsCollection/view/trackInteractionToNextPaint.js +162 -0
- package/cjs/domain/rumEventsCollection/view/trackInteractionToNextPaint.js.map +1 -0
- package/cjs/domain/rumEventsCollection/view/trackLargestContentfulPaint.js +61 -0
- package/cjs/domain/rumEventsCollection/view/trackLargestContentfulPaint.js.map +1 -0
- package/cjs/domain/rumEventsCollection/view/trackLoadingTime.js +51 -0
- package/cjs/domain/rumEventsCollection/view/trackLoadingTime.js.map +1 -0
- package/cjs/domain/rumEventsCollection/view/trackNavigationTimings.js +57 -0
- package/cjs/domain/rumEventsCollection/view/trackNavigationTimings.js.map +1 -0
- package/cjs/domain/rumEventsCollection/view/trackScrollMetrics.js +92 -0
- package/cjs/domain/rumEventsCollection/view/trackScrollMetrics.js.map +1 -0
- package/cjs/domain/rumEventsCollection/view/trackViewEventCounts.js +21 -0
- package/cjs/domain/rumEventsCollection/view/trackViewEventCounts.js.map +1 -0
- package/cjs/domain/rumEventsCollection/view/trackViews.js +269 -0
- package/cjs/domain/rumEventsCollection/view/trackViews.js.map +1 -0
- package/cjs/domain/rumEventsCollection/view/viewCollection.js +131 -0
- package/cjs/domain/rumEventsCollection/view/viewCollection.js.map +1 -0
- package/cjs/domain/rumSessionManager.js +187 -0
- package/cjs/domain/rumSessionManager.js.map +1 -0
- package/cjs/domain/tracing/ddtraceTracer.js +46 -0
- package/cjs/domain/tracing/ddtraceTracer.js.map +1 -0
- package/cjs/domain/tracing/getDocumentTraceId.js +80 -0
- package/cjs/domain/tracing/getDocumentTraceId.js.map +1 -0
- package/cjs/domain/tracing/jaegerTracer.js +48 -0
- package/cjs/domain/tracing/jaegerTracer.js.map +1 -0
- package/cjs/domain/tracing/sampler.js +69 -0
- package/cjs/domain/tracing/sampler.js.map +1 -0
- package/cjs/domain/tracing/skywalkingTracer.js +96 -0
- package/cjs/domain/tracing/skywalkingTracer.js.map +1 -0
- package/cjs/domain/tracing/traceIdentifier.js +66 -0
- package/cjs/domain/tracing/traceIdentifier.js.map +1 -0
- package/cjs/domain/tracing/tracer.js +133 -0
- package/cjs/domain/tracing/tracer.js.map +1 -0
- package/cjs/domain/tracing/w3cTraceParentTracer.js +74 -0
- package/cjs/domain/tracing/w3cTraceParentTracer.js.map +1 -0
- package/cjs/domain/tracing/zipkinMultiTracer.js +48 -0
- package/cjs/domain/tracing/zipkinMultiTracer.js.map +1 -0
- package/cjs/domain/tracing/zipkinSingleTracer.js +47 -0
- package/cjs/domain/tracing/zipkinSingleTracer.js.map +1 -0
- package/cjs/domain/trackEventCounts.js +55 -0
- package/cjs/domain/trackEventCounts.js.map +1 -0
- package/cjs/domain/usr/index.js +44 -0
- package/cjs/domain/usr/index.js.map +1 -0
- package/cjs/domain/waitPageActivityEnd.js +151 -0
- package/cjs/domain/waitPageActivityEnd.js.map +1 -0
- package/cjs/index.js +13 -0
- package/cjs/index.js.map +1 -0
- package/cjs/transport/startRumBatch.js +26 -0
- package/cjs/transport/startRumBatch.js.map +1 -0
- package/cjs/transport/startRumEventBridge.js +15 -0
- package/cjs/transport/startRumEventBridge.js.map +1 -0
- package/esm/boot/buildEnv.js +5 -0
- package/esm/boot/buildEnv.js.map +1 -0
- package/esm/boot/perStartRum.js +221 -0
- package/esm/boot/perStartRum.js.map +1 -0
- package/esm/boot/rum.js +173 -0
- package/esm/boot/rum.js.map +1 -0
- package/esm/boot/rum.slim.entry.js +7 -0
- package/esm/boot/rum.slim.entry.js.map +1 -0
- package/esm/boot/rumEntryFactory.js +9 -0
- package/esm/boot/rumEntryFactory.js.map +1 -0
- package/esm/boot/rumPublicApi.js +279 -0
- package/esm/boot/rumPublicApi.js.map +1 -0
- package/esm/boot/rumRecorderApiStub.js +13 -0
- package/esm/boot/rumRecorderApiStub.js.map +1 -0
- package/esm/boot/rumSlimConfiguration.js +10 -0
- package/esm/boot/rumSlimConfiguration.js.map +1 -0
- package/esm/constants.js +35 -0
- package/esm/constants.js.map +1 -0
- package/esm/domain/assembly.js +166 -0
- package/esm/domain/assembly.js.map +1 -0
- package/esm/domain/configuration.js +266 -0
- package/esm/domain/configuration.js.map +1 -0
- package/esm/domain/contexts/commonContext.js +8 -0
- package/esm/domain/contexts/commonContext.js.map +1 -0
- package/esm/domain/contexts/displayContext.js +16 -0
- package/esm/domain/contexts/displayContext.js.map +1 -0
- package/esm/domain/contexts/foregroundContexts.js +103 -0
- package/esm/domain/contexts/foregroundContexts.js.map +1 -0
- package/esm/domain/contexts/internalContext.js +41 -0
- package/esm/domain/contexts/internalContext.js.map +1 -0
- package/esm/domain/contexts/pageStateHistory.js +104 -0
- package/esm/domain/contexts/pageStateHistory.js.map +1 -0
- package/esm/domain/contexts/urlContexts.js +67 -0
- package/esm/domain/contexts/urlContexts.js.map +1 -0
- package/esm/domain/contexts/viewContexts.js +44 -0
- package/esm/domain/contexts/viewContexts.js.map +1 -0
- package/esm/domain/domMutationObservable.js +62 -0
- package/esm/domain/domMutationObservable.js.map +1 -0
- package/esm/domain/encoderStreamId.js +5 -0
- package/esm/domain/encoderStreamId.js.map +1 -0
- package/esm/domain/firstInputPolyfill.js +77 -0
- package/esm/domain/firstInputPolyfill.js.map +1 -0
- package/esm/domain/initViewportObservable.js +36 -0
- package/esm/domain/initViewportObservable.js.map +1 -0
- package/esm/domain/locationChangeObservable.js +51 -0
- package/esm/domain/locationChangeObservable.js.map +1 -0
- package/esm/domain/performanceObservable.js +116 -0
- package/esm/domain/performanceObservable.js.map +1 -0
- package/esm/domain/performanceUtils.js +40 -0
- package/esm/domain/performanceUtils.js.map +1 -0
- package/esm/domain/requestCollection.js +119 -0
- package/esm/domain/requestCollection.js.map +1 -0
- package/esm/domain/rumEventsCollection/actions/actionCollection.js +83 -0
- package/esm/domain/rumEventsCollection/actions/actionCollection.js.map +1 -0
- package/esm/domain/rumEventsCollection/actions/clickChain.js +62 -0
- package/esm/domain/rumEventsCollection/actions/clickChain.js.map +1 -0
- package/esm/domain/rumEventsCollection/actions/computeFrustration.js +67 -0
- package/esm/domain/rumEventsCollection/actions/computeFrustration.js.map +1 -0
- package/esm/domain/rumEventsCollection/actions/getActionNameFromElement.js +225 -0
- package/esm/domain/rumEventsCollection/actions/getActionNameFromElement.js.map +1 -0
- package/esm/domain/rumEventsCollection/actions/getSelectorsFromElement.js +212 -0
- package/esm/domain/rumEventsCollection/actions/getSelectorsFromElement.js.map +1 -0
- package/esm/domain/rumEventsCollection/actions/interactionSelectorCache.js +20 -0
- package/esm/domain/rumEventsCollection/actions/interactionSelectorCache.js.map +1 -0
- package/esm/domain/rumEventsCollection/actions/listenActionEvents.js +67 -0
- package/esm/domain/rumEventsCollection/actions/listenActionEvents.js.map +1 -0
- package/esm/domain/rumEventsCollection/actions/trackClickActions.js +244 -0
- package/esm/domain/rumEventsCollection/actions/trackClickActions.js.map +1 -0
- package/esm/domain/rumEventsCollection/error/errorCollection.js +83 -0
- package/esm/domain/rumEventsCollection/error/errorCollection.js.map +1 -0
- package/esm/domain/rumEventsCollection/error/trackConsoleError.js +12 -0
- package/esm/domain/rumEventsCollection/error/trackConsoleError.js.map +1 -0
- package/esm/domain/rumEventsCollection/error/trackReportError.js +19 -0
- package/esm/domain/rumEventsCollection/error/trackReportError.js.map +1 -0
- package/esm/domain/rumEventsCollection/longTask/longAnimationFrameCollection.js +55 -0
- package/esm/domain/rumEventsCollection/longTask/longAnimationFrameCollection.js.map +1 -0
- package/esm/domain/rumEventsCollection/longTask/longTaskCollection.js +38 -0
- package/esm/domain/rumEventsCollection/longTask/longTaskCollection.js.map +1 -0
- package/esm/domain/rumEventsCollection/resource/matchRequestResourceEntry.js +69 -0
- package/esm/domain/rumEventsCollection/resource/matchRequestResourceEntry.js.map +1 -0
- package/esm/domain/rumEventsCollection/resource/resourceCollection.js +233 -0
- package/esm/domain/rumEventsCollection/resource/resourceCollection.js.map +1 -0
- package/esm/domain/rumEventsCollection/resource/resourceTrackerManager.js +231 -0
- package/esm/domain/rumEventsCollection/resource/resourceTrackerManager.js.map +1 -0
- package/esm/domain/rumEventsCollection/resource/resourceUtils.js +218 -0
- package/esm/domain/rumEventsCollection/resource/resourceUtils.js.map +1 -0
- package/esm/domain/rumEventsCollection/resource/retrieveInitialDocumentResourceTiming.js +19 -0
- package/esm/domain/rumEventsCollection/resource/retrieveInitialDocumentResourceTiming.js.map +1 -0
- package/esm/domain/rumEventsCollection/view/interactionCountPolyfill.js +47 -0
- package/esm/domain/rumEventsCollection/view/interactionCountPolyfill.js.map +1 -0
- package/esm/domain/rumEventsCollection/view/trackCommonViewMetrics.js +42 -0
- package/esm/domain/rumEventsCollection/view/trackCommonViewMetrics.js.map +1 -0
- package/esm/domain/rumEventsCollection/view/trackCumulativeLayoutShift.js +117 -0
- package/esm/domain/rumEventsCollection/view/trackCumulativeLayoutShift.js.map +1 -0
- package/esm/domain/rumEventsCollection/view/trackFirstContentfulPaint.js +20 -0
- package/esm/domain/rumEventsCollection/view/trackFirstContentfulPaint.js.map +1 -0
- package/esm/domain/rumEventsCollection/view/trackFirstHidden.js +49 -0
- package/esm/domain/rumEventsCollection/view/trackFirstHidden.js.map +1 -0
- package/esm/domain/rumEventsCollection/view/trackFirstInput.js +41 -0
- package/esm/domain/rumEventsCollection/view/trackFirstInput.js.map +1 -0
- package/esm/domain/rumEventsCollection/view/trackInitialViewTimings.js +44 -0
- package/esm/domain/rumEventsCollection/view/trackInitialViewTimings.js.map +1 -0
- package/esm/domain/rumEventsCollection/view/trackInteractionToNextPaint.js +153 -0
- package/esm/domain/rumEventsCollection/view/trackInteractionToNextPaint.js.map +1 -0
- package/esm/domain/rumEventsCollection/view/trackLargestContentfulPaint.js +54 -0
- package/esm/domain/rumEventsCollection/view/trackLargestContentfulPaint.js.map +1 -0
- package/esm/domain/rumEventsCollection/view/trackLoadingTime.js +45 -0
- package/esm/domain/rumEventsCollection/view/trackLoadingTime.js.map +1 -0
- package/esm/domain/rumEventsCollection/view/trackNavigationTimings.js +51 -0
- package/esm/domain/rumEventsCollection/view/trackNavigationTimings.js.map +1 -0
- package/esm/domain/rumEventsCollection/view/trackScrollMetrics.js +84 -0
- package/esm/domain/rumEventsCollection/view/trackScrollMetrics.js.map +1 -0
- package/esm/domain/rumEventsCollection/view/trackViewEventCounts.js +15 -0
- package/esm/domain/rumEventsCollection/view/trackViewEventCounts.js.map +1 -0
- package/esm/domain/rumEventsCollection/view/trackViews.js +262 -0
- package/esm/domain/rumEventsCollection/view/trackViews.js.map +1 -0
- package/esm/domain/rumEventsCollection/view/viewCollection.js +125 -0
- package/esm/domain/rumEventsCollection/view/viewCollection.js.map +1 -0
- package/esm/domain/rumSessionManager.js +179 -0
- package/esm/domain/rumSessionManager.js.map +1 -0
- package/esm/domain/tracing/ddtraceTracer.js +40 -0
- package/esm/domain/tracing/ddtraceTracer.js.map +1 -0
- package/esm/domain/tracing/getDocumentTraceId.js +69 -0
- package/esm/domain/tracing/getDocumentTraceId.js.map +1 -0
- package/esm/domain/tracing/jaegerTracer.js +42 -0
- package/esm/domain/tracing/jaegerTracer.js.map +1 -0
- package/esm/domain/tracing/sampler.js +61 -0
- package/esm/domain/tracing/sampler.js.map +1 -0
- package/esm/domain/tracing/skywalkingTracer.js +90 -0
- package/esm/domain/tracing/skywalkingTracer.js.map +1 -0
- package/esm/domain/tracing/traceIdentifier.js +57 -0
- package/esm/domain/tracing/traceIdentifier.js.map +1 -0
- package/esm/domain/tracing/tracer.js +124 -0
- package/esm/domain/tracing/tracer.js.map +1 -0
- package/esm/domain/tracing/w3cTraceParentTracer.js +69 -0
- package/esm/domain/tracing/w3cTraceParentTracer.js.map +1 -0
- package/esm/domain/tracing/zipkinMultiTracer.js +42 -0
- package/esm/domain/tracing/zipkinMultiTracer.js.map +1 -0
- package/esm/domain/tracing/zipkinSingleTracer.js +41 -0
- package/esm/domain/tracing/zipkinSingleTracer.js.map +1 -0
- package/esm/domain/trackEventCounts.js +49 -0
- package/esm/domain/trackEventCounts.js.map +1 -0
- package/esm/domain/usr/index.js +38 -0
- package/esm/domain/usr/index.js.map +1 -0
- package/esm/domain/waitPageActivityEnd.js +142 -0
- package/esm/domain/waitPageActivityEnd.js.map +1 -0
- package/esm/index.js +3 -0
- package/esm/index.js.map +1 -0
- package/esm/transport/startRumBatch.js +20 -0
- package/esm/transport/startRumBatch.js.map +1 -0
- package/esm/transport/startRumEventBridge.js +9 -0
- package/esm/transport/startRumEventBridge.js.map +1 -0
- package/package.json +39 -0
- package/types/index.d.ts +134 -0
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import { addDuration, addEventListener, DOM_EVENT, elapsed, relativeNow, toServerDuration } from '@cloudcare/browser-core';
|
|
2
|
+
|
|
3
|
+
// Arbitrary value to cap number of element mostly for backend & to save bandwidth
|
|
4
|
+
export var MAX_NUMBER_OF_SELECTABLE_FOREGROUND_PERIODS = 500;
|
|
5
|
+
// Arbitrary value to cap number of element mostly for memory consumption in the browser
|
|
6
|
+
export var MAX_NUMBER_OF_STORED_FOREGROUND_PERIODS = 2500;
|
|
7
|
+
var foregroundPeriods = [];
|
|
8
|
+
export function startForegroundContexts() {
|
|
9
|
+
if (document.hasFocus()) {
|
|
10
|
+
addNewForegroundPeriod();
|
|
11
|
+
}
|
|
12
|
+
var foregroundTracking = trackFocus(addNewForegroundPeriod);
|
|
13
|
+
var blurTracking = trackBlur(closeForegroundPeriod);
|
|
14
|
+
return {
|
|
15
|
+
isInForegroundAt: isInForegroundAt,
|
|
16
|
+
selectInForegroundPeriodsFor: selectInForegroundPeriodsFor,
|
|
17
|
+
stop: function stop() {
|
|
18
|
+
foregroundPeriods = [];
|
|
19
|
+
foregroundTracking.stop();
|
|
20
|
+
blurTracking.stop();
|
|
21
|
+
}
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
export function addNewForegroundPeriod() {
|
|
25
|
+
if (foregroundPeriods.length > MAX_NUMBER_OF_STORED_FOREGROUND_PERIODS) {
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
var currentForegroundPeriod = foregroundPeriods[foregroundPeriods.length - 1];
|
|
29
|
+
var now = relativeNow();
|
|
30
|
+
if (currentForegroundPeriod !== undefined && currentForegroundPeriod.end === undefined) {
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
foregroundPeriods.push({
|
|
34
|
+
start: now
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
export function closeForegroundPeriod() {
|
|
38
|
+
if (foregroundPeriods.length === 0) {
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
var currentForegroundPeriod = foregroundPeriods[foregroundPeriods.length - 1];
|
|
42
|
+
var now = relativeNow();
|
|
43
|
+
if (currentForegroundPeriod.end !== undefined) {
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
currentForegroundPeriod.end = now;
|
|
47
|
+
}
|
|
48
|
+
function trackFocus(onFocusChange) {
|
|
49
|
+
return addEventListener(window, DOM_EVENT.FOCUS, function (event) {
|
|
50
|
+
if (!event.isTrusted) {
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
onFocusChange();
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
function trackBlur(onBlurChange) {
|
|
57
|
+
return addEventListener(window, DOM_EVENT.BLUR, function (event) {
|
|
58
|
+
if (!event.isTrusted) {
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
onBlurChange();
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
function isInForegroundAt(startTime) {
|
|
65
|
+
for (var i = foregroundPeriods.length - 1; i >= 0; i--) {
|
|
66
|
+
var foregroundPeriod = foregroundPeriods[i];
|
|
67
|
+
if (foregroundPeriod.end !== undefined && startTime > foregroundPeriod.end) {
|
|
68
|
+
break;
|
|
69
|
+
}
|
|
70
|
+
if (startTime > foregroundPeriod.start && (foregroundPeriod.end === undefined || startTime < foregroundPeriod.end)) {
|
|
71
|
+
return true;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
return false;
|
|
75
|
+
}
|
|
76
|
+
function selectInForegroundPeriodsFor(eventStartTime, duration) {
|
|
77
|
+
var eventEndTime = addDuration(eventStartTime, duration);
|
|
78
|
+
var filteredForegroundPeriods = [];
|
|
79
|
+
var earliestIndex = Math.max(0, foregroundPeriods.length - MAX_NUMBER_OF_SELECTABLE_FOREGROUND_PERIODS);
|
|
80
|
+
for (var i = foregroundPeriods.length - 1; i >= earliestIndex; i--) {
|
|
81
|
+
var foregroundPeriod = foregroundPeriods[i];
|
|
82
|
+
if (foregroundPeriod.end !== undefined && eventStartTime > foregroundPeriod.end) {
|
|
83
|
+
// event starts after the end of the current focus period
|
|
84
|
+
// since the array is sorted, we can stop looking for foreground periods
|
|
85
|
+
break;
|
|
86
|
+
}
|
|
87
|
+
if (eventEndTime < foregroundPeriod.start) {
|
|
88
|
+
// event ends before the start of the current focus period
|
|
89
|
+
// continue to previous one
|
|
90
|
+
continue;
|
|
91
|
+
}
|
|
92
|
+
var startTime = eventStartTime > foregroundPeriod.start ? eventStartTime : foregroundPeriod.start;
|
|
93
|
+
var startDuration = elapsed(eventStartTime, startTime);
|
|
94
|
+
var endTime = foregroundPeriod.end === undefined || eventEndTime < foregroundPeriod.end ? eventEndTime : foregroundPeriod.end;
|
|
95
|
+
var endDuration = elapsed(startTime, endTime);
|
|
96
|
+
filteredForegroundPeriods.unshift({
|
|
97
|
+
start: toServerDuration(startDuration),
|
|
98
|
+
duration: toServerDuration(endDuration)
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
return filteredForegroundPeriods;
|
|
102
|
+
}
|
|
103
|
+
//# sourceMappingURL=foregroundContexts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"foregroundContexts.js","names":["addDuration","addEventListener","DOM_EVENT","elapsed","relativeNow","toServerDuration","MAX_NUMBER_OF_SELECTABLE_FOREGROUND_PERIODS","MAX_NUMBER_OF_STORED_FOREGROUND_PERIODS","foregroundPeriods","startForegroundContexts","document","hasFocus","addNewForegroundPeriod","foregroundTracking","trackFocus","blurTracking","trackBlur","closeForegroundPeriod","isInForegroundAt","selectInForegroundPeriodsFor","stop","length","currentForegroundPeriod","now","undefined","end","push","start","onFocusChange","window","FOCUS","event","isTrusted","onBlurChange","BLUR","startTime","i","foregroundPeriod","eventStartTime","duration","eventEndTime","filteredForegroundPeriods","earliestIndex","Math","max","startDuration","endTime","endDuration","unshift"],"sources":["../../../../rum/src/domain/contexts/foregroundContexts.js"],"sourcesContent":["import {\n addDuration,\n addEventListener,\n DOM_EVENT,\n elapsed,\n relativeNow,\n toServerDuration\n} from '@cloudcare/browser-core'\n\n// Arbitrary value to cap number of element mostly for backend & to save bandwidth\nexport var MAX_NUMBER_OF_SELECTABLE_FOREGROUND_PERIODS = 500\n// Arbitrary value to cap number of element mostly for memory consumption in the browser\nexport var MAX_NUMBER_OF_STORED_FOREGROUND_PERIODS = 2500\n\nvar foregroundPeriods = []\n\nexport function startForegroundContexts() {\n if (document.hasFocus()) {\n addNewForegroundPeriod()\n }\n\n var foregroundTracking = trackFocus(addNewForegroundPeriod)\n var blurTracking = trackBlur(closeForegroundPeriod)\n return {\n isInForegroundAt: isInForegroundAt,\n selectInForegroundPeriodsFor: selectInForegroundPeriodsFor,\n stop: function () {\n foregroundPeriods = []\n foregroundTracking.stop()\n blurTracking.stop()\n }\n }\n}\n\nexport function addNewForegroundPeriod() {\n if (foregroundPeriods.length > MAX_NUMBER_OF_STORED_FOREGROUND_PERIODS) {\n return\n }\n var currentForegroundPeriod = foregroundPeriods[foregroundPeriods.length - 1]\n var now = relativeNow()\n if (\n currentForegroundPeriod !== undefined &&\n currentForegroundPeriod.end === undefined\n ) {\n return\n }\n foregroundPeriods.push({\n start: now\n })\n}\n\nexport function closeForegroundPeriod() {\n if (foregroundPeriods.length === 0) {\n return\n }\n var currentForegroundPeriod = foregroundPeriods[foregroundPeriods.length - 1]\n var now = relativeNow()\n if (currentForegroundPeriod.end !== undefined) {\n return\n }\n currentForegroundPeriod.end = now\n}\n\nfunction trackFocus(onFocusChange) {\n return addEventListener(window, DOM_EVENT.FOCUS, function (event) {\n if (!event.isTrusted) {\n return\n }\n onFocusChange()\n })\n}\n\nfunction trackBlur(onBlurChange) {\n return addEventListener(window, DOM_EVENT.BLUR, function (event) {\n if (!event.isTrusted) {\n return\n }\n onBlurChange()\n })\n}\n\nfunction isInForegroundAt(startTime) {\n for (var i = foregroundPeriods.length - 1; i >= 0; i--) {\n var foregroundPeriod = foregroundPeriods[i]\n if (\n foregroundPeriod.end !== undefined &&\n startTime > foregroundPeriod.end\n ) {\n break\n }\n if (\n startTime > foregroundPeriod.start &&\n (foregroundPeriod.end === undefined || startTime < foregroundPeriod.end)\n ) {\n return true\n }\n }\n return false\n}\n\nfunction selectInForegroundPeriodsFor(eventStartTime, duration) {\n var eventEndTime = addDuration(eventStartTime, duration)\n var filteredForegroundPeriods = []\n\n var earliestIndex = Math.max(\n 0,\n foregroundPeriods.length - MAX_NUMBER_OF_SELECTABLE_FOREGROUND_PERIODS\n )\n for (var i = foregroundPeriods.length - 1; i >= earliestIndex; i--) {\n var foregroundPeriod = foregroundPeriods[i]\n if (\n foregroundPeriod.end !== undefined &&\n eventStartTime > foregroundPeriod.end\n ) {\n // event starts after the end of the current focus period\n // since the array is sorted, we can stop looking for foreground periods\n break\n }\n if (eventEndTime < foregroundPeriod.start) {\n // event ends before the start of the current focus period\n // continue to previous one\n continue\n }\n var startTime =\n eventStartTime > foregroundPeriod.start\n ? eventStartTime\n : foregroundPeriod.start\n var startDuration = elapsed(eventStartTime, startTime)\n var endTime =\n foregroundPeriod.end === undefined || eventEndTime < foregroundPeriod.end\n ? eventEndTime\n : foregroundPeriod.end\n var endDuration = elapsed(startTime, endTime)\n filteredForegroundPeriods.unshift({\n start: toServerDuration(startDuration),\n duration: toServerDuration(endDuration)\n })\n }\n return filteredForegroundPeriods\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Internal context keep returning v1 format
|
|
3
|
+
* to not break compatibility with logs data format
|
|
4
|
+
*/
|
|
5
|
+
export function startInternalContext(applicationId, sessionManager, viewContexts, actionContexts, urlContexts) {
|
|
6
|
+
return {
|
|
7
|
+
get: function get(startTime) {
|
|
8
|
+
var viewContext = viewContexts.findView(startTime);
|
|
9
|
+
var urlContext = urlContexts.findUrl(startTime);
|
|
10
|
+
var session = sessionManager.findTrackedSession(startTime);
|
|
11
|
+
if (session && viewContext && urlContext) {
|
|
12
|
+
var actionId = actionContexts.findActionId(startTime);
|
|
13
|
+
var actionIds = actionContexts.findAllActionId(startTime);
|
|
14
|
+
return {
|
|
15
|
+
application: {
|
|
16
|
+
id: applicationId
|
|
17
|
+
},
|
|
18
|
+
session: {
|
|
19
|
+
id: session.id
|
|
20
|
+
},
|
|
21
|
+
userAction: actionId ? {
|
|
22
|
+
id: actionId,
|
|
23
|
+
ids: actionIds
|
|
24
|
+
} : undefined,
|
|
25
|
+
view: {
|
|
26
|
+
id: viewContext.id,
|
|
27
|
+
name: viewContext.name || urlContext.path,
|
|
28
|
+
url: urlContext.url,
|
|
29
|
+
referrer: urlContext.referrer,
|
|
30
|
+
host: urlContext.host,
|
|
31
|
+
path: urlContext.path,
|
|
32
|
+
pathGroup: urlContext.pathGroup,
|
|
33
|
+
pathname: urlContext.pathname,
|
|
34
|
+
urlQuery: urlContext.urlQuery
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=internalContext.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"internalContext.js","names":["startInternalContext","applicationId","sessionManager","viewContexts","actionContexts","urlContexts","get","startTime","viewContext","findView","urlContext","findUrl","session","findTrackedSession","actionId","findActionId","actionIds","findAllActionId","application","id","userAction","ids","undefined","view","name","path","url","referrer","host","pathGroup","pathname","urlQuery"],"sources":["../../../../rum/src/domain/contexts/internalContext.js"],"sourcesContent":["/**\n * Internal context keep returning v1 format\n * to not break compatibility with logs data format\n */\nexport function startInternalContext(\n applicationId,\n sessionManager,\n viewContexts,\n actionContexts,\n urlContexts\n) {\n return {\n get: function (startTime) {\n var viewContext = viewContexts.findView(startTime)\n var urlContext = urlContexts.findUrl(startTime)\n var session = sessionManager.findTrackedSession(startTime)\n if (session && viewContext && urlContext) {\n var actionId = actionContexts.findActionId(startTime)\n var actionIds = actionContexts.findAllActionId(startTime)\n return {\n application: {\n id: applicationId\n },\n session: {\n id: session.id\n },\n userAction: actionId\n ? {\n id: actionId,\n ids: actionIds\n }\n : undefined,\n view: {\n id: viewContext.id,\n name: viewContext.name || urlContext.path,\n url: urlContext.url,\n referrer: urlContext.referrer,\n host: urlContext.host,\n path: urlContext.path,\n pathGroup: urlContext.pathGroup,\n pathname: urlContext.pathname,\n urlQuery: urlContext.urlQuery\n }\n }\n }\n }\n }\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA,OAAO,SAASA,oBAAoBA,CAClCC,aAAa,EACbC,cAAc,EACdC,YAAY,EACZC,cAAc,EACdC,WAAW,EACX;EACA,OAAO;IACLC,GAAG,EAAE,SAALA,GAAGA,CAAYC,SAAS,EAAE;MACxB,IAAIC,WAAW,GAAGL,YAAY,CAACM,QAAQ,CAACF,SAAS,CAAC;MAClD,IAAIG,UAAU,GAAGL,WAAW,CAACM,OAAO,CAACJ,SAAS,CAAC;MAC/C,IAAIK,OAAO,GAAGV,cAAc,CAACW,kBAAkB,CAACN,SAAS,CAAC;MAC1D,IAAIK,OAAO,IAAIJ,WAAW,IAAIE,UAAU,EAAE;QACxC,IAAII,QAAQ,GAAGV,cAAc,CAACW,YAAY,CAACR,SAAS,CAAC;QACrD,IAAIS,SAAS,GAAGZ,cAAc,CAACa,eAAe,CAACV,SAAS,CAAC;QACzD,OAAO;UACLW,WAAW,EAAE;YACXC,EAAE,EAAElB;UACN,CAAC;UACDW,OAAO,EAAE;YACPO,EAAE,EAAEP,OAAO,CAACO;UACd,CAAC;UACDC,UAAU,EAAEN,QAAQ,GAChB;YACEK,EAAE,EAAEL,QAAQ;YACZO,GAAG,EAAEL;UACP,CAAC,GACDM,SAAS;UACbC,IAAI,EAAE;YACJJ,EAAE,EAAEX,WAAW,CAACW,EAAE;YAClBK,IAAI,EAAEhB,WAAW,CAACgB,IAAI,IAAId,UAAU,CAACe,IAAI;YACzCC,GAAG,EAAEhB,UAAU,CAACgB,GAAG;YACnBC,QAAQ,EAAEjB,UAAU,CAACiB,QAAQ;YAC7BC,IAAI,EAAElB,UAAU,CAACkB,IAAI;YACrBH,IAAI,EAAEf,UAAU,CAACe,IAAI;YACrBI,SAAS,EAAEnB,UAAU,CAACmB,SAAS;YAC/BC,QAAQ,EAAEpB,UAAU,CAACoB,QAAQ;YAC7BC,QAAQ,EAAErB,UAAU,CAACqB;UACvB;QACF,CAAC;MACH;IACF;EACF,CAAC;AACH","ignoreList":[]}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { elapsed, createValueHistory, SESSION_TIME_OUT_DELAY, toServerDuration, addEventListeners, relativeNow, DOM_EVENT } from '@cloudcare/browser-core';
|
|
2
|
+
import { RumPerformanceEntryType, supportPerformanceTimingEvent } from '../performanceObservable';
|
|
3
|
+
// Arbitrary value to cap number of element for memory consumption in the browser
|
|
4
|
+
export var MAX_PAGE_STATE_ENTRIES = 4000;
|
|
5
|
+
// Arbitrary value to cap number of element for backend & to save bandwidth
|
|
6
|
+
export var MAX_PAGE_STATE_ENTRIES_SELECTABLE = 500;
|
|
7
|
+
export var PAGE_STATE_CONTEXT_TIME_OUT_DELAY = SESSION_TIME_OUT_DELAY;
|
|
8
|
+
export var PageState = {
|
|
9
|
+
ACTIVE: 'active',
|
|
10
|
+
PASSIVE: 'passive',
|
|
11
|
+
HIDDEN: 'hidden',
|
|
12
|
+
FROZEN: 'frozen',
|
|
13
|
+
TERMINATED: 'terminated'
|
|
14
|
+
};
|
|
15
|
+
export function startPageStateHistory(maxPageStateEntriesSelectable) {
|
|
16
|
+
if (maxPageStateEntriesSelectable === undefined) {
|
|
17
|
+
maxPageStateEntriesSelectable = MAX_PAGE_STATE_ENTRIES_SELECTABLE;
|
|
18
|
+
}
|
|
19
|
+
var pageStateEntryHistory = createValueHistory({
|
|
20
|
+
expireDelay: PAGE_STATE_CONTEXT_TIME_OUT_DELAY,
|
|
21
|
+
maxEntries: MAX_PAGE_STATE_ENTRIES
|
|
22
|
+
});
|
|
23
|
+
var currentPageState;
|
|
24
|
+
if (supportPerformanceTimingEvent(RumPerformanceEntryType.VISIBILITY_STATE)) {
|
|
25
|
+
var visibilityEntries = performance.getEntriesByType(RumPerformanceEntryType.VISIBILITY_STATE);
|
|
26
|
+
visibilityEntries.forEach(function (entry) {
|
|
27
|
+
var state = entry.name === 'hidden' ? PageState.HIDDEN : PageState.ACTIVE;
|
|
28
|
+
addPageState(state, entry.startTime);
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
addPageState(getPageState(), relativeNow());
|
|
32
|
+
var _addEventListeners = addEventListeners(window, [DOM_EVENT.PAGE_SHOW, DOM_EVENT.FOCUS, DOM_EVENT.BLUR, DOM_EVENT.VISIBILITY_CHANGE, DOM_EVENT.RESUME, DOM_EVENT.FREEZE, DOM_EVENT.PAGE_HIDE], function (event) {
|
|
33
|
+
// Only get events fired by the browser to avoid false currentPageState changes done with custom events
|
|
34
|
+
addPageState(computePageState(event), event.timeStamp);
|
|
35
|
+
}, {
|
|
36
|
+
capture: true
|
|
37
|
+
});
|
|
38
|
+
var stopEventListeners = _addEventListeners.stop;
|
|
39
|
+
function addPageState(nextPageState, startTime) {
|
|
40
|
+
if (startTime === undefined) {
|
|
41
|
+
startTime = relativeNow();
|
|
42
|
+
}
|
|
43
|
+
if (nextPageState === currentPageState) {
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
currentPageState = nextPageState;
|
|
47
|
+
pageStateEntryHistory.closeActive(startTime);
|
|
48
|
+
pageStateEntryHistory.add({
|
|
49
|
+
state: currentPageState,
|
|
50
|
+
startTime: startTime
|
|
51
|
+
}, startTime);
|
|
52
|
+
}
|
|
53
|
+
var pageStateHistory = {
|
|
54
|
+
findAll: function findAll(startTime, duration) {
|
|
55
|
+
var pageStateEntries = pageStateEntryHistory.findAll(startTime, duration);
|
|
56
|
+
return processPageStates(pageStateEntries, startTime, maxPageStateEntriesSelectable);
|
|
57
|
+
},
|
|
58
|
+
wasInPageStateAt: function wasInPageStateAt(state, startTime) {
|
|
59
|
+
return pageStateHistory.wasInPageStateDuringPeriod(state, startTime, 0);
|
|
60
|
+
},
|
|
61
|
+
wasInPageStateDuringPeriod: function wasInPageStateDuringPeriod(state, startTime, duration) {
|
|
62
|
+
return pageStateEntryHistory.findAll(startTime, duration).some(function (pageState) {
|
|
63
|
+
return pageState.state === state;
|
|
64
|
+
});
|
|
65
|
+
},
|
|
66
|
+
addPageState: addPageState,
|
|
67
|
+
stop: function stop() {
|
|
68
|
+
stopEventListeners();
|
|
69
|
+
pageStateEntryHistory.stop();
|
|
70
|
+
}
|
|
71
|
+
};
|
|
72
|
+
return pageStateHistory;
|
|
73
|
+
}
|
|
74
|
+
function processPageStates(pageStateEntries, eventStartTime, maxPageStateEntriesSelectable) {
|
|
75
|
+
if (pageStateEntries.length === 0) {
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
return pageStateEntries.slice(-maxPageStateEntriesSelectable).reverse().map(function (_ref) {
|
|
79
|
+
var state = _ref.state,
|
|
80
|
+
startTime = _ref.startTime;
|
|
81
|
+
return {
|
|
82
|
+
state: state,
|
|
83
|
+
start: toServerDuration(elapsed(eventStartTime, startTime))
|
|
84
|
+
};
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
function computePageState(event) {
|
|
88
|
+
if (event.type === DOM_EVENT.FREEZE) {
|
|
89
|
+
return PageState.FROZEN;
|
|
90
|
+
} else if (event.type === DOM_EVENT.PAGE_HIDE) {
|
|
91
|
+
return event.persisted ? PageState.FROZEN : PageState.TERMINATED;
|
|
92
|
+
}
|
|
93
|
+
return getPageState();
|
|
94
|
+
}
|
|
95
|
+
function getPageState() {
|
|
96
|
+
if (document.visibilityState === 'hidden') {
|
|
97
|
+
return PageState.HIDDEN;
|
|
98
|
+
}
|
|
99
|
+
if (document.hasFocus()) {
|
|
100
|
+
return PageState.ACTIVE;
|
|
101
|
+
}
|
|
102
|
+
return PageState.PASSIVE;
|
|
103
|
+
}
|
|
104
|
+
//# sourceMappingURL=pageStateHistory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pageStateHistory.js","names":["elapsed","createValueHistory","SESSION_TIME_OUT_DELAY","toServerDuration","addEventListeners","relativeNow","DOM_EVENT","RumPerformanceEntryType","supportPerformanceTimingEvent","MAX_PAGE_STATE_ENTRIES","MAX_PAGE_STATE_ENTRIES_SELECTABLE","PAGE_STATE_CONTEXT_TIME_OUT_DELAY","PageState","ACTIVE","PASSIVE","HIDDEN","FROZEN","TERMINATED","startPageStateHistory","maxPageStateEntriesSelectable","undefined","pageStateEntryHistory","expireDelay","maxEntries","currentPageState","VISIBILITY_STATE","visibilityEntries","performance","getEntriesByType","forEach","entry","state","name","addPageState","startTime","getPageState","_addEventListeners","window","PAGE_SHOW","FOCUS","BLUR","VISIBILITY_CHANGE","RESUME","FREEZE","PAGE_HIDE","event","computePageState","timeStamp","capture","stopEventListeners","stop","nextPageState","closeActive","add","pageStateHistory","findAll","duration","pageStateEntries","processPageStates","wasInPageStateAt","wasInPageStateDuringPeriod","some","pageState","eventStartTime","length","slice","reverse","map","_ref","start","type","persisted","document","visibilityState","hasFocus"],"sources":["../../../../rum/src/domain/contexts/pageStateHistory.js"],"sourcesContent":["import {\n elapsed,\n createValueHistory,\n SESSION_TIME_OUT_DELAY,\n toServerDuration,\n addEventListeners,\n relativeNow,\n DOM_EVENT\n} from '@cloudcare/browser-core'\nimport {\n RumPerformanceEntryType,\n supportPerformanceTimingEvent\n} from '../performanceObservable'\n// Arbitrary value to cap number of element for memory consumption in the browser\nexport var MAX_PAGE_STATE_ENTRIES = 4000\n// Arbitrary value to cap number of element for backend & to save bandwidth\nexport var MAX_PAGE_STATE_ENTRIES_SELECTABLE = 500\n\nexport var PAGE_STATE_CONTEXT_TIME_OUT_DELAY = SESSION_TIME_OUT_DELAY\n\nexport var PageState = {\n ACTIVE: 'active',\n PASSIVE: 'passive',\n HIDDEN: 'hidden',\n FROZEN: 'frozen',\n TERMINATED: 'terminated'\n}\n\nexport function startPageStateHistory(maxPageStateEntriesSelectable) {\n if (maxPageStateEntriesSelectable === undefined) {\n maxPageStateEntriesSelectable = MAX_PAGE_STATE_ENTRIES_SELECTABLE\n }\n var pageStateEntryHistory = createValueHistory({\n expireDelay: PAGE_STATE_CONTEXT_TIME_OUT_DELAY,\n maxEntries: MAX_PAGE_STATE_ENTRIES\n })\n\n var currentPageState\n if (supportPerformanceTimingEvent(RumPerformanceEntryType.VISIBILITY_STATE)) {\n const visibilityEntries = performance.getEntriesByType(\n RumPerformanceEntryType.VISIBILITY_STATE\n )\n\n visibilityEntries.forEach((entry) => {\n const state =\n entry.name === 'hidden' ? PageState.HIDDEN : PageState.ACTIVE\n addPageState(state, entry.startTime)\n })\n }\n addPageState(getPageState(), relativeNow())\n\n var _addEventListeners = addEventListeners(\n window,\n [\n DOM_EVENT.PAGE_SHOW,\n DOM_EVENT.FOCUS,\n DOM_EVENT.BLUR,\n DOM_EVENT.VISIBILITY_CHANGE,\n DOM_EVENT.RESUME,\n DOM_EVENT.FREEZE,\n DOM_EVENT.PAGE_HIDE\n ],\n function (event) {\n // Only get events fired by the browser to avoid false currentPageState changes done with custom events\n addPageState(computePageState(event), event.timeStamp)\n },\n { capture: true }\n )\n var stopEventListeners = _addEventListeners.stop\n\n function addPageState(nextPageState, startTime) {\n if (startTime === undefined) {\n startTime = relativeNow()\n }\n if (nextPageState === currentPageState) {\n return\n }\n\n currentPageState = nextPageState\n pageStateEntryHistory.closeActive(startTime)\n pageStateEntryHistory.add(\n { state: currentPageState, startTime: startTime },\n startTime\n )\n }\n\n const pageStateHistory = {\n findAll: function (startTime, duration) {\n var pageStateEntries = pageStateEntryHistory.findAll(startTime, duration)\n return processPageStates(\n pageStateEntries,\n startTime,\n maxPageStateEntriesSelectable\n )\n },\n\n wasInPageStateAt: function (state, startTime) {\n return pageStateHistory.wasInPageStateDuringPeriod(state, startTime, 0)\n },\n\n wasInPageStateDuringPeriod: function (state, startTime, duration) {\n return pageStateEntryHistory\n .findAll(startTime, duration)\n .some(function (pageState) {\n return pageState.state === state\n })\n },\n\n addPageState: addPageState,\n stop: function () {\n stopEventListeners()\n pageStateEntryHistory.stop()\n }\n }\n return pageStateHistory\n}\nfunction processPageStates(\n pageStateEntries,\n eventStartTime,\n maxPageStateEntriesSelectable\n) {\n if (pageStateEntries.length === 0) {\n return\n }\n\n return pageStateEntries\n .slice(-maxPageStateEntriesSelectable)\n .reverse()\n .map(({ state, startTime }) => ({\n state,\n start: toServerDuration(elapsed(eventStartTime, startTime))\n }))\n}\n\nfunction computePageState(event) {\n if (event.type === DOM_EVENT.FREEZE) {\n return PageState.FROZEN\n } else if (event.type === DOM_EVENT.PAGE_HIDE) {\n return event.persisted ? PageState.FROZEN : PageState.TERMINATED\n }\n return getPageState()\n}\n\nfunction getPageState() {\n if (document.visibilityState === 'hidden') {\n return PageState.HIDDEN\n }\n\n if (document.hasFocus()) {\n return PageState.ACTIVE\n }\n\n return PageState.PASSIVE\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { LifeCycleEventType, SESSION_TIME_OUT_DELAY, relativeNow, createValueHistory, replaceNumberCharByPath, getQueryParamsFromUrl, isHashAnAnchor, getPathFromHash } from '@cloudcare/browser-core';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* We want to attach to an event:
|
|
5
|
+
* - the url corresponding to its start
|
|
6
|
+
* - the referrer corresponding to the previous view url (or document referrer for initial view)
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
export var URL_CONTEXT_TIME_OUT_DELAY = SESSION_TIME_OUT_DELAY;
|
|
10
|
+
export function startUrlContexts(lifeCycle, locationChangeObservable, location) {
|
|
11
|
+
var urlContextHistory = createValueHistory({
|
|
12
|
+
expireDelay: URL_CONTEXT_TIME_OUT_DELAY
|
|
13
|
+
});
|
|
14
|
+
var previousViewUrl;
|
|
15
|
+
lifeCycle.subscribe(LifeCycleEventType.BEFORE_VIEW_CREATED, function (data) {
|
|
16
|
+
var viewUrl = location.href;
|
|
17
|
+
urlContextHistory.add(buildUrlContext({
|
|
18
|
+
url: viewUrl,
|
|
19
|
+
location: location,
|
|
20
|
+
referrer: !previousViewUrl ? document.referrer : previousViewUrl
|
|
21
|
+
}), data.startClocks.relative);
|
|
22
|
+
previousViewUrl = viewUrl;
|
|
23
|
+
});
|
|
24
|
+
lifeCycle.subscribe(LifeCycleEventType.AFTER_VIEW_ENDED, function (data) {
|
|
25
|
+
urlContextHistory.closeActive(data.endClocks.relative);
|
|
26
|
+
});
|
|
27
|
+
var locationChangeSubscription = locationChangeObservable.subscribe(function (data) {
|
|
28
|
+
var current = urlContextHistory.find();
|
|
29
|
+
if (current) {
|
|
30
|
+
var changeTime = relativeNow();
|
|
31
|
+
urlContextHistory.closeActive(changeTime);
|
|
32
|
+
urlContextHistory.add(buildUrlContext({
|
|
33
|
+
url: data.newLocation.href,
|
|
34
|
+
location: data.newLocation,
|
|
35
|
+
referrer: current.referrer
|
|
36
|
+
}, true), changeTime);
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
function buildUrlContext(data) {
|
|
40
|
+
var isLocationChange = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
|
41
|
+
var pathname = data.location.pathname;
|
|
42
|
+
var path = pathname;
|
|
43
|
+
var hash = data.location.hash;
|
|
44
|
+
if (hash && hash.indexOf('#/') === 0) {
|
|
45
|
+
path = '/' + getPathFromHash(hash);
|
|
46
|
+
}
|
|
47
|
+
return {
|
|
48
|
+
url: data.url,
|
|
49
|
+
referrer: data.referrer,
|
|
50
|
+
host: data.location.host,
|
|
51
|
+
path: path,
|
|
52
|
+
pathGroup: replaceNumberCharByPath(path),
|
|
53
|
+
urlQuery: getQueryParamsFromUrl(data.location.href),
|
|
54
|
+
pathname: pathname
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
return {
|
|
58
|
+
findUrl: function findUrl(startTime) {
|
|
59
|
+
return urlContextHistory.find(startTime);
|
|
60
|
+
},
|
|
61
|
+
stop: function stop() {
|
|
62
|
+
locationChangeSubscription.unsubscribe();
|
|
63
|
+
urlContextHistory.stop();
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=urlContexts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"urlContexts.js","names":["LifeCycleEventType","SESSION_TIME_OUT_DELAY","relativeNow","createValueHistory","replaceNumberCharByPath","getQueryParamsFromUrl","isHashAnAnchor","getPathFromHash","URL_CONTEXT_TIME_OUT_DELAY","startUrlContexts","lifeCycle","locationChangeObservable","location","urlContextHistory","expireDelay","previousViewUrl","subscribe","BEFORE_VIEW_CREATED","data","viewUrl","href","add","buildUrlContext","url","referrer","document","startClocks","relative","AFTER_VIEW_ENDED","closeActive","endClocks","locationChangeSubscription","current","find","changeTime","newLocation","isLocationChange","arguments","length","undefined","pathname","path","hash","indexOf","host","pathGroup","urlQuery","findUrl","startTime","stop","unsubscribe"],"sources":["../../../../rum/src/domain/contexts/urlContexts.js"],"sourcesContent":["import {\n LifeCycleEventType,\n SESSION_TIME_OUT_DELAY,\n relativeNow,\n createValueHistory,\n replaceNumberCharByPath,\n getQueryParamsFromUrl,\n isHashAnAnchor,\n getPathFromHash\n} from '@cloudcare/browser-core'\n\n/**\n * We want to attach to an event:\n * - the url corresponding to its start\n * - the referrer corresponding to the previous view url (or document referrer for initial view)\n */\n\nexport var URL_CONTEXT_TIME_OUT_DELAY = SESSION_TIME_OUT_DELAY\n\nexport function startUrlContexts(\n lifeCycle,\n locationChangeObservable,\n location\n) {\n var urlContextHistory = createValueHistory({\n expireDelay: URL_CONTEXT_TIME_OUT_DELAY\n })\n\n var previousViewUrl\n\n lifeCycle.subscribe(LifeCycleEventType.BEFORE_VIEW_CREATED, function (data) {\n var viewUrl = location.href\n urlContextHistory.add(\n buildUrlContext({\n url: viewUrl,\n location: location,\n referrer: !previousViewUrl ? document.referrer : previousViewUrl\n }),\n data.startClocks.relative\n )\n previousViewUrl = viewUrl\n })\n lifeCycle.subscribe(LifeCycleEventType.AFTER_VIEW_ENDED, function (data) {\n urlContextHistory.closeActive(data.endClocks.relative)\n })\n var locationChangeSubscription = locationChangeObservable.subscribe(function (\n data\n ) {\n var current = urlContextHistory.find()\n if (current) {\n var changeTime = relativeNow()\n urlContextHistory.closeActive(changeTime)\n urlContextHistory.add(\n buildUrlContext(\n {\n url: data.newLocation.href,\n location: data.newLocation,\n referrer: current.referrer\n },\n true\n ),\n changeTime\n )\n }\n })\n\n function buildUrlContext(data, isLocationChange = false) {\n var pathname = data.location.pathname\n var path = pathname\n var hash = data.location.hash\n if (hash && hash.indexOf('#/') === 0) {\n path = '/' + getPathFromHash(hash)\n }\n return {\n url: data.url,\n referrer: data.referrer,\n host: data.location.host,\n path: path,\n pathGroup: replaceNumberCharByPath(path),\n urlQuery: getQueryParamsFromUrl(data.location.href),\n pathname: pathname\n }\n }\n\n return {\n findUrl: function (startTime) {\n return urlContextHistory.find(startTime)\n },\n stop: function () {\n locationChangeSubscription.unsubscribe()\n urlContextHistory.stop()\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { SESSION_TIME_OUT_DELAY, createValueHistory, LifeCycleEventType } from '@cloudcare/browser-core';
|
|
2
|
+
export var VIEW_CONTEXT_TIME_OUT_DELAY = SESSION_TIME_OUT_DELAY;
|
|
3
|
+
export function startViewContexts(lifeCycle) {
|
|
4
|
+
var viewContextHistory = createValueHistory({
|
|
5
|
+
expireDelay: VIEW_CONTEXT_TIME_OUT_DELAY
|
|
6
|
+
});
|
|
7
|
+
lifeCycle.subscribe(LifeCycleEventType.BEFORE_VIEW_CREATED, function (view) {
|
|
8
|
+
viewContextHistory.add(buildViewContext(view), view.startClocks.relative);
|
|
9
|
+
});
|
|
10
|
+
lifeCycle.subscribe(LifeCycleEventType.AFTER_VIEW_ENDED, function (data) {
|
|
11
|
+
viewContextHistory.closeActive(data.endClocks.relative);
|
|
12
|
+
});
|
|
13
|
+
lifeCycle.subscribe(LifeCycleEventType.BEFORE_VIEW_UPDATED, function (viewUpdate) {
|
|
14
|
+
var currentView = viewContextHistory.find(viewUpdate.startClocks.relative);
|
|
15
|
+
if (currentView && viewUpdate.name) {
|
|
16
|
+
currentView.name = viewUpdate.name;
|
|
17
|
+
}
|
|
18
|
+
if (currentView && viewUpdate.context) {
|
|
19
|
+
currentView.context = viewUpdate.context;
|
|
20
|
+
}
|
|
21
|
+
});
|
|
22
|
+
lifeCycle.subscribe(LifeCycleEventType.SESSION_RENEWED, function () {
|
|
23
|
+
viewContextHistory.reset();
|
|
24
|
+
});
|
|
25
|
+
function buildViewContext(view) {
|
|
26
|
+
return {
|
|
27
|
+
service: view.service,
|
|
28
|
+
version: view.version,
|
|
29
|
+
context: view.context,
|
|
30
|
+
id: view.id,
|
|
31
|
+
name: view.name,
|
|
32
|
+
startClocks: view.startClocks
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
return {
|
|
36
|
+
findView: function findView(startTime) {
|
|
37
|
+
return viewContextHistory.find(startTime);
|
|
38
|
+
},
|
|
39
|
+
stop: function stop() {
|
|
40
|
+
viewContextHistory.stop();
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=viewContexts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"viewContexts.js","names":["SESSION_TIME_OUT_DELAY","createValueHistory","LifeCycleEventType","VIEW_CONTEXT_TIME_OUT_DELAY","startViewContexts","lifeCycle","viewContextHistory","expireDelay","subscribe","BEFORE_VIEW_CREATED","view","add","buildViewContext","startClocks","relative","AFTER_VIEW_ENDED","data","closeActive","endClocks","BEFORE_VIEW_UPDATED","viewUpdate","currentView","find","name","context","SESSION_RENEWED","reset","service","version","id","findView","startTime","stop"],"sources":["../../../../rum/src/domain/contexts/viewContexts.js"],"sourcesContent":["import {\n SESSION_TIME_OUT_DELAY,\n createValueHistory,\n LifeCycleEventType\n} from '@cloudcare/browser-core'\n\nexport var VIEW_CONTEXT_TIME_OUT_DELAY = SESSION_TIME_OUT_DELAY\n\nexport function startViewContexts(lifeCycle) {\n var viewContextHistory = createValueHistory({\n expireDelay: VIEW_CONTEXT_TIME_OUT_DELAY\n })\n\n lifeCycle.subscribe(LifeCycleEventType.BEFORE_VIEW_CREATED, function (view) {\n viewContextHistory.add(buildViewContext(view), view.startClocks.relative)\n })\n\n lifeCycle.subscribe(LifeCycleEventType.AFTER_VIEW_ENDED, function (data) {\n viewContextHistory.closeActive(data.endClocks.relative)\n })\n lifeCycle.subscribe(LifeCycleEventType.BEFORE_VIEW_UPDATED, (viewUpdate) => {\n const currentView = viewContextHistory.find(viewUpdate.startClocks.relative)\n if (currentView && viewUpdate.name) {\n currentView.name = viewUpdate.name\n }\n if (currentView && viewUpdate.context) {\n currentView.context = viewUpdate.context\n }\n })\n lifeCycle.subscribe(LifeCycleEventType.SESSION_RENEWED, function () {\n viewContextHistory.reset()\n })\n\n function buildViewContext(view) {\n return {\n service: view.service,\n version: view.version,\n context: view.context,\n id: view.id,\n name: view.name,\n startClocks: view.startClocks\n }\n }\n\n return {\n findView: function (startTime) {\n return viewContextHistory.find(startTime)\n },\n stop: function () {\n viewContextHistory.stop()\n }\n }\n}\n"],"mappings":"AAAA,SACEA,sBAAsB,EACtBC,kBAAkB,EAClBC,kBAAkB,QACb,yBAAyB;AAEhC,OAAO,IAAIC,2BAA2B,GAAGH,sBAAsB;AAE/D,OAAO,SAASI,iBAAiBA,CAACC,SAAS,EAAE;EAC3C,IAAIC,kBAAkB,GAAGL,kBAAkB,CAAC;IAC1CM,WAAW,EAAEJ;EACf,CAAC,CAAC;EAEFE,SAAS,CAACG,SAAS,CAACN,kBAAkB,CAACO,mBAAmB,EAAE,UAAUC,IAAI,EAAE;IAC1EJ,kBAAkB,CAACK,GAAG,CAACC,gBAAgB,CAACF,IAAI,CAAC,EAAEA,IAAI,CAACG,WAAW,CAACC,QAAQ,CAAC;EAC3E,CAAC,CAAC;EAEFT,SAAS,CAACG,SAAS,CAACN,kBAAkB,CAACa,gBAAgB,EAAE,UAAUC,IAAI,EAAE;IACvEV,kBAAkB,CAACW,WAAW,CAACD,IAAI,CAACE,SAAS,CAACJ,QAAQ,CAAC;EACzD,CAAC,CAAC;EACFT,SAAS,CAACG,SAAS,CAACN,kBAAkB,CAACiB,mBAAmB,EAAE,UAACC,UAAU,EAAK;IAC1E,IAAMC,WAAW,GAAGf,kBAAkB,CAACgB,IAAI,CAACF,UAAU,CAACP,WAAW,CAACC,QAAQ,CAAC;IAC5E,IAAIO,WAAW,IAAID,UAAU,CAACG,IAAI,EAAE;MAClCF,WAAW,CAACE,IAAI,GAAGH,UAAU,CAACG,IAAI;IACpC;IACA,IAAIF,WAAW,IAAID,UAAU,CAACI,OAAO,EAAE;MACrCH,WAAW,CAACG,OAAO,GAAGJ,UAAU,CAACI,OAAO;IAC1C;EACF,CAAC,CAAC;EACFnB,SAAS,CAACG,SAAS,CAACN,kBAAkB,CAACuB,eAAe,EAAE,YAAY;IAClEnB,kBAAkB,CAACoB,KAAK,CAAC,CAAC;EAC5B,CAAC,CAAC;EAEF,SAASd,gBAAgBA,CAACF,IAAI,EAAE;IAC9B,OAAO;MACLiB,OAAO,EAAEjB,IAAI,CAACiB,OAAO;MACrBC,OAAO,EAAElB,IAAI,CAACkB,OAAO;MACrBJ,OAAO,EAAEd,IAAI,CAACc,OAAO;MACrBK,EAAE,EAAEnB,IAAI,CAACmB,EAAE;MACXN,IAAI,EAAEb,IAAI,CAACa,IAAI;MACfV,WAAW,EAAEH,IAAI,CAACG;IACpB,CAAC;EACH;EAEA,OAAO;IACLiB,QAAQ,EAAE,SAAVA,QAAQA,CAAYC,SAAS,EAAE;MAC7B,OAAOzB,kBAAkB,CAACgB,IAAI,CAACS,SAAS,CAAC;IAC3C,CAAC;IACDC,IAAI,EAAE,SAANA,IAAIA,CAAA,EAAc;MAChB1B,kBAAkB,CAAC0B,IAAI,CAAC,CAAC;IAC3B;EACF,CAAC;AACH","ignoreList":[]}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { noop, Observable, getZoneJsOriginalValue, monitor } from '@cloudcare/browser-core';
|
|
2
|
+
export function createDOMMutationObservable() {
|
|
3
|
+
var MutationObserver = getMutationObserverConstructor();
|
|
4
|
+
return new Observable(function (observable) {
|
|
5
|
+
if (!MutationObserver) {
|
|
6
|
+
return;
|
|
7
|
+
}
|
|
8
|
+
var observer = new MutationObserver(monitor(function () {
|
|
9
|
+
return observable.notify();
|
|
10
|
+
}));
|
|
11
|
+
try {
|
|
12
|
+
observer.observe(document, {
|
|
13
|
+
attributes: true,
|
|
14
|
+
characterData: true,
|
|
15
|
+
childList: true,
|
|
16
|
+
subtree: true
|
|
17
|
+
});
|
|
18
|
+
} catch (err) {}
|
|
19
|
+
return function () {
|
|
20
|
+
return observer.disconnect();
|
|
21
|
+
};
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
export function getMutationObserverConstructor() {
|
|
25
|
+
var constructor;
|
|
26
|
+
var browserWindow = window;
|
|
27
|
+
|
|
28
|
+
// Angular uses Zone.js to provide a context persisting across async tasks. Zone.js replaces the
|
|
29
|
+
// global MutationObserver constructor with a patched version to support the context propagation.
|
|
30
|
+
// There is an ongoing issue[1][2] with this setup when using a MutationObserver within a Angular
|
|
31
|
+
// component: on some occasions, the callback is being called in an infinite loop, causing the
|
|
32
|
+
// page to freeze (even if the callback is completely empty).
|
|
33
|
+
//
|
|
34
|
+
// To work around this issue, we try to get the original MutationObserver constructor stored by
|
|
35
|
+
// Zone.js.
|
|
36
|
+
//
|
|
37
|
+
// [1] https://github.com/angular/angular/issues/26948
|
|
38
|
+
// [2] https://github.com/angular/angular/issues/31712
|
|
39
|
+
if (browserWindow.Zone) {
|
|
40
|
+
// Zone.js 0.8.6+ is storing original class constructors into the browser 'window' object[3].
|
|
41
|
+
//
|
|
42
|
+
// [3] https://github.com/angular/angular/blob/6375fa79875c0fe7b815efc45940a6e6f5c9c9eb/packages/zone.js/lib/common/utils.ts#L288
|
|
43
|
+
constructor = getZoneJsOriginalValue(browserWindow, 'MutationObserver');
|
|
44
|
+
if (browserWindow.MutationObserver && constructor === browserWindow.MutationObserver) {
|
|
45
|
+
// Anterior Zone.js versions (used in Angular 2) does not expose the original MutationObserver
|
|
46
|
+
// in the 'window' object. Luckily, the patched MutationObserver class is storing an original
|
|
47
|
+
// instance in its properties[4]. Let's get the original MutationObserver constructor from
|
|
48
|
+
// there.
|
|
49
|
+
//
|
|
50
|
+
// [4] https://github.com/angular/zone.js/blob/v0.8.5/lib/common/utils.ts#L412
|
|
51
|
+
|
|
52
|
+
var patchedInstance = new browserWindow.MutationObserver(noop);
|
|
53
|
+
var originalInstance = getZoneJsOriginalValue(patchedInstance, 'originalInstance');
|
|
54
|
+
constructor = originalInstance && originalInstance.constructor;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
if (!constructor) {
|
|
58
|
+
constructor = browserWindow.MutationObserver;
|
|
59
|
+
}
|
|
60
|
+
return constructor;
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=domMutationObservable.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"domMutationObservable.js","names":["noop","Observable","getZoneJsOriginalValue","monitor","createDOMMutationObservable","MutationObserver","getMutationObserverConstructor","observable","observer","notify","observe","document","attributes","characterData","childList","subtree","err","disconnect","constructor","browserWindow","window","Zone","patchedInstance","originalInstance"],"sources":["../../../rum/src/domain/domMutationObservable.js"],"sourcesContent":["import {\n noop,\n Observable,\n getZoneJsOriginalValue,\n monitor\n} from '@cloudcare/browser-core'\n\nexport function createDOMMutationObservable() {\n var MutationObserver = getMutationObserverConstructor()\n\n return new Observable(function (observable) {\n if (!MutationObserver) {\n return\n }\n var observer = new MutationObserver(\n monitor(function () {\n return observable.notify()\n })\n )\n try {\n observer.observe(document, {\n attributes: true,\n characterData: true,\n childList: true,\n subtree: true\n })\n } catch (err) {}\n\n return function () {\n return observer.disconnect()\n }\n })\n}\n\nexport function getMutationObserverConstructor() {\n var constructor\n var browserWindow = window\n\n // Angular uses Zone.js to provide a context persisting across async tasks. Zone.js replaces the\n // global MutationObserver constructor with a patched version to support the context propagation.\n // There is an ongoing issue[1][2] with this setup when using a MutationObserver within a Angular\n // component: on some occasions, the callback is being called in an infinite loop, causing the\n // page to freeze (even if the callback is completely empty).\n //\n // To work around this issue, we try to get the original MutationObserver constructor stored by\n // Zone.js.\n //\n // [1] https://github.com/angular/angular/issues/26948\n // [2] https://github.com/angular/angular/issues/31712\n if (browserWindow.Zone) {\n // Zone.js 0.8.6+ is storing original class constructors into the browser 'window' object[3].\n //\n // [3] https://github.com/angular/angular/blob/6375fa79875c0fe7b815efc45940a6e6f5c9c9eb/packages/zone.js/lib/common/utils.ts#L288\n constructor = getZoneJsOriginalValue(browserWindow, 'MutationObserver')\n\n if (\n browserWindow.MutationObserver &&\n constructor === browserWindow.MutationObserver\n ) {\n // Anterior Zone.js versions (used in Angular 2) does not expose the original MutationObserver\n // in the 'window' object. Luckily, the patched MutationObserver class is storing an original\n // instance in its properties[4]. Let's get the original MutationObserver constructor from\n // there.\n //\n // [4] https://github.com/angular/zone.js/blob/v0.8.5/lib/common/utils.ts#L412\n\n var patchedInstance = new browserWindow.MutationObserver(noop)\n\n var originalInstance = getZoneJsOriginalValue(\n patchedInstance,\n 'originalInstance'\n )\n constructor = originalInstance && originalInstance.constructor\n }\n }\n\n if (!constructor) {\n constructor = browserWindow.MutationObserver\n }\n\n return constructor\n}\n"],"mappings":"AAAA,SACEA,IAAI,EACJC,UAAU,EACVC,sBAAsB,EACtBC,OAAO,QACF,yBAAyB;AAEhC,OAAO,SAASC,2BAA2BA,CAAA,EAAG;EAC5C,IAAIC,gBAAgB,GAAGC,8BAA8B,CAAC,CAAC;EAEvD,OAAO,IAAIL,UAAU,CAAC,UAAUM,UAAU,EAAE;IAC1C,IAAI,CAACF,gBAAgB,EAAE;MACrB;IACF;IACA,IAAIG,QAAQ,GAAG,IAAIH,gBAAgB,CACjCF,OAAO,CAAC,YAAY;MAClB,OAAOI,UAAU,CAACE,MAAM,CAAC,CAAC;IAC5B,CAAC,CACH,CAAC;IACD,IAAI;MACFD,QAAQ,CAACE,OAAO,CAACC,QAAQ,EAAE;QACzBC,UAAU,EAAE,IAAI;QAChBC,aAAa,EAAE,IAAI;QACnBC,SAAS,EAAE,IAAI;QACfC,OAAO,EAAE;MACX,CAAC,CAAC;IACJ,CAAC,CAAC,OAAOC,GAAG,EAAE,CAAC;IAEf,OAAO,YAAY;MACjB,OAAOR,QAAQ,CAACS,UAAU,CAAC,CAAC;IAC9B,CAAC;EACH,CAAC,CAAC;AACJ;AAEA,OAAO,SAASX,8BAA8BA,CAAA,EAAG;EAC/C,IAAIY,WAAW;EACf,IAAIC,aAAa,GAAGC,MAAM;;EAE1B;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,IAAID,aAAa,CAACE,IAAI,EAAE;IACtB;IACA;IACA;IACAH,WAAW,GAAGhB,sBAAsB,CAACiB,aAAa,EAAE,kBAAkB,CAAC;IAEvE,IACEA,aAAa,CAACd,gBAAgB,IAC9Ba,WAAW,KAAKC,aAAa,CAACd,gBAAgB,EAC9C;MACA;MACA;MACA;MACA;MACA;MACA;;MAEA,IAAIiB,eAAe,GAAG,IAAIH,aAAa,CAACd,gBAAgB,CAACL,IAAI,CAAC;MAE9D,IAAIuB,gBAAgB,GAAGrB,sBAAsB,CAC3CoB,eAAe,EACf,kBACF,CAAC;MACDJ,WAAW,GAAGK,gBAAgB,IAAIA,gBAAgB,CAACL,WAAW;IAChE;EACF;EAEA,IAAI,CAACA,WAAW,EAAE;IAChBA,WAAW,GAAGC,aAAa,CAACd,gBAAgB;EAC9C;EAEA,OAAOa,WAAW;AACpB","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"encoderStreamId.js","names":["EncoderStreamId","REPLAY","RUM"],"sources":["../../../rum/src/domain/encoderStreamId.js"],"sourcesContent":["export var EncoderStreamId = {\n REPLAY: 1,\n RUM: 2\n}\n\n"],"mappings":"AAAA,OAAO,IAAIA,eAAe,GAAG;EAC3BC,MAAM,EAAE,CAAC;EACTC,GAAG,EAAE;AACP,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { addEventListeners, dateNow, DOM_EVENT, relativeNow } from '@cloudcare/browser-core';
|
|
2
|
+
/**
|
|
3
|
+
* first-input timing entry polyfill based on
|
|
4
|
+
* https://github.com/GoogleChrome/web-vitals/blob/master/src/lib/polyfills/firstInputPolyfill.ts
|
|
5
|
+
*/
|
|
6
|
+
export function retrieveFirstInputTiming(configuration, callback) {
|
|
7
|
+
var startTimeStamp = dateNow();
|
|
8
|
+
var timingSent = false;
|
|
9
|
+
var _addEventListeners = addEventListeners(window, [DOM_EVENT.CLICK, DOM_EVENT.MOUSE_DOWN, DOM_EVENT.KEY_DOWN, DOM_EVENT.TOUCH_START, DOM_EVENT.POINTER_DOWN], function (evt) {
|
|
10
|
+
// Only count cancelable events, which should trigger behavior important to the user.
|
|
11
|
+
if (!evt.cancelable) {
|
|
12
|
+
return;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
// This timing will be used to compute the "first Input delay", which is the delta between
|
|
16
|
+
// when the system received the event (e.g. evt.timeStamp) and when it could run the callback
|
|
17
|
+
// (e.g. performance.now()).
|
|
18
|
+
var timing = {
|
|
19
|
+
entryType: 'first-input',
|
|
20
|
+
processingStart: relativeNow(),
|
|
21
|
+
processingEnd: relativeNow(),
|
|
22
|
+
startTime: evt.timeStamp,
|
|
23
|
+
duration: 0,
|
|
24
|
+
// arbitrary value to avoid nullable duration and simplify INP logic
|
|
25
|
+
name: '',
|
|
26
|
+
cancelable: false,
|
|
27
|
+
target: null,
|
|
28
|
+
toJSON: function toJSON() {
|
|
29
|
+
return {};
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
if (evt.type === DOM_EVENT.POINTER_DOWN) {
|
|
33
|
+
sendTimingIfPointerIsNotCancelled(timing);
|
|
34
|
+
} else {
|
|
35
|
+
sendTiming(timing);
|
|
36
|
+
}
|
|
37
|
+
}, {
|
|
38
|
+
passive: true,
|
|
39
|
+
capture: true
|
|
40
|
+
});
|
|
41
|
+
var removeEventListeners = _addEventListeners.stop;
|
|
42
|
+
return {
|
|
43
|
+
stop: removeEventListeners
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Pointer events are a special case, because they can trigger main or compositor thread behavior.
|
|
48
|
+
* We differentiate these cases based on whether or not we see a pointercancel event, which are
|
|
49
|
+
* fired when we scroll. If we're scrolling we don't need to report input delay since FID excludes
|
|
50
|
+
* scrolling and pinch/zooming.
|
|
51
|
+
*/
|
|
52
|
+
function sendTimingIfPointerIsNotCancelled(timing) {
|
|
53
|
+
addEventListeners(window, [DOM_EVENT.POINTER_UP, DOM_EVENT.POINTER_CANCEL], function (event) {
|
|
54
|
+
if (event.type === DOM_EVENT.POINTER_UP) {
|
|
55
|
+
sendTiming(timing);
|
|
56
|
+
}
|
|
57
|
+
}, {
|
|
58
|
+
once: true
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
function sendTiming(timing) {
|
|
62
|
+
if (!timingSent) {
|
|
63
|
+
timingSent = true;
|
|
64
|
+
removeEventListeners();
|
|
65
|
+
// In some cases the recorded delay is clearly wrong, e.g. it's negative or it's larger than
|
|
66
|
+
// the time between now and when the page was loaded.
|
|
67
|
+
// - https://github.com/GoogleChromeLabs/first-input-delay/issues/4
|
|
68
|
+
// - https://github.com/GoogleChromeLabs/first-input-delay/issues/6
|
|
69
|
+
// - https://github.com/GoogleChromeLabs/first-input-delay/issues/7
|
|
70
|
+
var delay = timing.processingStart - timing.startTime;
|
|
71
|
+
if (delay >= 0 && delay < dateNow() - startTimeStamp) {
|
|
72
|
+
callback(timing);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=firstInputPolyfill.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"firstInputPolyfill.js","names":["addEventListeners","dateNow","DOM_EVENT","relativeNow","retrieveFirstInputTiming","configuration","callback","startTimeStamp","timingSent","_addEventListeners","window","CLICK","MOUSE_DOWN","KEY_DOWN","TOUCH_START","POINTER_DOWN","evt","cancelable","timing","entryType","processingStart","processingEnd","startTime","timeStamp","duration","name","target","toJSON","type","sendTimingIfPointerIsNotCancelled","sendTiming","passive","capture","removeEventListeners","stop","POINTER_UP","POINTER_CANCEL","event","once","delay"],"sources":["../../../rum/src/domain/firstInputPolyfill.js"],"sourcesContent":["import {\n addEventListeners,\n dateNow,\n DOM_EVENT,\n relativeNow\n} from '@cloudcare/browser-core'\n/**\n * first-input timing entry polyfill based on\n * https://github.com/GoogleChrome/web-vitals/blob/master/src/lib/polyfills/firstInputPolyfill.ts\n */\nexport function retrieveFirstInputTiming(configuration, callback) {\n var startTimeStamp = dateNow()\n var timingSent = false\n\n var _addEventListeners = addEventListeners(\n window,\n [\n DOM_EVENT.CLICK,\n DOM_EVENT.MOUSE_DOWN,\n DOM_EVENT.KEY_DOWN,\n DOM_EVENT.TOUCH_START,\n DOM_EVENT.POINTER_DOWN\n ],\n function (evt) {\n // Only count cancelable events, which should trigger behavior important to the user.\n if (!evt.cancelable) {\n return\n }\n\n // This timing will be used to compute the \"first Input delay\", which is the delta between\n // when the system received the event (e.g. evt.timeStamp) and when it could run the callback\n // (e.g. performance.now()).\n var timing = {\n entryType: 'first-input',\n processingStart: relativeNow(),\n processingEnd: relativeNow(),\n startTime: evt.timeStamp,\n duration: 0, // arbitrary value to avoid nullable duration and simplify INP logic\n name: '',\n cancelable: false,\n target: null,\n toJSON: function () {\n return {}\n }\n }\n\n if (evt.type === DOM_EVENT.POINTER_DOWN) {\n sendTimingIfPointerIsNotCancelled(timing)\n } else {\n sendTiming(timing)\n }\n },\n { passive: true, capture: true }\n )\n var removeEventListeners = _addEventListeners.stop\n return { stop: removeEventListeners }\n\n /**\n * Pointer events are a special case, because they can trigger main or compositor thread behavior.\n * We differentiate these cases based on whether or not we see a pointercancel event, which are\n * fired when we scroll. If we're scrolling we don't need to report input delay since FID excludes\n * scrolling and pinch/zooming.\n */\n function sendTimingIfPointerIsNotCancelled(timing) {\n addEventListeners(\n window,\n [DOM_EVENT.POINTER_UP, DOM_EVENT.POINTER_CANCEL],\n function (event) {\n if (event.type === DOM_EVENT.POINTER_UP) {\n sendTiming(timing)\n }\n },\n { once: true }\n )\n }\n\n function sendTiming(timing) {\n if (!timingSent) {\n timingSent = true\n removeEventListeners()\n // In some cases the recorded delay is clearly wrong, e.g. it's negative or it's larger than\n // the time between now and when the page was loaded.\n // - https://github.com/GoogleChromeLabs/first-input-delay/issues/4\n // - https://github.com/GoogleChromeLabs/first-input-delay/issues/6\n // - https://github.com/GoogleChromeLabs/first-input-delay/issues/7\n var delay = timing.processingStart - timing.startTime\n if (delay >= 0 && delay < dateNow() - startTimeStamp) {\n callback(timing)\n }\n }\n }\n}\n"],"mappings":"AAAA,SACEA,iBAAiB,EACjBC,OAAO,EACPC,SAAS,EACTC,WAAW,QACN,yBAAyB;AAChC;AACA;AACA;AACA;AACA,OAAO,SAASC,wBAAwBA,CAACC,aAAa,EAAEC,QAAQ,EAAE;EAChE,IAAIC,cAAc,GAAGN,OAAO,CAAC,CAAC;EAC9B,IAAIO,UAAU,GAAG,KAAK;EAEtB,IAAIC,kBAAkB,GAAGT,iBAAiB,CACxCU,MAAM,EACN,CACER,SAAS,CAACS,KAAK,EACfT,SAAS,CAACU,UAAU,EACpBV,SAAS,CAACW,QAAQ,EAClBX,SAAS,CAACY,WAAW,EACrBZ,SAAS,CAACa,YAAY,CACvB,EACD,UAAUC,GAAG,EAAE;IACb;IACA,IAAI,CAACA,GAAG,CAACC,UAAU,EAAE;MACnB;IACF;;IAEA;IACA;IACA;IACA,IAAIC,MAAM,GAAG;MACXC,SAAS,EAAE,aAAa;MACxBC,eAAe,EAAEjB,WAAW,CAAC,CAAC;MAC9BkB,aAAa,EAAElB,WAAW,CAAC,CAAC;MAC5BmB,SAAS,EAAEN,GAAG,CAACO,SAAS;MACxBC,QAAQ,EAAE,CAAC;MAAE;MACbC,IAAI,EAAE,EAAE;MACRR,UAAU,EAAE,KAAK;MACjBS,MAAM,EAAE,IAAI;MACZC,MAAM,EAAE,SAARA,MAAMA,CAAA,EAAc;QAClB,OAAO,CAAC,CAAC;MACX;IACF,CAAC;IAED,IAAIX,GAAG,CAACY,IAAI,KAAK1B,SAAS,CAACa,YAAY,EAAE;MACvCc,iCAAiC,CAACX,MAAM,CAAC;IAC3C,CAAC,MAAM;MACLY,UAAU,CAACZ,MAAM,CAAC;IACpB;EACF,CAAC,EACD;IAAEa,OAAO,EAAE,IAAI;IAAEC,OAAO,EAAE;EAAK,CACjC,CAAC;EACD,IAAIC,oBAAoB,GAAGxB,kBAAkB,CAACyB,IAAI;EAClD,OAAO;IAAEA,IAAI,EAAED;EAAqB,CAAC;;EAErC;AACF;AACA;AACA;AACA;AACA;EACE,SAASJ,iCAAiCA,CAACX,MAAM,EAAE;IACjDlB,iBAAiB,CACfU,MAAM,EACN,CAACR,SAAS,CAACiC,UAAU,EAAEjC,SAAS,CAACkC,cAAc,CAAC,EAChD,UAAUC,KAAK,EAAE;MACf,IAAIA,KAAK,CAACT,IAAI,KAAK1B,SAAS,CAACiC,UAAU,EAAE;QACvCL,UAAU,CAACZ,MAAM,CAAC;MACpB;IACF,CAAC,EACD;MAAEoB,IAAI,EAAE;IAAK,CACf,CAAC;EACH;EAEA,SAASR,UAAUA,CAACZ,MAAM,EAAE;IAC1B,IAAI,CAACV,UAAU,EAAE;MACfA,UAAU,GAAG,IAAI;MACjByB,oBAAoB,CAAC,CAAC;MACtB;MACA;MACA;MACA;MACA;MACA,IAAIM,KAAK,GAAGrB,MAAM,CAACE,eAAe,GAAGF,MAAM,CAACI,SAAS;MACrD,IAAIiB,KAAK,IAAI,CAAC,IAAIA,KAAK,GAAGtC,OAAO,CAAC,CAAC,GAAGM,cAAc,EAAE;QACpDD,QAAQ,CAACY,MAAM,CAAC;MAClB;IACF;EACF;AACF","ignoreList":[]}
|