@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,36 @@
|
|
|
1
|
+
import { Observable, throttle, addEventListener, DOM_EVENT } from '@cloudcare/browser-core';
|
|
2
|
+
var viewportObservable;
|
|
3
|
+
export function initViewportObservable() {
|
|
4
|
+
if (!viewportObservable) {
|
|
5
|
+
viewportObservable = createViewportObservable();
|
|
6
|
+
}
|
|
7
|
+
return viewportObservable;
|
|
8
|
+
}
|
|
9
|
+
export function createViewportObservable() {
|
|
10
|
+
return new Observable(function (observable) {
|
|
11
|
+
var _throttledUpdateDimension = throttle(function () {
|
|
12
|
+
observable.notify(getViewportDimension());
|
|
13
|
+
}, 200);
|
|
14
|
+
var updateDimension = _throttledUpdateDimension.throttled;
|
|
15
|
+
return addEventListener(window, DOM_EVENT.RESIZE, updateDimension, {
|
|
16
|
+
capture: true,
|
|
17
|
+
passive: true
|
|
18
|
+
}).stop;
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
// excludes the width and height of any rendered classic scrollbar that is fixed to the visual viewport
|
|
23
|
+
export function getViewportDimension() {
|
|
24
|
+
var visual = window.visualViewport;
|
|
25
|
+
if (visual) {
|
|
26
|
+
return {
|
|
27
|
+
width: Number(visual.width * visual.scale),
|
|
28
|
+
height: Number(visual.height * visual.scale)
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
return {
|
|
32
|
+
width: Number(window.innerWidth || 0),
|
|
33
|
+
height: Number(window.innerHeight || 0)
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=initViewportObservable.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"initViewportObservable.js","names":["Observable","throttle","addEventListener","DOM_EVENT","viewportObservable","initViewportObservable","createViewportObservable","observable","_throttledUpdateDimension","notify","getViewportDimension","updateDimension","throttled","window","RESIZE","capture","passive","stop","visual","visualViewport","width","Number","scale","height","innerWidth","innerHeight"],"sources":["../../../rum/src/domain/initViewportObservable.js"],"sourcesContent":["import {\n Observable,\n throttle,\n addEventListener,\n DOM_EVENT\n} from '@cloudcare/browser-core'\n\nvar viewportObservable\n\nexport function initViewportObservable() {\n if (!viewportObservable) {\n viewportObservable = createViewportObservable()\n }\n return viewportObservable\n}\n\nexport function createViewportObservable() {\n return new Observable(function (observable) {\n var _throttledUpdateDimension = throttle(function () {\n observable.notify(getViewportDimension())\n }, 200)\n var updateDimension = _throttledUpdateDimension.throttled\n return addEventListener(window, DOM_EVENT.RESIZE, updateDimension, {\n capture: true,\n passive: true\n }).stop\n })\n}\n\n// excludes the width and height of any rendered classic scrollbar that is fixed to the visual viewport\nexport function getViewportDimension() {\n var visual = window.visualViewport\n if (visual) {\n return {\n width: Number(visual.width * visual.scale),\n height: Number(visual.height * visual.scale)\n }\n }\n\n return {\n width: Number(window.innerWidth || 0),\n height: Number(window.innerHeight || 0)\n }\n}\n"],"mappings":"AAAA,SACEA,UAAU,EACVC,QAAQ,EACRC,gBAAgB,EAChBC,SAAS,QACJ,yBAAyB;AAEhC,IAAIC,kBAAkB;AAEtB,OAAO,SAASC,sBAAsBA,CAAA,EAAG;EACvC,IAAI,CAACD,kBAAkB,EAAE;IACvBA,kBAAkB,GAAGE,wBAAwB,CAAC,CAAC;EACjD;EACA,OAAOF,kBAAkB;AAC3B;AAEA,OAAO,SAASE,wBAAwBA,CAAA,EAAG;EACzC,OAAO,IAAIN,UAAU,CAAC,UAAUO,UAAU,EAAE;IAC1C,IAAIC,yBAAyB,GAAGP,QAAQ,CAAC,YAAY;MACnDM,UAAU,CAACE,MAAM,CAACC,oBAAoB,CAAC,CAAC,CAAC;IAC3C,CAAC,EAAE,GAAG,CAAC;IACP,IAAIC,eAAe,GAAGH,yBAAyB,CAACI,SAAS;IACzD,OAAOV,gBAAgB,CAACW,MAAM,EAAEV,SAAS,CAACW,MAAM,EAAEH,eAAe,EAAE;MACjEI,OAAO,EAAE,IAAI;MACbC,OAAO,EAAE;IACX,CAAC,CAAC,CAACC,IAAI;EACT,CAAC,CAAC;AACJ;;AAEA;AACA,OAAO,SAASP,oBAAoBA,CAAA,EAAG;EACrC,IAAIQ,MAAM,GAAGL,MAAM,CAACM,cAAc;EAClC,IAAID,MAAM,EAAE;IACV,OAAO;MACLE,KAAK,EAAEC,MAAM,CAACH,MAAM,CAACE,KAAK,GAAGF,MAAM,CAACI,KAAK,CAAC;MAC1CC,MAAM,EAAEF,MAAM,CAACH,MAAM,CAACK,MAAM,GAAGL,MAAM,CAACI,KAAK;IAC7C,CAAC;EACH;EAEA,OAAO;IACLF,KAAK,EAAEC,MAAM,CAACR,MAAM,CAACW,UAAU,IAAI,CAAC,CAAC;IACrCD,MAAM,EAAEF,MAAM,CAACR,MAAM,CAACY,WAAW,IAAI,CAAC;EACxC,CAAC;AACH","ignoreList":[]}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { addEventListener, DOM_EVENT, Observable, shallowClone, instrumentMethod } from '@cloudcare/browser-core';
|
|
2
|
+
export function createLocationChangeObservable(location) {
|
|
3
|
+
var currentLocation = shallowClone(location);
|
|
4
|
+
return new Observable(function (observable) {
|
|
5
|
+
var _trackHistory = trackHistory(onLocationChange);
|
|
6
|
+
var _trackHash = trackHash(onLocationChange);
|
|
7
|
+
function onLocationChange() {
|
|
8
|
+
if (currentLocation.href === location.href) {
|
|
9
|
+
return;
|
|
10
|
+
}
|
|
11
|
+
var newLocation = shallowClone(location);
|
|
12
|
+
observable.notify({
|
|
13
|
+
newLocation: newLocation,
|
|
14
|
+
oldLocation: currentLocation
|
|
15
|
+
});
|
|
16
|
+
currentLocation = newLocation;
|
|
17
|
+
}
|
|
18
|
+
return function () {
|
|
19
|
+
_trackHistory.stop();
|
|
20
|
+
_trackHash.stop();
|
|
21
|
+
};
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
function trackHistory(onHistoryChange) {
|
|
25
|
+
// eslint-disable-next-line @typescript-eslint/unbound-method
|
|
26
|
+
var pushState = instrumentMethod(getHistoryInstrumentationTarget('pushState'), 'pushState', function (params) {
|
|
27
|
+
var onPostCall = params.onPostCall;
|
|
28
|
+
onPostCall(onHistoryChange);
|
|
29
|
+
});
|
|
30
|
+
var replaceState = instrumentMethod(getHistoryInstrumentationTarget('replaceState'), 'replaceState', function (params) {
|
|
31
|
+
var onPostCall = params.onPostCall;
|
|
32
|
+
onPostCall(onHistoryChange);
|
|
33
|
+
});
|
|
34
|
+
var popState = addEventListener(window, DOM_EVENT.POP_STATE, onHistoryChange);
|
|
35
|
+
return {
|
|
36
|
+
stop: function stop() {
|
|
37
|
+
pushState.stop();
|
|
38
|
+
replaceState.stop();
|
|
39
|
+
popState.stop();
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
function trackHash(onHashChange) {
|
|
44
|
+
return addEventListener(window, DOM_EVENT.HASH_CHANGE, onHashChange);
|
|
45
|
+
}
|
|
46
|
+
function getHistoryInstrumentationTarget(methodName) {
|
|
47
|
+
// Ideally we should always instument the method on the prototype, however some frameworks (e.g [Next.js](https://github.com/vercel/next.js/blob/d3f5532065f3e3bb84fb54bd2dfd1a16d0f03a21/packages/next/src/client/components/app-router.tsx#L429))
|
|
48
|
+
// are wrapping the instance method. In that case we should also wrap the instance method.
|
|
49
|
+
return Object.prototype.hasOwnProperty.call(history, methodName) ? history : History.prototype;
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=locationChangeObservable.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"locationChangeObservable.js","names":["addEventListener","DOM_EVENT","Observable","shallowClone","instrumentMethod","createLocationChangeObservable","location","currentLocation","observable","_trackHistory","trackHistory","onLocationChange","_trackHash","trackHash","href","newLocation","notify","oldLocation","stop","onHistoryChange","pushState","getHistoryInstrumentationTarget","params","onPostCall","replaceState","popState","window","POP_STATE","onHashChange","HASH_CHANGE","methodName","Object","prototype","hasOwnProperty","call","history","History"],"sources":["../../../rum/src/domain/locationChangeObservable.js"],"sourcesContent":["import {\n addEventListener,\n DOM_EVENT,\n Observable,\n shallowClone,\n instrumentMethod\n} from '@cloudcare/browser-core'\n\nexport function createLocationChangeObservable(location) {\n var currentLocation = shallowClone(location)\n return new Observable(function (observable) {\n var _trackHistory = trackHistory(onLocationChange)\n var _trackHash = trackHash(onLocationChange)\n function onLocationChange() {\n if (currentLocation.href === location.href) {\n return\n }\n var newLocation = shallowClone(location)\n observable.notify({\n newLocation: newLocation,\n oldLocation: currentLocation\n })\n currentLocation = newLocation\n }\n return function () {\n _trackHistory.stop()\n _trackHash.stop()\n }\n })\n}\n\nfunction trackHistory(onHistoryChange) {\n // eslint-disable-next-line @typescript-eslint/unbound-method\n var pushState = instrumentMethod(\n getHistoryInstrumentationTarget('pushState'),\n 'pushState',\n function (params) {\n var onPostCall = params.onPostCall\n onPostCall(onHistoryChange)\n }\n )\n var replaceState = instrumentMethod(\n getHistoryInstrumentationTarget('replaceState'),\n 'replaceState',\n function (params) {\n var onPostCall = params.onPostCall\n onPostCall(onHistoryChange)\n }\n )\n var popState = addEventListener(window, DOM_EVENT.POP_STATE, onHistoryChange)\n\n return {\n stop: function () {\n pushState.stop()\n replaceState.stop()\n popState.stop()\n }\n }\n}\n\nfunction trackHash(onHashChange) {\n return addEventListener(window, DOM_EVENT.HASH_CHANGE, onHashChange)\n}\nfunction getHistoryInstrumentationTarget(methodName) {\n // Ideally we should always instument the method on the prototype, however some frameworks (e.g [Next.js](https://github.com/vercel/next.js/blob/d3f5532065f3e3bb84fb54bd2dfd1a16d0f03a21/packages/next/src/client/components/app-router.tsx#L429))\n // are wrapping the instance method. In that case we should also wrap the instance method.\n return Object.prototype.hasOwnProperty.call(history, methodName)\n ? history\n : History.prototype\n}\n"],"mappings":"AAAA,SACEA,gBAAgB,EAChBC,SAAS,EACTC,UAAU,EACVC,YAAY,EACZC,gBAAgB,QACX,yBAAyB;AAEhC,OAAO,SAASC,8BAA8BA,CAACC,QAAQ,EAAE;EACvD,IAAIC,eAAe,GAAGJ,YAAY,CAACG,QAAQ,CAAC;EAC5C,OAAO,IAAIJ,UAAU,CAAC,UAAUM,UAAU,EAAE;IAC1C,IAAIC,aAAa,GAAGC,YAAY,CAACC,gBAAgB,CAAC;IAClD,IAAIC,UAAU,GAAGC,SAAS,CAACF,gBAAgB,CAAC;IAC5C,SAASA,gBAAgBA,CAAA,EAAG;MAC1B,IAAIJ,eAAe,CAACO,IAAI,KAAKR,QAAQ,CAACQ,IAAI,EAAE;QAC1C;MACF;MACA,IAAIC,WAAW,GAAGZ,YAAY,CAACG,QAAQ,CAAC;MACxCE,UAAU,CAACQ,MAAM,CAAC;QAChBD,WAAW,EAAEA,WAAW;QACxBE,WAAW,EAAEV;MACf,CAAC,CAAC;MACFA,eAAe,GAAGQ,WAAW;IAC/B;IACA,OAAO,YAAY;MACjBN,aAAa,CAACS,IAAI,CAAC,CAAC;MACpBN,UAAU,CAACM,IAAI,CAAC,CAAC;IACnB,CAAC;EACH,CAAC,CAAC;AACJ;AAEA,SAASR,YAAYA,CAACS,eAAe,EAAE;EACrC;EACA,IAAIC,SAAS,GAAGhB,gBAAgB,CAC9BiB,+BAA+B,CAAC,WAAW,CAAC,EAC5C,WAAW,EACX,UAAUC,MAAM,EAAE;IAChB,IAAIC,UAAU,GAAGD,MAAM,CAACC,UAAU;IAClCA,UAAU,CAACJ,eAAe,CAAC;EAC7B,CACF,CAAC;EACD,IAAIK,YAAY,GAAGpB,gBAAgB,CACjCiB,+BAA+B,CAAC,cAAc,CAAC,EAC/C,cAAc,EACd,UAAUC,MAAM,EAAE;IAChB,IAAIC,UAAU,GAAGD,MAAM,CAACC,UAAU;IAClCA,UAAU,CAACJ,eAAe,CAAC;EAC7B,CACF,CAAC;EACD,IAAIM,QAAQ,GAAGzB,gBAAgB,CAAC0B,MAAM,EAAEzB,SAAS,CAAC0B,SAAS,EAAER,eAAe,CAAC;EAE7E,OAAO;IACLD,IAAI,EAAE,SAANA,IAAIA,CAAA,EAAc;MAChBE,SAAS,CAACF,IAAI,CAAC,CAAC;MAChBM,YAAY,CAACN,IAAI,CAAC,CAAC;MACnBO,QAAQ,CAACP,IAAI,CAAC,CAAC;IACjB;EACF,CAAC;AACH;AAEA,SAASL,SAASA,CAACe,YAAY,EAAE;EAC/B,OAAO5B,gBAAgB,CAAC0B,MAAM,EAAEzB,SAAS,CAAC4B,WAAW,EAAED,YAAY,CAAC;AACtE;AACA,SAASP,+BAA+BA,CAACS,UAAU,EAAE;EACnD;EACA;EACA,OAAOC,MAAM,CAACC,SAAS,CAACC,cAAc,CAACC,IAAI,CAACC,OAAO,EAAEL,UAAU,CAAC,GAC5DK,OAAO,GACPC,OAAO,CAACJ,SAAS;AACvB","ignoreList":[]}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import { addEventListener, Observable, setTimeout, clearTimeout, monitor, includes } from '@cloudcare/browser-core';
|
|
2
|
+
import { isAllowedRequestUrl, hasValidResourceEntryDuration } from './rumEventsCollection/resource/resourceUtils';
|
|
3
|
+
import { retrieveFirstInputTiming } from './firstInputPolyfill';
|
|
4
|
+
// We want to use a real enum (i.e. not a const enum) here, to be able to check whether an arbitrary
|
|
5
|
+
// string is an expected performance entry
|
|
6
|
+
// eslint-disable-next-line no-restricted-syntax
|
|
7
|
+
export var RumPerformanceEntryType = {
|
|
8
|
+
EVENT: 'event',
|
|
9
|
+
FIRST_INPUT: 'first-input',
|
|
10
|
+
LARGEST_CONTENTFUL_PAINT: 'largest-contentful-paint',
|
|
11
|
+
LAYOUT_SHIFT: 'layout-shift',
|
|
12
|
+
LONG_TASK: 'longtask',
|
|
13
|
+
LONG_ANIMATION_FRAME: 'long-animation-frame',
|
|
14
|
+
NAVIGATION: 'navigation',
|
|
15
|
+
PAINT: 'paint',
|
|
16
|
+
RESOURCE: 'resource',
|
|
17
|
+
VISIBILITY_STATE: 'visibility-state'
|
|
18
|
+
};
|
|
19
|
+
export function createPerformanceObservable(configuration, options) {
|
|
20
|
+
return new Observable(function (observable) {
|
|
21
|
+
if (!window.PerformanceObserver) {
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
var handlePerformanceEntries = function handlePerformanceEntries(entries) {
|
|
25
|
+
var rumPerformanceEntries = filterRumPerformanceEntries(configuration, entries);
|
|
26
|
+
if (rumPerformanceEntries.length > 0) {
|
|
27
|
+
observable.notify(rumPerformanceEntries);
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
var timeoutId;
|
|
31
|
+
var isObserverInitializing = true;
|
|
32
|
+
var observer = new PerformanceObserver(monitor(function (entries) {
|
|
33
|
+
// In Safari the performance observer callback is synchronous.
|
|
34
|
+
// Because the buffered performance entry list can be quite large we delay the computation to prevent the SDK from blocking the main thread on init
|
|
35
|
+
if (isObserverInitializing) {
|
|
36
|
+
timeoutId = setTimeout(function () {
|
|
37
|
+
handlePerformanceEntries(entries.getEntries());
|
|
38
|
+
});
|
|
39
|
+
} else {
|
|
40
|
+
handlePerformanceEntries(entries.getEntries());
|
|
41
|
+
}
|
|
42
|
+
}));
|
|
43
|
+
try {
|
|
44
|
+
observer.observe(options);
|
|
45
|
+
} catch (_unused) {
|
|
46
|
+
// Some old browser versions (<= chrome 74 ) don't support the PerformanceObserver type and buffered options
|
|
47
|
+
// In these cases, fallback to getEntriesByType and PerformanceObserver with entryTypes
|
|
48
|
+
// TODO: remove this fallback in the next major version
|
|
49
|
+
var fallbackSupportedEntryTypes = [RumPerformanceEntryType.RESOURCE, RumPerformanceEntryType.NAVIGATION, RumPerformanceEntryType.LONG_TASK, RumPerformanceEntryType.PAINT];
|
|
50
|
+
if (includes(fallbackSupportedEntryTypes, options.type)) {
|
|
51
|
+
if (options.buffered) {
|
|
52
|
+
timeoutId = setTimeout(function () {
|
|
53
|
+
handlePerformanceEntries(performance.getEntriesByType(options.type));
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
try {
|
|
57
|
+
observer.observe({
|
|
58
|
+
entryTypes: [options.type]
|
|
59
|
+
});
|
|
60
|
+
} catch (_unused2) {
|
|
61
|
+
// Old versions of Safari are throwing "entryTypes contained only unsupported types"
|
|
62
|
+
// errors when observing only unsupported entry types.
|
|
63
|
+
//
|
|
64
|
+
// We could use `supportPerformanceTimingEvent` to make sure we don't invoke
|
|
65
|
+
// `observer.observe` with an unsupported entry type, but Safari 11 and 12 don't support
|
|
66
|
+
// `Performance.supportedEntryTypes`, so doing so would lose support for these versions
|
|
67
|
+
// even if they do support the entry type.
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
isObserverInitializing = false;
|
|
73
|
+
manageResourceTimingBufferFull(configuration);
|
|
74
|
+
var stopFirstInputTiming;
|
|
75
|
+
if (!supportPerformanceTimingEvent(RumPerformanceEntryType.FIRST_INPUT) && options.type === RumPerformanceEntryType.FIRST_INPUT) {
|
|
76
|
+
var _retrieveFirstInputTiming = retrieveFirstInputTiming(configuration, function (timing) {
|
|
77
|
+
handlePerformanceEntries([timing]);
|
|
78
|
+
});
|
|
79
|
+
stopFirstInputTiming = _retrieveFirstInputTiming.stop;
|
|
80
|
+
}
|
|
81
|
+
return function () {
|
|
82
|
+
observer.disconnect();
|
|
83
|
+
if (stopFirstInputTiming) {
|
|
84
|
+
stopFirstInputTiming();
|
|
85
|
+
}
|
|
86
|
+
clearTimeout(timeoutId);
|
|
87
|
+
};
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
var resourceTimingBufferFullListener;
|
|
91
|
+
function manageResourceTimingBufferFull(configuration) {
|
|
92
|
+
if (!resourceTimingBufferFullListener && supportPerformanceObject() && 'addEventListener' in performance) {
|
|
93
|
+
// https://bugzilla.mozilla.org/show_bug.cgi?id=1559377
|
|
94
|
+
resourceTimingBufferFullListener = addEventListener(performance, 'resourcetimingbufferfull', function () {
|
|
95
|
+
performance.clearResourceTimings();
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
return function () {
|
|
99
|
+
resourceTimingBufferFullListener && resourceTimingBufferFullListener.stop();
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
function supportPerformanceObject() {
|
|
103
|
+
return window.performance !== undefined && 'getEntries' in performance;
|
|
104
|
+
}
|
|
105
|
+
export function supportPerformanceTimingEvent(entryType) {
|
|
106
|
+
return window.PerformanceObserver && PerformanceObserver.supportedEntryTypes !== undefined && PerformanceObserver.supportedEntryTypes.includes(entryType);
|
|
107
|
+
}
|
|
108
|
+
function filterRumPerformanceEntries(configuration, entries) {
|
|
109
|
+
return entries.filter(function (entry) {
|
|
110
|
+
return !isForbiddenResource(configuration, entry);
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
function isForbiddenResource(configuration, entry) {
|
|
114
|
+
return entry.entryType === RumPerformanceEntryType.RESOURCE && (!isAllowedRequestUrl(configuration, entry.name) || !hasValidResourceEntryDuration(entry));
|
|
115
|
+
}
|
|
116
|
+
//# sourceMappingURL=performanceObservable.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"performanceObservable.js","names":["addEventListener","Observable","setTimeout","clearTimeout","monitor","includes","isAllowedRequestUrl","hasValidResourceEntryDuration","retrieveFirstInputTiming","RumPerformanceEntryType","EVENT","FIRST_INPUT","LARGEST_CONTENTFUL_PAINT","LAYOUT_SHIFT","LONG_TASK","LONG_ANIMATION_FRAME","NAVIGATION","PAINT","RESOURCE","VISIBILITY_STATE","createPerformanceObservable","configuration","options","observable","window","PerformanceObserver","handlePerformanceEntries","entries","rumPerformanceEntries","filterRumPerformanceEntries","length","notify","timeoutId","isObserverInitializing","observer","getEntries","observe","_unused","fallbackSupportedEntryTypes","type","buffered","performance","getEntriesByType","entryTypes","_unused2","manageResourceTimingBufferFull","stopFirstInputTiming","supportPerformanceTimingEvent","_retrieveFirstInputTiming","timing","stop","disconnect","resourceTimingBufferFullListener","supportPerformanceObject","clearResourceTimings","undefined","entryType","supportedEntryTypes","filter","entry","isForbiddenResource","name"],"sources":["../../../rum/src/domain/performanceObservable.js"],"sourcesContent":["import {\n addEventListener,\n Observable,\n setTimeout,\n clearTimeout,\n monitor,\n includes\n} from '@cloudcare/browser-core'\nimport {\n isAllowedRequestUrl,\n hasValidResourceEntryDuration\n} from './rumEventsCollection/resource/resourceUtils'\nimport { retrieveFirstInputTiming } from './firstInputPolyfill'\n// We want to use a real enum (i.e. not a const enum) here, to be able to check whether an arbitrary\n// string is an expected performance entry\n// eslint-disable-next-line no-restricted-syntax\nexport var RumPerformanceEntryType = {\n EVENT: 'event',\n FIRST_INPUT: 'first-input',\n LARGEST_CONTENTFUL_PAINT: 'largest-contentful-paint',\n LAYOUT_SHIFT: 'layout-shift',\n LONG_TASK: 'longtask',\n LONG_ANIMATION_FRAME: 'long-animation-frame',\n NAVIGATION: 'navigation',\n PAINT: 'paint',\n RESOURCE: 'resource',\n VISIBILITY_STATE: 'visibility-state'\n}\n\nexport function createPerformanceObservable(configuration, options) {\n return new Observable(function (observable) {\n if (!window.PerformanceObserver) {\n return\n }\n var handlePerformanceEntries = function (entries) {\n var rumPerformanceEntries = filterRumPerformanceEntries(\n configuration,\n entries\n )\n if (rumPerformanceEntries.length > 0) {\n observable.notify(rumPerformanceEntries)\n }\n }\n\n var timeoutId\n var isObserverInitializing = true\n\n const observer = new PerformanceObserver(\n monitor(function (entries) {\n // In Safari the performance observer callback is synchronous.\n // Because the buffered performance entry list can be quite large we delay the computation to prevent the SDK from blocking the main thread on init\n if (isObserverInitializing) {\n timeoutId = setTimeout(function () {\n handlePerformanceEntries(entries.getEntries())\n })\n } else {\n handlePerformanceEntries(entries.getEntries())\n }\n })\n )\n\n try {\n observer.observe(options)\n } catch {\n // Some old browser versions (<= chrome 74 ) don't support the PerformanceObserver type and buffered options\n // In these cases, fallback to getEntriesByType and PerformanceObserver with entryTypes\n // TODO: remove this fallback in the next major version\n var fallbackSupportedEntryTypes = [\n RumPerformanceEntryType.RESOURCE,\n RumPerformanceEntryType.NAVIGATION,\n RumPerformanceEntryType.LONG_TASK,\n RumPerformanceEntryType.PAINT\n ]\n if (includes(fallbackSupportedEntryTypes, options.type)) {\n if (options.buffered) {\n timeoutId = setTimeout(function () {\n handlePerformanceEntries(performance.getEntriesByType(options.type))\n })\n }\n try {\n observer.observe({ entryTypes: [options.type] })\n } catch {\n // Old versions of Safari are throwing \"entryTypes contained only unsupported types\"\n // errors when observing only unsupported entry types.\n //\n // We could use `supportPerformanceTimingEvent` to make sure we don't invoke\n // `observer.observe` with an unsupported entry type, but Safari 11 and 12 don't support\n // `Performance.supportedEntryTypes`, so doing so would lose support for these versions\n // even if they do support the entry type.\n return\n }\n }\n }\n isObserverInitializing = false\n\n manageResourceTimingBufferFull(configuration)\n var stopFirstInputTiming\n if (\n !supportPerformanceTimingEvent(RumPerformanceEntryType.FIRST_INPUT) &&\n options.type === RumPerformanceEntryType.FIRST_INPUT\n ) {\n var _retrieveFirstInputTiming = retrieveFirstInputTiming(\n configuration,\n function (timing) {\n handlePerformanceEntries([timing])\n }\n )\n stopFirstInputTiming = _retrieveFirstInputTiming.stop\n }\n return function () {\n observer.disconnect()\n if (stopFirstInputTiming) {\n stopFirstInputTiming()\n }\n clearTimeout(timeoutId)\n }\n })\n}\n\nvar resourceTimingBufferFullListener\nfunction manageResourceTimingBufferFull(configuration) {\n if (\n !resourceTimingBufferFullListener &&\n supportPerformanceObject() &&\n 'addEventListener' in performance\n ) {\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1559377\n resourceTimingBufferFullListener = addEventListener(\n performance,\n 'resourcetimingbufferfull',\n function () {\n performance.clearResourceTimings()\n }\n )\n }\n return function () {\n resourceTimingBufferFullListener && resourceTimingBufferFullListener.stop()\n }\n}\n\nfunction supportPerformanceObject() {\n return window.performance !== undefined && 'getEntries' in performance\n}\n\nexport function supportPerformanceTimingEvent(entryType) {\n return (\n window.PerformanceObserver &&\n PerformanceObserver.supportedEntryTypes !== undefined &&\n PerformanceObserver.supportedEntryTypes.includes(entryType)\n )\n}\n\nfunction filterRumPerformanceEntries(configuration, entries) {\n return entries.filter(function (entry) {\n return !isForbiddenResource(configuration, entry)\n })\n}\n\nfunction isForbiddenResource(configuration, entry) {\n return (\n entry.entryType === RumPerformanceEntryType.RESOURCE &&\n (!isAllowedRequestUrl(configuration, entry.name) ||\n !hasValidResourceEntryDuration(entry))\n )\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { getRelativeTime, isNumber, assign } from '@cloudcare/browser-core';
|
|
2
|
+
import { supportPerformanceTimingEvent, RumPerformanceEntryType } from './performanceObservable';
|
|
3
|
+
export function getNavigationEntry() {
|
|
4
|
+
if (supportPerformanceTimingEvent(RumPerformanceEntryType.NAVIGATION)) {
|
|
5
|
+
var navigationEntry = performance.getEntriesByType(RumPerformanceEntryType.NAVIGATION)[0];
|
|
6
|
+
if (navigationEntry) {
|
|
7
|
+
return navigationEntry;
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
var timings = computeTimingsFromDeprecatedPerformanceTiming();
|
|
11
|
+
var entry = assign({
|
|
12
|
+
entryType: RumPerformanceEntryType.NAVIGATION,
|
|
13
|
+
initiatorType: 'navigation',
|
|
14
|
+
name: window.location.href,
|
|
15
|
+
startTime: 0,
|
|
16
|
+
duration: timings.responseEnd,
|
|
17
|
+
decodedBodySize: 0,
|
|
18
|
+
encodedBodySize: 0,
|
|
19
|
+
transferSize: 0,
|
|
20
|
+
toJSON: function toJSON() {
|
|
21
|
+
return assign({}, entry, {
|
|
22
|
+
toJSON: undefined
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
}, timings);
|
|
26
|
+
return entry;
|
|
27
|
+
}
|
|
28
|
+
export function computeTimingsFromDeprecatedPerformanceTiming() {
|
|
29
|
+
var result = {};
|
|
30
|
+
var timing = performance.timing;
|
|
31
|
+
for (var key in timing) {
|
|
32
|
+
if (isNumber(timing[key])) {
|
|
33
|
+
var numberKey = key;
|
|
34
|
+
var timingElement = timing[numberKey];
|
|
35
|
+
result[numberKey] = timingElement === 0 ? 0 : getRelativeTime(timingElement);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
return result;
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=performanceUtils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"performanceUtils.js","names":["getRelativeTime","isNumber","assign","supportPerformanceTimingEvent","RumPerformanceEntryType","getNavigationEntry","NAVIGATION","navigationEntry","performance","getEntriesByType","timings","computeTimingsFromDeprecatedPerformanceTiming","entry","entryType","initiatorType","name","window","location","href","startTime","duration","responseEnd","decodedBodySize","encodedBodySize","transferSize","toJSON","undefined","result","timing","key","numberKey","timingElement"],"sources":["../../../rum/src/domain/performanceUtils.js"],"sourcesContent":["import { getRelativeTime, isNumber, assign } from '@cloudcare/browser-core'\nimport {\n supportPerformanceTimingEvent,\n RumPerformanceEntryType\n} from './performanceObservable'\n\nexport function getNavigationEntry() {\n if (supportPerformanceTimingEvent(RumPerformanceEntryType.NAVIGATION)) {\n var navigationEntry = performance.getEntriesByType(\n RumPerformanceEntryType.NAVIGATION\n )[0]\n if (navigationEntry) {\n return navigationEntry\n }\n }\n\n var timings = computeTimingsFromDeprecatedPerformanceTiming()\n var entry = assign(\n {\n entryType: RumPerformanceEntryType.NAVIGATION,\n initiatorType: 'navigation',\n name: window.location.href,\n startTime: 0,\n duration: timings.responseEnd,\n decodedBodySize: 0,\n encodedBodySize: 0,\n transferSize: 0,\n toJSON: function () {\n return assign({}, entry, { toJSON: undefined })\n }\n },\n timings\n )\n return entry\n}\n\nexport function computeTimingsFromDeprecatedPerformanceTiming() {\n var result = {}\n var timing = performance.timing\n\n for (var key in timing) {\n if (isNumber(timing[key])) {\n var numberKey = key\n var timingElement = timing[numberKey]\n result[numberKey] =\n timingElement === 0 ? 0 : getRelativeTime(timingElement)\n }\n }\n return result\n}\n"],"mappings":"AAAA,SAASA,eAAe,EAAEC,QAAQ,EAAEC,MAAM,QAAQ,yBAAyB;AAC3E,SACEC,6BAA6B,EAC7BC,uBAAuB,QAClB,yBAAyB;AAEhC,OAAO,SAASC,kBAAkBA,CAAA,EAAG;EACnC,IAAIF,6BAA6B,CAACC,uBAAuB,CAACE,UAAU,CAAC,EAAE;IACrE,IAAIC,eAAe,GAAGC,WAAW,CAACC,gBAAgB,CAChDL,uBAAuB,CAACE,UAC1B,CAAC,CAAC,CAAC,CAAC;IACJ,IAAIC,eAAe,EAAE;MACnB,OAAOA,eAAe;IACxB;EACF;EAEA,IAAIG,OAAO,GAAGC,6CAA6C,CAAC,CAAC;EAC7D,IAAIC,KAAK,GAAGV,MAAM,CAChB;IACEW,SAAS,EAAET,uBAAuB,CAACE,UAAU;IAC7CQ,aAAa,EAAE,YAAY;IAC3BC,IAAI,EAAEC,MAAM,CAACC,QAAQ,CAACC,IAAI;IAC1BC,SAAS,EAAE,CAAC;IACZC,QAAQ,EAAEV,OAAO,CAACW,WAAW;IAC7BC,eAAe,EAAE,CAAC;IAClBC,eAAe,EAAE,CAAC;IAClBC,YAAY,EAAE,CAAC;IACfC,MAAM,EAAE,SAARA,MAAMA,CAAA,EAAc;MAClB,OAAOvB,MAAM,CAAC,CAAC,CAAC,EAAEU,KAAK,EAAE;QAAEa,MAAM,EAAEC;MAAU,CAAC,CAAC;IACjD;EACF,CAAC,EACDhB,OACF,CAAC;EACD,OAAOE,KAAK;AACd;AAEA,OAAO,SAASD,6CAA6CA,CAAA,EAAG;EAC9D,IAAIgB,MAAM,GAAG,CAAC,CAAC;EACf,IAAIC,MAAM,GAAGpB,WAAW,CAACoB,MAAM;EAE/B,KAAK,IAAIC,GAAG,IAAID,MAAM,EAAE;IACtB,IAAI3B,QAAQ,CAAC2B,MAAM,CAACC,GAAG,CAAC,CAAC,EAAE;MACzB,IAAIC,SAAS,GAAGD,GAAG;MACnB,IAAIE,aAAa,GAAGH,MAAM,CAACE,SAAS,CAAC;MACrCH,MAAM,CAACG,SAAS,CAAC,GACfC,aAAa,KAAK,CAAC,GAAG,CAAC,GAAG/B,eAAe,CAAC+B,aAAa,CAAC;IAC5D;EACF;EACA,OAAOJ,MAAM;AACf","ignoreList":[]}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import { RequestType, initFetchObservable, initXhrObservable, LifeCycleEventType, tryToClone, readBytesFromStream, elapsed, timeStampNow } from '@cloudcare/browser-core';
|
|
2
|
+
import { isAllowedRequestUrl } from './rumEventsCollection/resource/resourceUtils';
|
|
3
|
+
import { startTracer } from './tracing/tracer';
|
|
4
|
+
var nextRequestIndex = 1;
|
|
5
|
+
export function startRequestCollection(lifeCycle, configuration, sessionManager) {
|
|
6
|
+
var tracer = startTracer(configuration, sessionManager);
|
|
7
|
+
trackXhr(lifeCycle, configuration, tracer);
|
|
8
|
+
trackFetch(lifeCycle, configuration, tracer);
|
|
9
|
+
}
|
|
10
|
+
export function trackXhr(lifeCycle, configuration, tracer) {
|
|
11
|
+
var subscription = initXhrObservable().subscribe(function (rawContext) {
|
|
12
|
+
var context = rawContext;
|
|
13
|
+
if (!isAllowedRequestUrl(configuration, context.url)) {
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
switch (context.state) {
|
|
17
|
+
case 'start':
|
|
18
|
+
tracer.traceXhr(context, context.xhr);
|
|
19
|
+
context.requestIndex = getNextRequestIndex();
|
|
20
|
+
lifeCycle.notify(LifeCycleEventType.REQUEST_STARTED, {
|
|
21
|
+
requestIndex: context.requestIndex,
|
|
22
|
+
url: context.url
|
|
23
|
+
});
|
|
24
|
+
break;
|
|
25
|
+
case 'complete':
|
|
26
|
+
tracer.clearTracingIfNeeded(context);
|
|
27
|
+
lifeCycle.notify(LifeCycleEventType.REQUEST_COMPLETED, {
|
|
28
|
+
duration: context.duration,
|
|
29
|
+
method: context.method,
|
|
30
|
+
requestIndex: context.requestIndex,
|
|
31
|
+
spanId: context.spanId,
|
|
32
|
+
startClocks: context.startClocks,
|
|
33
|
+
status: context.status,
|
|
34
|
+
traceId: context.traceId,
|
|
35
|
+
traceSampled: context.traceSampled,
|
|
36
|
+
type: RequestType.XHR,
|
|
37
|
+
url: context.url,
|
|
38
|
+
xhr: context.xhr,
|
|
39
|
+
isAborted: context.isAborted,
|
|
40
|
+
requestHeaderContexts: context.requestHeaderContexts,
|
|
41
|
+
handlingStack: context.handlingStack
|
|
42
|
+
});
|
|
43
|
+
break;
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
return {
|
|
47
|
+
stop: function stop() {
|
|
48
|
+
return subscription.unsubscribe();
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
export function trackFetch(lifeCycle, configuration, tracer) {
|
|
53
|
+
var subscription = initFetchObservable().subscribe(function (rawContext) {
|
|
54
|
+
var context = rawContext;
|
|
55
|
+
if (!isAllowedRequestUrl(configuration, context.url)) {
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
switch (context.state) {
|
|
59
|
+
case 'start':
|
|
60
|
+
tracer.traceFetch(context);
|
|
61
|
+
context.requestIndex = getNextRequestIndex();
|
|
62
|
+
lifeCycle.notify(LifeCycleEventType.REQUEST_STARTED, {
|
|
63
|
+
requestIndex: context.requestIndex,
|
|
64
|
+
url: context.url
|
|
65
|
+
});
|
|
66
|
+
break;
|
|
67
|
+
case 'resolve':
|
|
68
|
+
waitForResponseToComplete(context, function (duration) {
|
|
69
|
+
var _context$init;
|
|
70
|
+
tracer.clearTracingIfNeeded(context);
|
|
71
|
+
lifeCycle.notify(LifeCycleEventType.REQUEST_COMPLETED, {
|
|
72
|
+
duration: duration,
|
|
73
|
+
method: context.method,
|
|
74
|
+
requestIndex: context.requestIndex,
|
|
75
|
+
responseType: context.responseType,
|
|
76
|
+
spanId: context.spanId,
|
|
77
|
+
startClocks: context.startClocks,
|
|
78
|
+
status: context.status,
|
|
79
|
+
traceId: context.traceId,
|
|
80
|
+
traceSampled: context.traceSampled,
|
|
81
|
+
requestHeaderContexts: ((_context$init = context.init) === null || _context$init === void 0 ? void 0 : _context$init.headers) || (context.input instanceof Request ? context.input.headers : undefined),
|
|
82
|
+
type: RequestType.FETCH,
|
|
83
|
+
url: context.url,
|
|
84
|
+
response: context.response,
|
|
85
|
+
init: context.init,
|
|
86
|
+
input: context.input,
|
|
87
|
+
isAborted: context.isAborted,
|
|
88
|
+
handlingStack: context.handlingStack
|
|
89
|
+
});
|
|
90
|
+
});
|
|
91
|
+
break;
|
|
92
|
+
}
|
|
93
|
+
});
|
|
94
|
+
return {
|
|
95
|
+
stop: function stop() {
|
|
96
|
+
return subscription.unsubscribe();
|
|
97
|
+
}
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
function getNextRequestIndex() {
|
|
101
|
+
var result = nextRequestIndex;
|
|
102
|
+
nextRequestIndex += 1;
|
|
103
|
+
return result;
|
|
104
|
+
}
|
|
105
|
+
function waitForResponseToComplete(context, callback) {
|
|
106
|
+
var clonedResponse = context.response && tryToClone(context.response);
|
|
107
|
+
if (!clonedResponse || !clonedResponse.body) {
|
|
108
|
+
// do not try to wait for the response if the clone failed, fetch error or null body
|
|
109
|
+
callback(elapsed(context.startClocks.timeStamp, timeStampNow()));
|
|
110
|
+
} else {
|
|
111
|
+
readBytesFromStream(clonedResponse.body, function () {
|
|
112
|
+
callback(elapsed(context.startClocks.timeStamp, timeStampNow()));
|
|
113
|
+
}, {
|
|
114
|
+
bytesLimit: Number.POSITIVE_INFINITY,
|
|
115
|
+
collectStreamBody: false
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
//# sourceMappingURL=requestCollection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"requestCollection.js","names":["RequestType","initFetchObservable","initXhrObservable","LifeCycleEventType","tryToClone","readBytesFromStream","elapsed","timeStampNow","isAllowedRequestUrl","startTracer","nextRequestIndex","startRequestCollection","lifeCycle","configuration","sessionManager","tracer","trackXhr","trackFetch","subscription","subscribe","rawContext","context","url","state","traceXhr","xhr","requestIndex","getNextRequestIndex","notify","REQUEST_STARTED","clearTracingIfNeeded","REQUEST_COMPLETED","duration","method","spanId","startClocks","status","traceId","traceSampled","type","XHR","isAborted","requestHeaderContexts","handlingStack","stop","unsubscribe","traceFetch","waitForResponseToComplete","_context$init","responseType","init","headers","input","Request","undefined","FETCH","response","result","callback","clonedResponse","body","timeStamp","bytesLimit","Number","POSITIVE_INFINITY","collectStreamBody"],"sources":["../../../rum/src/domain/requestCollection.js"],"sourcesContent":["import {\n RequestType,\n initFetchObservable,\n initXhrObservable,\n LifeCycleEventType,\n tryToClone,\n readBytesFromStream,\n elapsed,\n timeStampNow\n} from '@cloudcare/browser-core'\nimport { isAllowedRequestUrl } from './rumEventsCollection/resource/resourceUtils'\nimport { startTracer } from './tracing/tracer'\n\nvar nextRequestIndex = 1\n\nexport function startRequestCollection(\n lifeCycle,\n configuration,\n sessionManager\n) {\n var tracer = startTracer(configuration, sessionManager)\n trackXhr(lifeCycle, configuration, tracer)\n trackFetch(lifeCycle, configuration, tracer)\n}\n\nexport function trackXhr(lifeCycle, configuration, tracer) {\n var subscription = initXhrObservable().subscribe(function (rawContext) {\n var context = rawContext\n if (!isAllowedRequestUrl(configuration, context.url)) {\n return\n }\n\n switch (context.state) {\n case 'start':\n tracer.traceXhr(context, context.xhr)\n context.requestIndex = getNextRequestIndex()\n\n lifeCycle.notify(LifeCycleEventType.REQUEST_STARTED, {\n requestIndex: context.requestIndex,\n url: context.url\n })\n break\n case 'complete':\n tracer.clearTracingIfNeeded(context)\n lifeCycle.notify(LifeCycleEventType.REQUEST_COMPLETED, {\n duration: context.duration,\n method: context.method,\n requestIndex: context.requestIndex,\n spanId: context.spanId,\n startClocks: context.startClocks,\n status: context.status,\n traceId: context.traceId,\n traceSampled: context.traceSampled,\n type: RequestType.XHR,\n url: context.url,\n xhr: context.xhr,\n isAborted: context.isAborted,\n requestHeaderContexts: context.requestHeaderContexts,\n handlingStack: context.handlingStack\n })\n break\n }\n })\n\n return {\n stop: function () {\n return subscription.unsubscribe()\n }\n }\n}\n\nexport function trackFetch(lifeCycle, configuration, tracer) {\n var subscription = initFetchObservable().subscribe(function (rawContext) {\n var context = rawContext\n if (!isAllowedRequestUrl(configuration, context.url)) {\n return\n }\n\n switch (context.state) {\n case 'start':\n tracer.traceFetch(context)\n context.requestIndex = getNextRequestIndex()\n\n lifeCycle.notify(LifeCycleEventType.REQUEST_STARTED, {\n requestIndex: context.requestIndex,\n url: context.url\n })\n break\n case 'resolve':\n waitForResponseToComplete(context, function (duration) {\n tracer.clearTracingIfNeeded(context)\n lifeCycle.notify(LifeCycleEventType.REQUEST_COMPLETED, {\n duration: duration,\n method: context.method,\n requestIndex: context.requestIndex,\n responseType: context.responseType,\n spanId: context.spanId,\n startClocks: context.startClocks,\n status: context.status,\n traceId: context.traceId,\n traceSampled: context.traceSampled,\n requestHeaderContexts:\n context.init?.headers ||\n (context.input instanceof Request\n ? context.input.headers\n : undefined),\n type: RequestType.FETCH,\n url: context.url,\n response: context.response,\n init: context.init,\n input: context.input,\n isAborted: context.isAborted,\n handlingStack: context.handlingStack\n })\n })\n break\n }\n })\n return {\n stop: function () {\n return subscription.unsubscribe()\n }\n }\n}\n\nfunction getNextRequestIndex() {\n var result = nextRequestIndex\n nextRequestIndex += 1\n return result\n}\n\nfunction waitForResponseToComplete(context, callback) {\n var clonedResponse = context.response && tryToClone(context.response)\n if (!clonedResponse || !clonedResponse.body) {\n // do not try to wait for the response if the clone failed, fetch error or null body\n callback(elapsed(context.startClocks.timeStamp, timeStampNow()))\n } else {\n readBytesFromStream(\n clonedResponse.body,\n function () {\n callback(elapsed(context.startClocks.timeStamp, timeStampNow()))\n },\n {\n bytesLimit: Number.POSITIVE_INFINITY,\n collectStreamBody: false\n }\n )\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { toServerDuration, extend, extend2Lev, ActionType, RumEventType, LifeCycleEventType, UUID, noop, discardNegativeDuration } from '@cloudcare/browser-core';
|
|
2
|
+
import { trackClickActions } from './trackClickActions';
|
|
3
|
+
import { PageState } from '../../contexts/pageStateHistory';
|
|
4
|
+
export function startActionCollection(lifeCycle, domMutationObservable, configuration, pageStateHistory) {
|
|
5
|
+
lifeCycle.subscribe(LifeCycleEventType.AUTO_ACTION_COMPLETED, function (action) {
|
|
6
|
+
lifeCycle.notify(LifeCycleEventType.RAW_RUM_EVENT_COLLECTED, processAction(action, pageStateHistory));
|
|
7
|
+
});
|
|
8
|
+
var actionContexts = {
|
|
9
|
+
findActionId: noop,
|
|
10
|
+
findAllActionId: noop
|
|
11
|
+
};
|
|
12
|
+
if (configuration.trackUserInteractions) {
|
|
13
|
+
actionContexts = trackClickActions(lifeCycle, domMutationObservable, configuration).actionContexts;
|
|
14
|
+
}
|
|
15
|
+
return {
|
|
16
|
+
actionContexts: actionContexts,
|
|
17
|
+
addAction: function addAction(action, savedCommonContext) {
|
|
18
|
+
lifeCycle.notify(LifeCycleEventType.RAW_RUM_EVENT_COLLECTED, extend({
|
|
19
|
+
savedCommonContext: savedCommonContext
|
|
20
|
+
}, processAction(action, pageStateHistory)));
|
|
21
|
+
}
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
function processAction(action, pageStateHistory) {
|
|
25
|
+
var _action$context;
|
|
26
|
+
var autoActionProperties = isAutoAction(action) ? {
|
|
27
|
+
action: {
|
|
28
|
+
error: {
|
|
29
|
+
count: action.counts.errorCount
|
|
30
|
+
},
|
|
31
|
+
id: action.id,
|
|
32
|
+
loadingTime: discardNegativeDuration(toServerDuration(action.duration)),
|
|
33
|
+
frustration: {
|
|
34
|
+
type: action.frustrationTypes
|
|
35
|
+
},
|
|
36
|
+
long_task: {
|
|
37
|
+
count: action.counts.longTaskCount
|
|
38
|
+
},
|
|
39
|
+
resource: {
|
|
40
|
+
count: action.counts.resourceCount
|
|
41
|
+
}
|
|
42
|
+
},
|
|
43
|
+
_gc: {
|
|
44
|
+
action: {
|
|
45
|
+
target: action.target,
|
|
46
|
+
position: action.position
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
} : {
|
|
50
|
+
action: {
|
|
51
|
+
loadingTime: ((_action$context = action.context) === null || _action$context === void 0 ? void 0 : _action$context.duration) || 0
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
var customerContext = !isAutoAction(action) ? action.context : undefined;
|
|
55
|
+
var actionEvent = extend2Lev({
|
|
56
|
+
action: {
|
|
57
|
+
id: UUID(),
|
|
58
|
+
target: {
|
|
59
|
+
name: action.name
|
|
60
|
+
},
|
|
61
|
+
type: action.type
|
|
62
|
+
},
|
|
63
|
+
date: action.startClocks.timeStamp,
|
|
64
|
+
type: RumEventType.ACTION,
|
|
65
|
+
view: {
|
|
66
|
+
in_foreground: pageStateHistory.wasInPageStateAt(PageState.ACTIVE, action.startClocks.relative)
|
|
67
|
+
}
|
|
68
|
+
}, autoActionProperties);
|
|
69
|
+
return {
|
|
70
|
+
customerContext: customerContext,
|
|
71
|
+
rawRumEvent: actionEvent,
|
|
72
|
+
startTime: action.startClocks.relative,
|
|
73
|
+
domainContext: isAutoAction(action) ? {
|
|
74
|
+
event: action.event,
|
|
75
|
+
events: action.events
|
|
76
|
+
} : {}
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
function isAutoAction(action) {
|
|
80
|
+
return action.type === ActionType.CLICK;
|
|
81
|
+
// return action.type !== ActionType.CUSTOM
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=actionCollection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"actionCollection.js","names":["toServerDuration","extend","extend2Lev","ActionType","RumEventType","LifeCycleEventType","UUID","noop","discardNegativeDuration","trackClickActions","PageState","startActionCollection","lifeCycle","domMutationObservable","configuration","pageStateHistory","subscribe","AUTO_ACTION_COMPLETED","action","notify","RAW_RUM_EVENT_COLLECTED","processAction","actionContexts","findActionId","findAllActionId","trackUserInteractions","addAction","savedCommonContext","_action$context","autoActionProperties","isAutoAction","error","count","counts","errorCount","id","loadingTime","duration","frustration","type","frustrationTypes","long_task","longTaskCount","resource","resourceCount","_gc","target","position","context","customerContext","undefined","actionEvent","name","date","startClocks","timeStamp","ACTION","view","in_foreground","wasInPageStateAt","ACTIVE","relative","rawRumEvent","startTime","domainContext","event","events","CLICK"],"sources":["../../../../../rum/src/domain/rumEventsCollection/actions/actionCollection.js"],"sourcesContent":["import {\n toServerDuration,\n extend,\n extend2Lev,\n ActionType,\n RumEventType,\n LifeCycleEventType,\n UUID,\n noop,\n discardNegativeDuration\n} from '@cloudcare/browser-core'\nimport { trackClickActions } from './trackClickActions'\nimport { PageState } from '../../contexts/pageStateHistory'\nexport function startActionCollection(\n lifeCycle,\n domMutationObservable,\n configuration,\n pageStateHistory\n) {\n lifeCycle.subscribe(\n LifeCycleEventType.AUTO_ACTION_COMPLETED,\n function (action) {\n lifeCycle.notify(\n LifeCycleEventType.RAW_RUM_EVENT_COLLECTED,\n processAction(action, pageStateHistory)\n )\n }\n )\n\n var actionContexts = { findActionId: noop, findAllActionId: noop }\n if (configuration.trackUserInteractions) {\n actionContexts = trackClickActions(\n lifeCycle,\n domMutationObservable,\n configuration\n ).actionContexts\n }\n return {\n actionContexts: actionContexts,\n addAction: function (action, savedCommonContext) {\n lifeCycle.notify(\n LifeCycleEventType.RAW_RUM_EVENT_COLLECTED,\n extend(\n { savedCommonContext: savedCommonContext },\n processAction(action, pageStateHistory)\n )\n )\n }\n }\n}\n\nfunction processAction(action, pageStateHistory) {\n var autoActionProperties = isAutoAction(action)\n ? {\n action: {\n error: {\n count: action.counts.errorCount\n },\n id: action.id,\n loadingTime: discardNegativeDuration(\n toServerDuration(action.duration)\n ),\n frustration: {\n type: action.frustrationTypes\n },\n long_task: {\n count: action.counts.longTaskCount\n },\n resource: {\n count: action.counts.resourceCount\n }\n },\n _gc: {\n action: {\n target: action.target,\n position: action.position\n }\n }\n }\n : {\n action: {\n loadingTime: action.context?.duration || 0\n }\n }\n var customerContext = !isAutoAction(action) ? action.context : undefined\n var actionEvent = extend2Lev(\n {\n action: {\n id: UUID(),\n target: {\n name: action.name\n },\n type: action.type\n },\n date: action.startClocks.timeStamp,\n type: RumEventType.ACTION,\n view: {\n in_foreground: pageStateHistory.wasInPageStateAt(\n PageState.ACTIVE,\n action.startClocks.relative\n )\n }\n },\n autoActionProperties\n )\n\n return {\n customerContext: customerContext,\n rawRumEvent: actionEvent,\n startTime: action.startClocks.relative,\n domainContext: isAutoAction(action)\n ? { event: action.event, events: action.events }\n : {}\n }\n}\n\nfunction isAutoAction(action) {\n return action.type === ActionType.CLICK\n // return action.type !== ActionType.CUSTOM\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { ONE_SECOND, every, setTimeout, clearTimeout } from '@cloudcare/browser-core';
|
|
2
|
+
export var MAX_DURATION_BETWEEN_CLICKS = ONE_SECOND;
|
|
3
|
+
export var MAX_DISTANCE_BETWEEN_CLICKS = 100;
|
|
4
|
+
var ClickChainStatus = {
|
|
5
|
+
WaitingForMoreClicks: 0,
|
|
6
|
+
WaitingForClicksToStop: 1,
|
|
7
|
+
Finalized: 2
|
|
8
|
+
};
|
|
9
|
+
export function createClickChain(firstClick, onFinalize) {
|
|
10
|
+
var bufferedClicks = [];
|
|
11
|
+
var status = ClickChainStatus.WaitingForMoreClicks;
|
|
12
|
+
var maxDurationBetweenClicksTimeout;
|
|
13
|
+
appendClick(firstClick);
|
|
14
|
+
function appendClick(click) {
|
|
15
|
+
click.stopObservable.subscribe(tryFinalize);
|
|
16
|
+
bufferedClicks.push(click);
|
|
17
|
+
clearTimeout(maxDurationBetweenClicksTimeout);
|
|
18
|
+
maxDurationBetweenClicksTimeout = setTimeout(dontAcceptMoreClick, MAX_DURATION_BETWEEN_CLICKS);
|
|
19
|
+
}
|
|
20
|
+
function tryFinalize() {
|
|
21
|
+
if (status === ClickChainStatus.WaitingForClicksToStop && every(bufferedClicks, function (click) {
|
|
22
|
+
return click.isStopped();
|
|
23
|
+
})) {
|
|
24
|
+
status = ClickChainStatus.Finalized;
|
|
25
|
+
onFinalize(bufferedClicks);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
function dontAcceptMoreClick() {
|
|
29
|
+
clearTimeout(maxDurationBetweenClicksTimeout);
|
|
30
|
+
if (status === ClickChainStatus.WaitingForMoreClicks) {
|
|
31
|
+
status = ClickChainStatus.WaitingForClicksToStop;
|
|
32
|
+
tryFinalize();
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
return {
|
|
36
|
+
tryAppend: function tryAppend(click) {
|
|
37
|
+
if (status !== ClickChainStatus.WaitingForMoreClicks) {
|
|
38
|
+
return false;
|
|
39
|
+
}
|
|
40
|
+
if (bufferedClicks.length > 0 && !areEventsSimilar(bufferedClicks[bufferedClicks.length - 1].event, click.event)) {
|
|
41
|
+
dontAcceptMoreClick();
|
|
42
|
+
return false;
|
|
43
|
+
}
|
|
44
|
+
appendClick(click);
|
|
45
|
+
return true;
|
|
46
|
+
},
|
|
47
|
+
stop: function stop() {
|
|
48
|
+
dontAcceptMoreClick();
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Checks whether two events are similar by comparing their target, position and timestamp
|
|
55
|
+
*/
|
|
56
|
+
function areEventsSimilar(first, second) {
|
|
57
|
+
return first.target === second.target && mouseEventDistance(first, second) <= MAX_DISTANCE_BETWEEN_CLICKS && second.timeStamp - first.timeStamp <= MAX_DURATION_BETWEEN_CLICKS;
|
|
58
|
+
}
|
|
59
|
+
function mouseEventDistance(origin, other) {
|
|
60
|
+
return Math.sqrt(Math.pow(origin.clientX - other.clientX, 2) + Math.pow(origin.clientY - other.clientY, 2));
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=clickChain.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clickChain.js","names":["ONE_SECOND","every","setTimeout","clearTimeout","MAX_DURATION_BETWEEN_CLICKS","MAX_DISTANCE_BETWEEN_CLICKS","ClickChainStatus","WaitingForMoreClicks","WaitingForClicksToStop","Finalized","createClickChain","firstClick","onFinalize","bufferedClicks","status","maxDurationBetweenClicksTimeout","appendClick","click","stopObservable","subscribe","tryFinalize","push","dontAcceptMoreClick","isStopped","tryAppend","length","areEventsSimilar","event","stop","first","second","target","mouseEventDistance","timeStamp","origin","other","Math","sqrt","pow","clientX","clientY"],"sources":["../../../../../rum/src/domain/rumEventsCollection/actions/clickChain.js"],"sourcesContent":["import {\n ONE_SECOND,\n every,\n setTimeout,\n clearTimeout\n} from '@cloudcare/browser-core'\n\nexport var MAX_DURATION_BETWEEN_CLICKS = ONE_SECOND\nexport var MAX_DISTANCE_BETWEEN_CLICKS = 100\n\nvar ClickChainStatus = {\n WaitingForMoreClicks: 0,\n WaitingForClicksToStop: 1,\n Finalized: 2\n}\n\nexport function createClickChain(firstClick, onFinalize) {\n var bufferedClicks = []\n var status = ClickChainStatus.WaitingForMoreClicks\n var maxDurationBetweenClicksTimeout\n appendClick(firstClick)\n\n function appendClick(click) {\n click.stopObservable.subscribe(tryFinalize)\n bufferedClicks.push(click)\n clearTimeout(maxDurationBetweenClicksTimeout)\n maxDurationBetweenClicksTimeout = setTimeout(\n dontAcceptMoreClick,\n MAX_DURATION_BETWEEN_CLICKS\n )\n }\n\n function tryFinalize() {\n if (\n status === ClickChainStatus.WaitingForClicksToStop &&\n every(bufferedClicks, function (click) {\n return click.isStopped()\n })\n ) {\n status = ClickChainStatus.Finalized\n onFinalize(bufferedClicks)\n }\n }\n\n function dontAcceptMoreClick() {\n clearTimeout(maxDurationBetweenClicksTimeout)\n if (status === ClickChainStatus.WaitingForMoreClicks) {\n status = ClickChainStatus.WaitingForClicksToStop\n tryFinalize()\n }\n }\n\n return {\n tryAppend: function (click) {\n if (status !== ClickChainStatus.WaitingForMoreClicks) {\n return false\n }\n\n if (\n bufferedClicks.length > 0 &&\n !areEventsSimilar(\n bufferedClicks[bufferedClicks.length - 1].event,\n click.event\n )\n ) {\n dontAcceptMoreClick()\n return false\n }\n\n appendClick(click)\n return true\n },\n stop: function () {\n dontAcceptMoreClick()\n }\n }\n}\n\n/**\n * Checks whether two events are similar by comparing their target, position and timestamp\n */\nfunction areEventsSimilar(first, second) {\n return (\n first.target === second.target &&\n mouseEventDistance(first, second) <= MAX_DISTANCE_BETWEEN_CLICKS &&\n second.timeStamp - first.timeStamp <= MAX_DURATION_BETWEEN_CLICKS\n )\n}\n\nfunction mouseEventDistance(origin, other) {\n return Math.sqrt(\n Math.pow(origin.clientX - other.clientX, 2) +\n Math.pow(origin.clientY - other.clientY, 2)\n )\n}\n"],"mappings":"AAAA,SACEA,UAAU,EACVC,KAAK,EACLC,UAAU,EACVC,YAAY,QACP,yBAAyB;AAEhC,OAAO,IAAIC,2BAA2B,GAAGJ,UAAU;AACnD,OAAO,IAAIK,2BAA2B,GAAG,GAAG;AAE5C,IAAIC,gBAAgB,GAAG;EACrBC,oBAAoB,EAAE,CAAC;EACvBC,sBAAsB,EAAE,CAAC;EACzBC,SAAS,EAAE;AACb,CAAC;AAED,OAAO,SAASC,gBAAgBA,CAACC,UAAU,EAAEC,UAAU,EAAE;EACvD,IAAIC,cAAc,GAAG,EAAE;EACvB,IAAIC,MAAM,GAAGR,gBAAgB,CAACC,oBAAoB;EAClD,IAAIQ,+BAA+B;EACnCC,WAAW,CAACL,UAAU,CAAC;EAEvB,SAASK,WAAWA,CAACC,KAAK,EAAE;IAC1BA,KAAK,CAACC,cAAc,CAACC,SAAS,CAACC,WAAW,CAAC;IAC3CP,cAAc,CAACQ,IAAI,CAACJ,KAAK,CAAC;IAC1Bd,YAAY,CAACY,+BAA+B,CAAC;IAC7CA,+BAA+B,GAAGb,UAAU,CAC1CoB,mBAAmB,EACnBlB,2BACF,CAAC;EACH;EAEA,SAASgB,WAAWA,CAAA,EAAG;IACrB,IACEN,MAAM,KAAKR,gBAAgB,CAACE,sBAAsB,IAClDP,KAAK,CAACY,cAAc,EAAE,UAAUI,KAAK,EAAE;MACrC,OAAOA,KAAK,CAACM,SAAS,CAAC,CAAC;IAC1B,CAAC,CAAC,EACF;MACAT,MAAM,GAAGR,gBAAgB,CAACG,SAAS;MACnCG,UAAU,CAACC,cAAc,CAAC;IAC5B;EACF;EAEA,SAASS,mBAAmBA,CAAA,EAAG;IAC7BnB,YAAY,CAACY,+BAA+B,CAAC;IAC7C,IAAID,MAAM,KAAKR,gBAAgB,CAACC,oBAAoB,EAAE;MACpDO,MAAM,GAAGR,gBAAgB,CAACE,sBAAsB;MAChDY,WAAW,CAAC,CAAC;IACf;EACF;EAEA,OAAO;IACLI,SAAS,EAAE,SAAXA,SAASA,CAAYP,KAAK,EAAE;MAC1B,IAAIH,MAAM,KAAKR,gBAAgB,CAACC,oBAAoB,EAAE;QACpD,OAAO,KAAK;MACd;MAEA,IACEM,cAAc,CAACY,MAAM,GAAG,CAAC,IACzB,CAACC,gBAAgB,CACfb,cAAc,CAACA,cAAc,CAACY,MAAM,GAAG,CAAC,CAAC,CAACE,KAAK,EAC/CV,KAAK,CAACU,KACR,CAAC,EACD;QACAL,mBAAmB,CAAC,CAAC;QACrB,OAAO,KAAK;MACd;MAEAN,WAAW,CAACC,KAAK,CAAC;MAClB,OAAO,IAAI;IACb,CAAC;IACDW,IAAI,EAAE,SAANA,IAAIA,CAAA,EAAc;MAChBN,mBAAmB,CAAC,CAAC;IACvB;EACF,CAAC;AACH;;AAEA;AACA;AACA;AACA,SAASI,gBAAgBA,CAACG,KAAK,EAAEC,MAAM,EAAE;EACvC,OACED,KAAK,CAACE,MAAM,KAAKD,MAAM,CAACC,MAAM,IAC9BC,kBAAkB,CAACH,KAAK,EAAEC,MAAM,CAAC,IAAIzB,2BAA2B,IAChEyB,MAAM,CAACG,SAAS,GAAGJ,KAAK,CAACI,SAAS,IAAI7B,2BAA2B;AAErE;AAEA,SAAS4B,kBAAkBA,CAACE,MAAM,EAAEC,KAAK,EAAE;EACzC,OAAOC,IAAI,CAACC,IAAI,CACdD,IAAI,CAACE,GAAG,CAACJ,MAAM,CAACK,OAAO,GAAGJ,KAAK,CAACI,OAAO,EAAE,CAAC,CAAC,GACzCH,IAAI,CAACE,GAAG,CAACJ,MAAM,CAACM,OAAO,GAAGL,KAAK,CAACK,OAAO,EAAE,CAAC,CAC9C,CAAC;AACH","ignoreList":[]}
|