Socket
Socket
Sign inDemoInstall

@datadog/browser-rum-core

Package Overview
Dependencies
Maintainers
1
Versions
179
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@datadog/browser-rum-core - npm Package Compare versions

Comparing version 4.37.0 to 4.38.0

16

cjs/boot/rumPublicApi.js

@@ -10,4 +10,4 @@ "use strict";

var isAlreadyInitialized = false;
var globalContextManager = (0, browser_core_1.createContextManager)();
var userContextManager = (0, browser_core_1.createContextManager)();
var globalContextManager = (0, browser_core_1.createContextManager)("global context" /* CustomerDataType.GlobalContext */);
var userContextManager = (0, browser_core_1.createContextManager)("user" /* CustomerDataType.User */);
var getInternalContextStrategy = function () { return undefined; };

@@ -104,4 +104,6 @@ var getInitConfigurationStrategy = function () { return undefined; };

addActionStrategy({
name: (0, browser_core_1.isExperimentalFeatureEnabled)('sanitize_inputs') ? (0, browser_core_1.sanitize)(name) : name,
context: ((0, browser_core_1.isExperimentalFeatureEnabled)('sanitize_inputs') ? (0, browser_core_1.sanitize)(context) : (0, browser_core_1.deepClone)(context)),
name: (0, browser_core_1.isExperimentalFeatureEnabled)(browser_core_1.ExperimentalFeature.SANITIZE_INPUTS) ? (0, browser_core_1.sanitize)(name) : name,
context: ((0, browser_core_1.isExperimentalFeatureEnabled)(browser_core_1.ExperimentalFeature.SANITIZE_INPUTS)
? (0, browser_core_1.sanitize)(context)
: (0, browser_core_1.deepClone)(context)),
startClocks: (0, browser_core_1.clocksNow)(),

@@ -117,3 +119,3 @@ type: "custom" /* ActionType.CUSTOM */,

handlingStack: handlingStack,
context: ((0, browser_core_1.isExperimentalFeatureEnabled)('sanitize_inputs')
context: ((0, browser_core_1.isExperimentalFeatureEnabled)(browser_core_1.ExperimentalFeature.SANITIZE_INPUTS)
? (0, browser_core_1.sanitize)(context)

@@ -126,3 +128,3 @@ : (0, browser_core_1.deepClone)(context)),

addTiming: (0, browser_core_1.monitor)(function (name, time) {
addTimingStrategy((0, browser_core_1.isExperimentalFeatureEnabled)('sanitize_inputs') ? (0, browser_core_1.sanitize)(name) : name, time);
addTimingStrategy((0, browser_core_1.isExperimentalFeatureEnabled)(browser_core_1.ExperimentalFeature.SANITIZE_INPUTS) ? (0, browser_core_1.sanitize)(name) : name, time);
}),

@@ -154,3 +156,3 @@ setUser: (0, browser_core_1.monitor)(function (newUser) {

addFeatureFlagEvaluation: (0, browser_core_1.monitor)(function (key, value) {
addFeatureFlagEvaluationStrategy((0, browser_core_1.isExperimentalFeatureEnabled)('sanitize_inputs') ? (0, browser_core_1.sanitize)(key) : key, (0, browser_core_1.isExperimentalFeatureEnabled)('sanitize_inputs') ? (0, browser_core_1.sanitize)(value) : value);
addFeatureFlagEvaluationStrategy((0, browser_core_1.isExperimentalFeatureEnabled)(browser_core_1.ExperimentalFeature.SANITIZE_INPUTS) ? (0, browser_core_1.sanitize)(key) : key, (0, browser_core_1.isExperimentalFeatureEnabled)(browser_core_1.ExperimentalFeature.SANITIZE_INPUTS) ? (0, browser_core_1.sanitize)(value) : value);
}),

@@ -157,0 +159,0 @@ });

@@ -48,3 +48,3 @@ "use strict";

},
browser_sdk_version: (0, browser_core_1.canUseEventBridge)() ? "4.37.0" : undefined,
browser_sdk_version: (0, browser_core_1.canUseEventBridge)() ? "4.38.0" : undefined,
},

@@ -51,0 +51,0 @@ application: {

@@ -9,3 +9,3 @@ "use strict";

function getDisplayContext() {
if (!(0, browser_core_1.isExperimentalFeatureEnabled)('clickmap')) {
if (!(0, browser_core_1.isExperimentalFeatureEnabled)(browser_core_1.ExperimentalFeature.CLICKMAP)) {
return;

@@ -12,0 +12,0 @@ }

@@ -5,2 +5,3 @@ import type { RelativeTime, ContextValue, Context } from '@datadog/browser-core';

export declare const FEATURE_FLAG_CONTEXT_TIME_OUT_DELAY: number;
export declare const BYTES_COMPUTATION_THROTTLING_DELAY = 200;
export type FeatureFlagContext = Context;

@@ -7,0 +8,0 @@ export interface FeatureFlagContexts {

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.startFeatureFlagContexts = exports.FEATURE_FLAG_CONTEXT_TIME_OUT_DELAY = void 0;
exports.startFeatureFlagContexts = exports.BYTES_COMPUTATION_THROTTLING_DELAY = exports.FEATURE_FLAG_CONTEXT_TIME_OUT_DELAY = void 0;
var browser_core_1 = require("@datadog/browser-core");
exports.FEATURE_FLAG_CONTEXT_TIME_OUT_DELAY = browser_core_1.SESSION_TIME_OUT_DELAY;
exports.BYTES_COMPUTATION_THROTTLING_DELAY = 200;
/**

@@ -16,3 +17,3 @@ * Start feature flag contexts

if (computeBytesCountImpl === void 0) { computeBytesCountImpl = browser_core_1.computeBytesCount; }
if (!(0, browser_core_1.isExperimentalFeatureEnabled)('feature_flags')) {
if (!(0, browser_core_1.isExperimentalFeatureEnabled)(browser_core_1.ExperimentalFeature.FEATURE_FLAGS)) {
return {

@@ -25,3 +26,4 @@ findFeatureFlagEvaluations: function () { return undefined; },

var featureFlagContexts = new browser_core_1.ContextHistory(exports.FEATURE_FLAG_CONTEXT_TIME_OUT_DELAY);
var bytesCountCache;
var bytesCountCache = 0;
var alreadyWarned = false;
lifeCycle.subscribe(4 /* LifeCycleEventType.VIEW_ENDED */, function (_a) {

@@ -34,4 +36,12 @@ var endClocks = _a.endClocks;

featureFlagContexts.add({}, startClocks.relative);
bytesCountCache = undefined;
bytesCountCache = 0;
});
// Throttle the bytes computation to minimize the impact on performance.
// Especially useful if the user call addFeatureFlagEvaluation API synchronously multiple times in a row
var computeBytesCountThrottled = (0, browser_core_1.throttle)(function (context) {
bytesCountCache = computeBytesCountImpl((0, browser_core_1.jsonStringify)(context));
if (!alreadyWarned) {
alreadyWarned = (0, browser_core_1.warnIfCustomerDataLimitReached)(bytesCountCache, "feature flag evaluation" /* CustomerDataType.FeatureFlag */);
}
}, exports.BYTES_COMPUTATION_THROTTLING_DELAY).throttled;
return {

@@ -44,5 +54,2 @@ findFeatureFlagEvaluations: function (startTime) { return featureFlagContexts.find(startTime); },

}
if (bytesCountCache === undefined) {
bytesCountCache = computeBytesCountImpl((0, browser_core_1.jsonStringify)(currentContext));
}
return bytesCountCache;

@@ -54,3 +61,3 @@ },

currentContext[key] = value;
bytesCountCache = undefined;
computeBytesCountThrottled(currentContext);
}

@@ -57,0 +64,0 @@ },

@@ -134,3 +134,3 @@ "use strict";

var position;
if ((0, browser_core_1.isExperimentalFeatureEnabled)('clickmap')) {
if ((0, browser_core_1.isExperimentalFeatureEnabled)(browser_core_1.ExperimentalFeature.CLICKMAP)) {
var rect = event.target.getBoundingClientRect();

@@ -137,0 +137,0 @@ target = {

@@ -115,3 +115,3 @@ "use strict";

function computeDurationOverrideInfo(computedDuration, performanceEntryDuration) {
if (!(0, browser_core_1.isExperimentalFeatureEnabled)('resource_durations')) {
if (!(0, browser_core_1.isExperimentalFeatureEnabled)(browser_core_1.ExperimentalFeature.RESOURCE_DURATIONS)) {
return;

@@ -146,3 +146,3 @@ }

function computePageStateInfo(pageStateHistory, startClocks, duration) {
if (!(0, browser_core_1.isExperimentalFeatureEnabled)('resource_page_states')) {
if (!(0, browser_core_1.isExperimentalFeatureEnabled)(browser_core_1.ExperimentalFeature.RESOURCE_PAGE_STATES)) {
return;

@@ -149,0 +149,0 @@ }

@@ -1,2 +0,2 @@

import { noop, isExperimentalFeatureEnabled, willSyntheticsInjectRum, assign, BoundedBuffer, buildCookieOptions, createContextManager, deepClone, makePublicApi, monitor, clocksNow, timeStampNow, display, callMonitored, createHandlingStack, canUseEventBridge, areCookiesAuthorized, checkUser, sanitizeUser, sanitize, } from '@datadog/browser-core';
import { ExperimentalFeature, noop, isExperimentalFeatureEnabled, willSyntheticsInjectRum, assign, BoundedBuffer, buildCookieOptions, createContextManager, deepClone, makePublicApi, monitor, clocksNow, timeStampNow, display, callMonitored, createHandlingStack, canUseEventBridge, areCookiesAuthorized, checkUser, sanitizeUser, sanitize, } from '@datadog/browser-core';
import { validateAndBuildRumConfiguration } from '../domain/configuration';

@@ -7,4 +7,4 @@ import { buildCommonContext } from '../domain/contexts/commonContext';

var isAlreadyInitialized = false;
var globalContextManager = createContextManager();
var userContextManager = createContextManager();
var globalContextManager = createContextManager("global context" /* CustomerDataType.GlobalContext */);
var userContextManager = createContextManager("user" /* CustomerDataType.User */);
var getInternalContextStrategy = function () { return undefined; };

@@ -101,4 +101,6 @@ var getInitConfigurationStrategy = function () { return undefined; };

addActionStrategy({
name: isExperimentalFeatureEnabled('sanitize_inputs') ? sanitize(name) : name,
context: (isExperimentalFeatureEnabled('sanitize_inputs') ? sanitize(context) : deepClone(context)),
name: isExperimentalFeatureEnabled(ExperimentalFeature.SANITIZE_INPUTS) ? sanitize(name) : name,
context: (isExperimentalFeatureEnabled(ExperimentalFeature.SANITIZE_INPUTS)
? sanitize(context)
: deepClone(context)),
startClocks: clocksNow(),

@@ -114,3 +116,3 @@ type: "custom" /* ActionType.CUSTOM */,

handlingStack: handlingStack,
context: (isExperimentalFeatureEnabled('sanitize_inputs')
context: (isExperimentalFeatureEnabled(ExperimentalFeature.SANITIZE_INPUTS)
? sanitize(context)

@@ -123,3 +125,3 @@ : deepClone(context)),

addTiming: monitor(function (name, time) {
addTimingStrategy(isExperimentalFeatureEnabled('sanitize_inputs') ? sanitize(name) : name, time);
addTimingStrategy(isExperimentalFeatureEnabled(ExperimentalFeature.SANITIZE_INPUTS) ? sanitize(name) : name, time);
}),

@@ -151,3 +153,3 @@ setUser: monitor(function (newUser) {

addFeatureFlagEvaluation: monitor(function (key, value) {
addFeatureFlagEvaluationStrategy(isExperimentalFeatureEnabled('sanitize_inputs') ? sanitize(key) : key, isExperimentalFeatureEnabled('sanitize_inputs') ? sanitize(value) : value);
addFeatureFlagEvaluationStrategy(isExperimentalFeatureEnabled(ExperimentalFeature.SANITIZE_INPUTS) ? sanitize(key) : key, isExperimentalFeatureEnabled(ExperimentalFeature.SANITIZE_INPUTS) ? sanitize(value) : value);
}),

@@ -154,0 +156,0 @@ });

@@ -45,3 +45,3 @@ import { combine, isEmptyObject, limitModification, timeStampNow, currentDrift, display, createEventRateLimiter, canUseEventBridge, } from '@datadog/browser-core';

},
browser_sdk_version: canUseEventBridge() ? "4.37.0" : undefined,
browser_sdk_version: canUseEventBridge() ? "4.38.0" : undefined,
},

@@ -48,0 +48,0 @@ application: {

@@ -1,2 +0,2 @@

import { isExperimentalFeatureEnabled } from '@datadog/browser-core';
import { ExperimentalFeature, isExperimentalFeatureEnabled } from '@datadog/browser-core';
import { getViewportDimension, initViewportObservable } from '../../browser/viewportObservable';

@@ -6,3 +6,3 @@ var viewport;

export function getDisplayContext() {
if (!isExperimentalFeatureEnabled('clickmap')) {
if (!isExperimentalFeatureEnabled(ExperimentalFeature.CLICKMAP)) {
return;

@@ -9,0 +9,0 @@ }

@@ -5,2 +5,3 @@ import type { RelativeTime, ContextValue, Context } from '@datadog/browser-core';

export declare const FEATURE_FLAG_CONTEXT_TIME_OUT_DELAY: number;
export declare const BYTES_COMPUTATION_THROTTLING_DELAY = 200;
export type FeatureFlagContext = Context;

@@ -7,0 +8,0 @@ export interface FeatureFlagContexts {

@@ -1,3 +0,4 @@

import { jsonStringify, computeBytesCount, noop, isExperimentalFeatureEnabled, SESSION_TIME_OUT_DELAY, ContextHistory, } from '@datadog/browser-core';
import { warnIfCustomerDataLimitReached, throttle, jsonStringify, computeBytesCount, noop, isExperimentalFeatureEnabled, SESSION_TIME_OUT_DELAY, ContextHistory, ExperimentalFeature, } from '@datadog/browser-core';
export var FEATURE_FLAG_CONTEXT_TIME_OUT_DELAY = SESSION_TIME_OUT_DELAY;
export var BYTES_COMPUTATION_THROTTLING_DELAY = 200;
/**

@@ -13,3 +14,3 @@ * Start feature flag contexts

if (computeBytesCountImpl === void 0) { computeBytesCountImpl = computeBytesCount; }
if (!isExperimentalFeatureEnabled('feature_flags')) {
if (!isExperimentalFeatureEnabled(ExperimentalFeature.FEATURE_FLAGS)) {
return {

@@ -22,3 +23,4 @@ findFeatureFlagEvaluations: function () { return undefined; },

var featureFlagContexts = new ContextHistory(FEATURE_FLAG_CONTEXT_TIME_OUT_DELAY);
var bytesCountCache;
var bytesCountCache = 0;
var alreadyWarned = false;
lifeCycle.subscribe(4 /* LifeCycleEventType.VIEW_ENDED */, function (_a) {

@@ -31,4 +33,12 @@ var endClocks = _a.endClocks;

featureFlagContexts.add({}, startClocks.relative);
bytesCountCache = undefined;
bytesCountCache = 0;
});
// Throttle the bytes computation to minimize the impact on performance.
// Especially useful if the user call addFeatureFlagEvaluation API synchronously multiple times in a row
var computeBytesCountThrottled = throttle(function (context) {
bytesCountCache = computeBytesCountImpl(jsonStringify(context));
if (!alreadyWarned) {
alreadyWarned = warnIfCustomerDataLimitReached(bytesCountCache, "feature flag evaluation" /* CustomerDataType.FeatureFlag */);
}
}, BYTES_COMPUTATION_THROTTLING_DELAY).throttled;
return {

@@ -41,5 +51,2 @@ findFeatureFlagEvaluations: function (startTime) { return featureFlagContexts.find(startTime); },

}
if (bytesCountCache === undefined) {
bytesCountCache = computeBytesCountImpl(jsonStringify(currentContext));
}
return bytesCountCache;

@@ -51,3 +58,3 @@ },

currentContext[key] = value;
bytesCountCache = undefined;
computeBytesCountThrottled(currentContext);
}

@@ -54,0 +61,0 @@ },

@@ -1,2 +0,2 @@

import { includes, timeStampNow, isExperimentalFeatureEnabled, Observable, assign, getRelativeTime, ONE_MINUTE, ContextHistory, generateUUID, clocksNow, ONE_SECOND, elapsed, } from '@datadog/browser-core';
import { includes, timeStampNow, isExperimentalFeatureEnabled, Observable, assign, getRelativeTime, ONE_MINUTE, ContextHistory, generateUUID, clocksNow, ONE_SECOND, elapsed, ExperimentalFeature, } from '@datadog/browser-core';
import { trackEventCounts } from '../../trackEventCounts';

@@ -130,3 +130,3 @@ import { PAGE_ACTIVITY_VALIDATION_DELAY, waitPageActivityEnd } from '../../waitPageActivityEnd';

var position;
if (isExperimentalFeatureEnabled('clickmap')) {
if (isExperimentalFeatureEnabled(ExperimentalFeature.CLICKMAP)) {
var rect = event.target.getBoundingClientRect();

@@ -133,0 +133,0 @@ target = {

@@ -1,2 +0,2 @@

import { combine, generateUUID, toServerDuration, relativeToClocks, assign, isNumber, isExperimentalFeatureEnabled, } from '@datadog/browser-core';
import { combine, generateUUID, toServerDuration, relativeToClocks, assign, isNumber, isExperimentalFeatureEnabled, ExperimentalFeature, } from '@datadog/browser-core';
import { matchRequestTiming } from './matchRequestTiming';

@@ -111,3 +111,3 @@ import { computePerformanceResourceDetails, computePerformanceResourceDuration, computeResourceKind, computeSize, isRequestKind, } from './resourceUtils';

function computeDurationOverrideInfo(computedDuration, performanceEntryDuration) {
if (!isExperimentalFeatureEnabled('resource_durations')) {
if (!isExperimentalFeatureEnabled(ExperimentalFeature.RESOURCE_DURATIONS)) {
return;

@@ -142,3 +142,3 @@ }

function computePageStateInfo(pageStateHistory, startClocks, duration) {
if (!isExperimentalFeatureEnabled('resource_page_states')) {
if (!isExperimentalFeatureEnabled(ExperimentalFeature.RESOURCE_PAGE_STATES)) {
return;

@@ -145,0 +145,0 @@ }

{
"name": "@datadog/browser-rum-core",
"version": "4.37.0",
"version": "4.38.0",
"license": "Apache-2.0",

@@ -15,3 +15,3 @@ "main": "cjs/index.js",

"dependencies": {
"@datadog/browser-core": "4.37.0"
"@datadog/browser-core": "4.38.0"
},

@@ -29,3 +29,3 @@ "devDependencies": {

},
"gitHead": "058831610a12a72ff5e650e47a6ce8cfe9e20012"
"gitHead": "61ff7fdf8c51ea1bb789cb3d865ad094bfcdcf71"
}
import type { RelativeTime, TimeStamp, Context } from '@datadog/browser-core'
import { ONE_SECOND, getTimeStamp, display, DefaultPrivacyLevel } from '@datadog/browser-core'
import { cleanupSyntheticsWorkerValues, mockSyntheticsWorkerValues } from '../../../core/test/syntheticsWorkerValues'
import { initEventBridgeStub, deleteEventBridgeStub } from '../../../core/test/specHelper'
import type { TestSetupBuilder } from '../../test/testSetupBuilder'
import { setup } from '../../test/testSetupBuilder'
import {
initEventBridgeStub,
deleteEventBridgeStub,
cleanupSyntheticsWorkerValues,
mockSyntheticsWorkerValues,
} from '@datadog/browser-core/test'
import type { TestSetupBuilder } from '../../test'
import { setup, noopRecorderApi } from '../../test'
import type { HybridInitConfiguration, RumInitConfiguration } from '../domain/configuration'
import { ActionType } from '../rawRumEvent.types'
import { noopRecorderApi } from '../../test/noopRecorderApi'
import type { RumPublicApi, StartRum, RecorderApi } from './rumPublicApi'

@@ -11,0 +14,0 @@ import { makeRumPublicApi } from './rumPublicApi'

import type { Context, InitConfiguration, TimeStamp, RelativeTime, User } from '@datadog/browser-core'
import {
ExperimentalFeature,
noop,
isExperimentalFeatureEnabled,
CustomerDataType,
willSyntheticsInjectRum,

@@ -64,4 +66,4 @@ assign,

const globalContextManager = createContextManager()
const userContextManager = createContextManager()
const globalContextManager = createContextManager(CustomerDataType.GlobalContext)
const userContextManager = createContextManager(CustomerDataType.User)

@@ -208,4 +210,6 @@ let getInternalContextStrategy: StartRumResult['getInternalContext'] = () => undefined

addActionStrategy({
name: isExperimentalFeatureEnabled('sanitize_inputs') ? sanitize(name)! : name,
context: (isExperimentalFeatureEnabled('sanitize_inputs') ? sanitize(context) : deepClone(context)) as Context,
name: isExperimentalFeatureEnabled(ExperimentalFeature.SANITIZE_INPUTS) ? sanitize(name)! : name,
context: (isExperimentalFeatureEnabled(ExperimentalFeature.SANITIZE_INPUTS)
? sanitize(context)
: deepClone(context)) as Context,
startClocks: clocksNow(),

@@ -222,3 +226,3 @@ type: ActionType.CUSTOM,

handlingStack,
context: (isExperimentalFeatureEnabled('sanitize_inputs')
context: (isExperimentalFeatureEnabled(ExperimentalFeature.SANITIZE_INPUTS)
? sanitize(context)

@@ -233,3 +237,3 @@ : deepClone(context)) as Context,

addTimingStrategy(
isExperimentalFeatureEnabled('sanitize_inputs') ? sanitize(name)! : name,
isExperimentalFeatureEnabled(ExperimentalFeature.SANITIZE_INPUTS) ? sanitize(name)! : name,
time as RelativeTime | TimeStamp | undefined

@@ -272,4 +276,4 @@ )

addFeatureFlagEvaluationStrategy(
isExperimentalFeatureEnabled('sanitize_inputs') ? sanitize(key)! : key,
isExperimentalFeatureEnabled('sanitize_inputs') ? sanitize(value) : value
isExperimentalFeatureEnabled(ExperimentalFeature.SANITIZE_INPUTS) ? sanitize(key)! : key,
isExperimentalFeatureEnabled(ExperimentalFeature.SANITIZE_INPUTS) ? sanitize(value) : value
)

@@ -276,0 +280,0 @@ }),

import type { RelativeTime, Observable, RawError, Duration } from '@datadog/browser-core'
import {
CustomerDataType,
createContextManager,

@@ -12,7 +13,5 @@ stopSessionManager,

} from '@datadog/browser-core'
import { createNewEvent, interceptRequests } from '../../../core/test/specHelper'
import type { RumSessionManagerMock } from '../../test/mockRumSessionManager'
import { createRumSessionManagerMock } from '../../test/mockRumSessionManager'
import type { TestSetupBuilder } from '../../test/testSetupBuilder'
import { setup } from '../../test/testSetupBuilder'
import { createNewEvent, interceptRequests } from '@datadog/browser-core/test'
import type { RumSessionManagerMock, TestSetupBuilder } from '../../test'
import { createRumSessionManagerMock, noopRecorderApi, setup } from '../../test'
import type { RumPerformanceNavigationTiming, RumPerformanceEntry } from '../browser/performanceCollection'

@@ -30,3 +29,2 @@ import type { LifeCycle } from '../domain/lifeCycle'

import { startFeatureFlagContexts } from '../domain/contexts/featureFlagContext'
import { noopRecorderApi } from '../../test/noopRecorderApi'
import { startRum, startRumEventCollection } from './startRum'

@@ -310,4 +308,4 @@

noopRecorderApi,
createContextManager(),
createContextManager()
createContextManager(CustomerDataType.GlobalContext),
createContextManager(CustomerDataType.User)
)

@@ -314,0 +312,0 @@ })

import { isIE } from '@datadog/browser-core'
import { stubZoneJs } from '../../../core/test/stubZoneJs'
import { stubZoneJs } from '@datadog/browser-core/test'
import { createDOMMutationObservable, getMutationObserverConstructor } from './domMutationObservable'

@@ -4,0 +4,0 @@

import type { Observable, Subscription } from '@datadog/browser-core'
import { mockLocation } from '../../../core/test/specHelper'
import { mockLocation } from '@datadog/browser-core/test'
import type { LocationChange } from './locationChangeObservable'

@@ -4,0 +4,0 @@ import { createLocationChangeObservable } from './locationChangeObservable'

@@ -1,3 +0,3 @@

import type { TestSetupBuilder } from '../../test/testSetupBuilder'
import { setup } from '../../test/testSetupBuilder'
import type { TestSetupBuilder } from '../../test'
import { setup } from '../../test'
import { retrieveInitialDocumentResourceTiming, startPerformanceCollection } from './performanceCollection'

@@ -4,0 +4,0 @@

@@ -1,4 +0,4 @@

import type { Clock } from '@datadog/browser-core/test/specHelper'
import { createNewEvent, mockClock } from '@datadog/browser-core/test/specHelper'
import type { Subscription } from '@datadog/browser-core/src/tools/observable'
import type { Clock } from '@datadog/browser-core/test'
import { mockClock, createNewEvent } from '@datadog/browser-core/test'
import type { ViewportDimension } from './viewportObservable'

@@ -5,0 +5,0 @@ import { getViewportDimension, initViewportObservable } from './viewportObservable'

import type { RelativeTime } from '@datadog/browser-core'
import { ErrorSource, ONE_MINUTE, display } from '@datadog/browser-core'
import { createRumSessionManagerMock } from '../../test/mockRumSessionManager'
import { createRawRumEvent } from '../../test/fixtures'
import type { TestSetupBuilder } from '../../test/testSetupBuilder'
import { setup } from '../../test/testSetupBuilder'
import {
initEventBridgeStub,
deleteEventBridgeStub,
cleanupSyntheticsWorkerValues,
mockSyntheticsWorkerValues,
} from '@datadog/browser-core/test'
import type { TestSetupBuilder } from '../../test'
import {
createRumSessionManagerMock,
mockCiVisibilityWindowValues,
setup,
createRawRumEvent,
cleanupCiVisibilityWindowValues,
} from '../../test'
import type { RumEventDomainContext } from '../domainContext.types'

@@ -11,5 +21,2 @@ import type { RawRumActionEvent, RawRumErrorEvent, RawRumEvent } from '../rawRumEvent.types'

import type { RumActionEvent, RumErrorEvent, RumEvent } from '../rumEvent.types'
import { initEventBridgeStub, deleteEventBridgeStub } from '../../../core/test/specHelper'
import { cleanupSyntheticsWorkerValues, mockSyntheticsWorkerValues } from '../../../core/test/syntheticsWorkerValues'
import { cleanupCiVisibilityWindowValues, mockCiVisibilityWindowValues } from '../../test/mockCiVisibilityWindowValues'
import { startRumAssembly } from './assembly'

@@ -16,0 +23,0 @@ import type { LifeCycle, RawRumEventCollectedData } from './lifeCycle'

@@ -1,5 +0,2 @@

import {
cleanupCiVisibilityWindowValues,
mockCiVisibilityWindowValues,
} from '../../../test/mockCiVisibilityWindowValues'
import { cleanupCiVisibilityWindowValues, mockCiVisibilityWindowValues } from '../../../test'
import { getCiTestContext } from './ciTestContext'

@@ -6,0 +3,0 @@

import type { Context, ContextManager } from '@datadog/browser-core'
import { createContextManager } from '@datadog/browser-core'
import { createContextManager, CustomerDataType } from '@datadog/browser-core'
import type { RecorderApi } from '../../boot/rumPublicApi'
import { noopRecorderApi } from '../../../test/noopRecorderApi'
import { noopRecorderApi } from '../../../test'
import type { CommonContext } from './commonContext'

@@ -16,4 +16,4 @@ import { buildCommonContext as buildCommonContextImpl } from './commonContext'

fakeContext = { foo: 'bar' }
const globalContextManager: ContextManager = createContextManager()
const userContextManager: ContextManager = createContextManager()
const globalContextManager: ContextManager = createContextManager(CustomerDataType.GlobalContext)
const userContextManager: ContextManager = createContextManager(CustomerDataType.User)
spyOn(globalContextManager, 'getContext').and.callFake(() => fakeContext)

@@ -20,0 +20,0 @@ spyOn(userContextManager, 'getContext').and.callFake(() => fakeContext)

@@ -1,2 +0,2 @@

import { resetExperimentalFeatures, updateExperimentalFeatures } from '@datadog/browser-core'
import { ExperimentalFeature, resetExperimentalFeatures, addExperimentalFeatures } from '@datadog/browser-core'
import { getDisplayContext, resetDisplayContext } from './displayContext'

@@ -11,3 +11,3 @@

it('should return current display context when ff enabled', () => {
updateExperimentalFeatures(['clickmap'])
addExperimentalFeatures([ExperimentalFeature.CLICKMAP])

@@ -14,0 +14,0 @@ expect(getDisplayContext()).toEqual({

@@ -1,2 +0,2 @@

import { isExperimentalFeatureEnabled } from '@datadog/browser-core'
import { ExperimentalFeature, isExperimentalFeatureEnabled } from '@datadog/browser-core'
import { getViewportDimension, initViewportObservable } from '../../browser/viewportObservable'

@@ -8,3 +8,3 @@

export function getDisplayContext() {
if (!isExperimentalFeatureEnabled('clickmap')) {
if (!isExperimentalFeatureEnabled(ExperimentalFeature.CLICKMAP)) {
return

@@ -11,0 +11,0 @@ }

import type { RelativeTime } from '@datadog/browser-core'
import { resetExperimentalFeatures, updateExperimentalFeatures, relativeToClocks } from '@datadog/browser-core'
import type { TestSetupBuilder } from '../../../test/testSetupBuilder'
import { setup } from '../../../test/testSetupBuilder'
import {
display,
ExperimentalFeature,
resetExperimentalFeatures,
addExperimentalFeatures,
relativeToClocks,
} from '@datadog/browser-core'
import { CUSTOMER_DATA_BYTES_LIMIT } from '../../../../core/src/tools/heavyCustomerDataWarning'
import type { TestSetupBuilder } from '../../../test'
import { setup } from '../../../test'
import type { Clock } from '../../../../core/test'
import type { LifeCycle } from '../lifeCycle'
import { LifeCycleEventType } from '../lifeCycle'
import type { ViewCreatedEvent, ViewEndedEvent } from '../rumEventsCollection/view/trackViews'
import type { FeatureFlagContexts } from './featureFlagContext'
import { startFeatureFlagContexts } from './featureFlagContext'
import { BYTES_COMPUTATION_THROTTLING_DELAY, startFeatureFlagContexts } from './featureFlagContext'

@@ -14,6 +23,9 @@ describe('featureFlagContexts', () => {

let computeBytesCountStub: jasmine.Spy
let displaySpy: jasmine.Spy<typeof display.warn>
let fakeBytesCount = 1
beforeEach(() => {
displaySpy = spyOn(display, 'warn')
setupBuilder = setup().beforeBuild(({ lifeCycle }) => {
computeBytesCountStub = jasmine.createSpy('computeBytesCountStub').and.returnValue(1)
computeBytesCountStub = jasmine.createSpy('computeBytesCountStub').and.callFake(() => fakeBytesCount)
featureFlagContexts = startFeatureFlagContexts(lifeCycle, computeBytesCountStub)

@@ -36,3 +48,3 @@ })

it('should add feature flag evaluations of any type when the ff feature_flags is enabled', () => {
updateExperimentalFeatures(['feature_flags'])
addExperimentalFeatures([ExperimentalFeature.FEATURE_FLAGS])

@@ -61,3 +73,3 @@ const { lifeCycle } = setupBuilder.build()

it('should replace existing feature flag evaluation to the current context when the ff feature_flags is enabled', () => {
updateExperimentalFeatures(['feature_flags'])
addExperimentalFeatures([ExperimentalFeature.FEATURE_FLAGS])

@@ -92,2 +104,20 @@ const { lifeCycle } = setupBuilder.build()

})
it('should warn once if the context bytes limit is reached', () => {
addExperimentalFeatures([ExperimentalFeature.FEATURE_FLAGS])
const { lifeCycle, clock } = setupBuilder.withFakeClock().build()
fakeBytesCount = CUSTOMER_DATA_BYTES_LIMIT + 1
lifeCycle.notify(LifeCycleEventType.VIEW_CREATED, {
startClocks: relativeToClocks(0 as RelativeTime),
} as ViewCreatedEvent)
featureFlagContexts.addFeatureFlagEvaluation('feature', 'foo')
clock.tick(BYTES_COMPUTATION_THROTTLING_DELAY)
featureFlagContexts.addFeatureFlagEvaluation('feature2', 'foo')
clock.tick(BYTES_COMPUTATION_THROTTLING_DELAY)
expect(displaySpy).toHaveBeenCalledTimes(1)
})
})

@@ -101,3 +131,3 @@

it('should return undefined when no current view', () => {
updateExperimentalFeatures(['feature_flags'])
addExperimentalFeatures([ExperimentalFeature.FEATURE_FLAGS])

@@ -110,3 +140,3 @@ setupBuilder.build()

it('should clear feature flag context on new view', () => {
updateExperimentalFeatures(['feature_flags'])
addExperimentalFeatures([ExperimentalFeature.FEATURE_FLAGS])

@@ -131,3 +161,3 @@ const { lifeCycle } = setupBuilder.build()

it('should return the feature flag context corresponding to the start time', () => {
updateExperimentalFeatures(['feature_flags'])
addExperimentalFeatures([ExperimentalFeature.FEATURE_FLAGS])

@@ -157,14 +187,19 @@ const { lifeCycle, clock } = setupBuilder.withFakeClock().build()

describe('getFeatureFlagBytesCount', () => {
it('should compute the bytes count only if the context has been updated', () => {
updateExperimentalFeatures(['feature_flags'])
const { lifeCycle } = setupBuilder.withFakeClock().build()
describe('bytes count computation', () => {
let clock: Clock
let lifeCycle: LifeCycle
beforeEach(() => {
addExperimentalFeatures([ExperimentalFeature.FEATURE_FLAGS])
;({ clock, lifeCycle } = setupBuilder.withFakeClock().build())
lifeCycle.notify(LifeCycleEventType.VIEW_CREATED, {
startClocks: relativeToClocks(0 as RelativeTime),
} as ViewCreatedEvent)
})
it('should be done each time the context is updated', () => {
featureFlagContexts.addFeatureFlagEvaluation('feature1', 'foo')
featureFlagContexts.getFeatureFlagBytesCount()
clock.tick(BYTES_COMPUTATION_THROTTLING_DELAY)
featureFlagContexts.addFeatureFlagEvaluation('feature2', 'bar')
featureFlagContexts.getFeatureFlagBytesCount()
clock.tick(BYTES_COMPUTATION_THROTTLING_DELAY)

@@ -175,9 +210,17 @@ // feature flags are cleared when a view is created

} as ViewCreatedEvent)
featureFlagContexts.getFeatureFlagBytesCount()
const bytesCount = featureFlagContexts.getFeatureFlagBytesCount()
expect(bytesCount).toEqual(1)
expect(computeBytesCountStub).toHaveBeenCalledTimes(3)
expect(bytesCount).toEqual(0)
expect(computeBytesCountStub).toHaveBeenCalledTimes(2)
})
it('should be throttled to minimize the impact on performance', () => {
featureFlagContexts.addFeatureFlagEvaluation('feature1', 'foo') // leading call executed synchronously
featureFlagContexts.addFeatureFlagEvaluation('feature2', 'bar') // ignored
featureFlagContexts.addFeatureFlagEvaluation('feature3', 'baz') // trailing call executed after BYTES_COMPUTATION_THROTTLING_DELAY
clock.tick(BYTES_COMPUTATION_THROTTLING_DELAY)
expect(computeBytesCountStub).toHaveBeenCalledTimes(2)
})
})
})
import type { RelativeTime, ContextValue, Context } from '@datadog/browser-core'
import {
CustomerDataType,
warnIfCustomerDataLimitReached,
throttle,
jsonStringify,

@@ -9,2 +12,3 @@ computeBytesCount,

ContextHistory,
ExperimentalFeature,
} from '@datadog/browser-core'

@@ -15,2 +19,3 @@ import type { LifeCycle } from '../lifeCycle'

export const FEATURE_FLAG_CONTEXT_TIME_OUT_DELAY = SESSION_TIME_OUT_DELAY
export const BYTES_COMPUTATION_THROTTLING_DELAY = 200

@@ -37,3 +42,3 @@ export type FeatureFlagContext = Context

): FeatureFlagContexts {
if (!isExperimentalFeatureEnabled('feature_flags')) {
if (!isExperimentalFeatureEnabled(ExperimentalFeature.FEATURE_FLAGS)) {
return {

@@ -47,3 +52,4 @@ findFeatureFlagEvaluations: () => undefined,

const featureFlagContexts = new ContextHistory<FeatureFlagContext>(FEATURE_FLAG_CONTEXT_TIME_OUT_DELAY)
let bytesCountCache: number | undefined
let bytesCountCache = 0
let alreadyWarned = false

@@ -56,5 +62,14 @@ lifeCycle.subscribe(LifeCycleEventType.VIEW_ENDED, ({ endClocks }) => {

featureFlagContexts.add({}, startClocks.relative)
bytesCountCache = undefined
bytesCountCache = 0
})
// Throttle the bytes computation to minimize the impact on performance.
// Especially useful if the user call addFeatureFlagEvaluation API synchronously multiple times in a row
const { throttled: computeBytesCountThrottled } = throttle((context: Context) => {
bytesCountCache = computeBytesCountImpl(jsonStringify(context)!)
if (!alreadyWarned) {
alreadyWarned = warnIfCustomerDataLimitReached(bytesCountCache, CustomerDataType.FeatureFlag)
}
}, BYTES_COMPUTATION_THROTTLING_DELAY)
return {

@@ -68,5 +83,2 @@ findFeatureFlagEvaluations: (startTime?: RelativeTime) => featureFlagContexts.find(startTime),

if (bytesCountCache === undefined) {
bytesCountCache = computeBytesCountImpl(jsonStringify(currentContext)!)
}
return bytesCountCache

@@ -78,3 +90,3 @@ },

currentContext[key] = value
bytesCountCache = undefined
computeBytesCountThrottled(currentContext)
}

@@ -81,0 +93,0 @@ },

import type { RelativeTime, Duration, ServerDuration } from '@datadog/browser-core'
import { relativeNow } from '@datadog/browser-core'
import type { TestSetupBuilder } from '../../../test/testSetupBuilder'
import { setup } from '../../../test/testSetupBuilder'
import type { TestSetupBuilder } from '../../../test'
import { setup } from '../../../test'
import type { ForegroundContexts } from './foregroundContexts'

@@ -61,3 +61,3 @@ import {

describe('with two closed focus period & one active one', () => {
/*
/*
events F B F B F

@@ -64,0 +64,0 @@ periods <------> <-------> <---- - - -

import type { RelativeTime } from '@datadog/browser-core'
import { createRumSessionManagerMock } from '../../../test/mockRumSessionManager'
import type { TestSetupBuilder } from '../../../test/testSetupBuilder'
import { setup } from '../../../test/testSetupBuilder'
import { createRumSessionManagerMock, setup } from '../../../test'
import type { TestSetupBuilder } from '../../../test'
import type { ActionContexts } from '../rumEventsCollection/action/actionCollection'

@@ -6,0 +5,0 @@ import type { RumSessionManager } from '../rumSessionManager'

import type { RelativeTime } from '@datadog/browser-core'
import { resetExperimentalFeatures } from '@datadog/browser-core'
import type { TestSetupBuilder } from 'packages/rum-core/test/testSetupBuilder'
import { setup } from '../../../test/testSetupBuilder'
import type { TestSetupBuilder } from '../../../test'
import { setup } from '../../../test'
import type { PageStateHistory } from './pageStateHistory'

@@ -6,0 +6,0 @@ import { resetPageStates, startPageStateHistory, addPageState, PageState } from './pageStateHistory'

@@ -1,2 +0,2 @@

import { cleanupSyntheticsWorkerValues, mockSyntheticsWorkerValues } from '../../../../core/test/syntheticsWorkerValues'
import { cleanupSyntheticsWorkerValues, mockSyntheticsWorkerValues } from '../../../../core/test'
import { getSyntheticsContext } from './syntheticsContext'

@@ -3,0 +3,0 @@

import type { RelativeTime } from '@datadog/browser-core'
import { relativeToClocks } from '@datadog/browser-core'
import type { TestSetupBuilder } from '../../../test/testSetupBuilder'
import { setup } from '../../../test/testSetupBuilder'
import type { TestSetupBuilder } from '../../../test'
import { setup } from '../../../test'
import { LifeCycleEventType } from '../lifeCycle'

@@ -6,0 +6,0 @@ import type { ViewCreatedEvent, ViewEndedEvent } from '../rumEventsCollection/view/trackViews'

import type { RelativeTime } from '@datadog/browser-core'
import { relativeToClocks, CLEAR_OLD_CONTEXTS_INTERVAL } from '@datadog/browser-core'
import type { TestSetupBuilder } from '../../../test/testSetupBuilder'
import { setup } from '../../../test/testSetupBuilder'
import type { TestSetupBuilder } from '../../../test'
import { setup } from '../../../test'
import { LifeCycleEventType } from '../lifeCycle'

@@ -6,0 +6,0 @@ import type { ViewCreatedEvent } from '../rumEventsCollection/view/trackViews'

import { isIE, RequestType } from '@datadog/browser-core'
import type { FetchStub, FetchStubManager } from '../../../core/test/specHelper'
import { SPEC_ENDPOINTS, stubFetch, stubXhr, withXhr } from '../../../core/test/specHelper'
import type { FetchStub, FetchStubManager } from '@datadog/browser-core/test'
import { SPEC_ENDPOINTS, stubFetch, stubXhr, withXhr } from '@datadog/browser-core/test'
import type { RumConfiguration } from './configuration'

@@ -5,0 +5,0 @@ import { validateAndBuildRumConfiguration } from './configuration'

import type { Duration, RelativeTime, ServerDuration, TimeStamp } from '@datadog/browser-core'
import { createNewEvent } from '../../../../../core/test/specHelper'
import type { TestSetupBuilder } from '../../../../test/testSetupBuilder'
import { setup } from '../../../../test/testSetupBuilder'
import { createNewEvent } from '@datadog/browser-core/test'
import type { TestSetupBuilder } from '../../../../test'
import { setup } from '../../../../test'
import { RumEventType, ActionType } from '../../../rawRumEvent.types'

@@ -6,0 +6,0 @@ import { LifeCycleEventType } from '../../lifeCycle'

@@ -1,4 +0,4 @@

import type { Clock } from '@datadog/browser-core/test/specHelper'
import { mockClock } from '@datadog/browser-core/test/specHelper'
import { createFakeClick } from '../../../../test/createFakeClick'
import type { Clock } from '@datadog/browser-core/test'
import { mockClock } from '@datadog/browser-core/test'
import { createFakeClick } from '../../../../test'
import type { ClickChain } from './clickChain'

@@ -5,0 +5,0 @@ import { MAX_DISTANCE_BETWEEN_CLICKS, MAX_DURATION_BETWEEN_CLICKS, createClickChain } from './clickChain'

import { ONE_SECOND } from '@datadog/browser-core'
import type { Clock } from '@datadog/browser-core/test'
import { mockClock } from '@datadog/browser-core/test'
import { FrustrationType } from '../../../rawRumEvent.types'
import type { Clock } from '../../../../../core/test/specHelper'
import { mockClock } from '../../../../../core/test/specHelper'
import type { FakeClick } from '../../../../test/createFakeClick'
import { createFakeClick } from '../../../../test/createFakeClick'
import type { IsolatedDom } from '../../../../test/createIsolatedDom'
import { createIsolatedDom } from '../../../../test/createIsolatedDom'
import type { FakeClick, IsolatedDom } from '../../../../test'
import { createFakeClick, createIsolatedDom } from '../../../../test'
import { computeFrustration, isRage, isDead } from './computeFrustration'

@@ -10,0 +8,0 @@

@@ -1,3 +0,3 @@

import type { IsolatedDom } from '../../../../test/createIsolatedDom'
import { createIsolatedDom } from '../../../../test/createIsolatedDom'
import type { IsolatedDom } from '../../../../test'
import { createIsolatedDom } from '../../../../test'
import { getActionNameFromElement } from './getActionNameFromElement'

@@ -4,0 +4,0 @@

@@ -1,3 +0,3 @@

import type { IsolatedDom } from '../../../../test/createIsolatedDom'
import { createIsolatedDom } from '../../../../test/createIsolatedDom'
import type { IsolatedDom } from '../../../../test'
import { createIsolatedDom } from '../../../../test'
import { getSelectorFromElement, supportScopeSelector } from './getSelectorFromElement'

@@ -4,0 +4,0 @@

@@ -1,2 +0,2 @@

import { createNewEvent } from '../../../../../core/test/specHelper'
import { createNewEvent } from '@datadog/browser-core/test'
import type { ActionEventsHooks } from './listenActionEvents'

@@ -3,0 +3,0 @@ import { listenActionEvents } from './listenActionEvents'

import type { Context, Duration } from '@datadog/browser-core'
import {
addDuration,
updateExperimentalFeatures,
addExperimentalFeatures,
resetExperimentalFeatures,

@@ -9,6 +9,7 @@ clocksNow,

relativeNow,
ExperimentalFeature,
} from '@datadog/browser-core'
import { createNewEvent } from '../../../../../core/test/specHelper'
import type { TestSetupBuilder } from '../../../../test/testSetupBuilder'
import { setup } from '../../../../test/testSetupBuilder'
import { createNewEvent } from '@datadog/browser-core/test'
import type { TestSetupBuilder } from '../../../../test'
import { setup, createFakeClick } from '../../../../test'
import { RumEventType, ActionType, FrustrationType } from '../../../rawRumEvent.types'

@@ -18,3 +19,2 @@ import type { RumEvent } from '../../../rumEvent.types'

import { PAGE_ACTIVITY_VALIDATION_DELAY } from '../../waitPageActivityEnd'
import { createFakeClick } from '../../../../test/createFakeClick'
import type { ActionContexts } from './actionCollection'

@@ -119,3 +119,3 @@ import type { ClickAction } from './trackClickActions'

beforeEach(() => {
updateExperimentalFeatures(['clickmap'])
addExperimentalFeatures([ExperimentalFeature.CLICKMAP])
})

@@ -122,0 +122,0 @@

@@ -15,2 +15,3 @@ import type { Duration, ClocksState, RelativeTime, TimeStamp } from '@datadog/browser-core'

elapsed,
ExperimentalFeature,
} from '@datadog/browser-core'

@@ -246,3 +247,3 @@ import type { FrustrationType } from '../../../rawRumEvent.types'

if (isExperimentalFeatureEnabled('clickmap')) {
if (isExperimentalFeatureEnabled(ExperimentalFeature.CLICKMAP)) {
const rect = event.target.getBoundingClientRect()

@@ -249,0 +250,0 @@ target = {

import type { RelativeTime, TimeStamp, ErrorWithCause } from '@datadog/browser-core'
import { ErrorHandling, ErrorSource } from '@datadog/browser-core'
import type { TestSetupBuilder } from '../../../../test/testSetupBuilder'
import { setup } from '../../../../test/testSetupBuilder'
import type { TestSetupBuilder } from '../../../../test'
import { setup } from '../../../../test'
import type { RawRumErrorEvent } from '../../../rawRumEvent.types'

@@ -6,0 +6,0 @@ import { RumEventType } from '../../../rawRumEvent.types'

import type { RawError, Subscription } from '@datadog/browser-core'
import { ErrorHandling, ErrorSource, Observable, clocksNow } from '@datadog/browser-core'
import type { Clock } from '../../../../../core/test/specHelper'
import { mockClock } from '../../../../../core/test/specHelper'
import type { Clock } from '@datadog/browser-core/test'
import { mockClock } from '@datadog/browser-core/test'
import { trackConsoleError } from './trackConsoleError'

@@ -6,0 +6,0 @@

import type { RawError, Subscription } from '@datadog/browser-core'
import { ErrorHandling, ErrorSource, Observable, clocksNow } from '@datadog/browser-core'
import type { Clock } from '../../../../../core/test/specHelper'
import { mockClock } from '../../../../../core/test/specHelper'
import { stubReportingObserver } from '../../../../../core/test/stubReportApis'
import type { Clock } from '@datadog/browser-core/test'
import { mockClock, stubReportingObserver } from '@datadog/browser-core/test'
import { trackReportError } from './trackReportError'

@@ -7,0 +6,0 @@

import type { Duration, RelativeTime, ServerDuration } from '@datadog/browser-core'
import type { RumSessionManagerMock } from '../../../../test/mockRumSessionManager'
import { createRumSessionManagerMock } from '../../../../test/mockRumSessionManager'
import type { TestSetupBuilder } from '../../../../test/testSetupBuilder'
import { setup } from '../../../../test/testSetupBuilder'
import type { RumSessionManagerMock, TestSetupBuilder } from '../../../../test'
import { createRumSessionManagerMock, setup } from '../../../../test'
import type { RumPerformanceEntry, RumPerformanceLongTaskTiming } from '../../../browser/performanceCollection'

@@ -7,0 +5,0 @@ import { RumEventType } from '../../../rawRumEvent.types'

import type { Duration, RelativeTime } from '@datadog/browser-core'
import { isIE, relativeToClocks } from '@datadog/browser-core'
import { createResourceEntry } from '../../../../test/fixtures'
import { createResourceEntry } from '../../../../test'
import type { RumPerformanceResourceTiming } from '../../../browser/performanceCollection'

@@ -5,0 +5,0 @@ import type { RequestCompleteEvent } from '../../requestCollection'

@@ -5,11 +5,11 @@ import type { Duration, RelativeTime, ServerDuration, TimeStamp } from '@datadog/browser-core'

resetExperimentalFeatures,
updateExperimentalFeatures,
addExperimentalFeatures,
isIE,
RequestType,
ResourceType,
ExperimentalFeature,
} from '@datadog/browser-core'
import type { RumFetchResourceEventDomainContext } from '../../../domainContext.types'
import { createResourceEntry } from '../../../../test/fixtures'
import type { TestSetupBuilder } from '../../../../test/testSetupBuilder'
import { setup } from '../../../../test/testSetupBuilder'
import { createResourceEntry, setup, createRumSessionManagerMock } from '../../../../test'
import type { TestSetupBuilder } from '../../../../test'
import type { RawRumResourceEvent } from '../../../rawRumEvent.types'

@@ -21,3 +21,2 @@ import { RumEventType } from '../../../rawRumEvent.types'

import { validateAndBuildRumConfiguration } from '../../configuration'
import { createRumSessionManagerMock } from '../../../../test/mockRumSessionManager'
import { PageState } from '../../contexts/pageStateHistory'

@@ -119,3 +118,3 @@ import { startResourceCollection } from './resourceCollection'

it('should collect page states on resources when ff resource_page_states enabled', () => {
updateExperimentalFeatures(['resource_page_states'])
addExperimentalFeatures([ExperimentalFeature.RESOURCE_PAGE_STATES])
const { lifeCycle, rawRumEvents } = setupBuilder.build()

@@ -163,3 +162,3 @@ const mockPageStates = [{ state: PageState.ACTIVE, startTime: 0 as RelativeTime }]

it('should collect computed duration and performance entry duration when resource_durations ff is enabled', () => {
updateExperimentalFeatures(['resource_durations'])
addExperimentalFeatures([ExperimentalFeature.RESOURCE_DURATIONS])

@@ -166,0 +165,0 @@ const match = createResourceEntry({ startTime: 200 as RelativeTime, duration: 300 as Duration })

@@ -11,2 +11,3 @@ import {

isExperimentalFeatureEnabled,
ExperimentalFeature,
} from '@datadog/browser-core'

@@ -200,3 +201,3 @@ import type { ClocksState, ServerDuration, Duration } from '@datadog/browser-core'

) {
if (!isExperimentalFeatureEnabled('resource_durations')) {
if (!isExperimentalFeatureEnabled(ExperimentalFeature.RESOURCE_DURATIONS)) {
return

@@ -236,3 +237,3 @@ }

function computePageStateInfo(pageStateHistory: PageStateHistory, startClocks: ClocksState, duration: Duration) {
if (!isExperimentalFeatureEnabled('resource_page_states')) {
if (!isExperimentalFeatureEnabled(ExperimentalFeature.RESOURCE_PAGE_STATES)) {
return

@@ -239,0 +240,0 @@ }

import type { Duration, RelativeTime, ServerDuration } from '@datadog/browser-core'
import { SPEC_ENDPOINTS } from '../../../../../core/test/specHelper'
import { SPEC_ENDPOINTS } from '@datadog/browser-core/test'
import type { RumPerformanceResourceTiming } from '../../../browser/performanceCollection'

@@ -4,0 +4,0 @@ import type { RumConfiguration } from '../../configuration'

@@ -1,2 +0,2 @@

import type { BuildContext } from '../../../../test/testSetupBuilder'
import type { BuildContext } from '../../../../test'
import { LifeCycleEventType } from '../../lifeCycle'

@@ -3,0 +3,0 @@ import type { ViewEvent, ViewOptions } from './trackViews'

import type { RelativeTime } from '@datadog/browser-core'
import { DOM_EVENT } from '@datadog/browser-core'
import { createNewEvent, restorePageVisibility, setPageVisibility } from '../../../../../core/test/specHelper'
import { createNewEvent, restorePageVisibility, setPageVisibility } from '@datadog/browser-core/test'
import { resetFirstHidden, trackFirstHidden } from './trackFirstHidden'

@@ -5,0 +5,0 @@

import type { Duration, RelativeTime } from '@datadog/browser-core'
import { DOM_EVENT } from '@datadog/browser-core'
import { createNewEvent, restorePageVisibility, setPageVisibility } from '../../../../../core/test/specHelper'
import type { TestSetupBuilder } from '../../../../test/testSetupBuilder'
import { setup } from '../../../../test/testSetupBuilder'
import { restorePageVisibility, setPageVisibility, createNewEvent } from '@datadog/browser-core/test'
import type { TestSetupBuilder } from '../../../../test'
import { setup } from '../../../../test'
import type {

@@ -7,0 +7,0 @@ RumFirstInputTiming,

import type { Context } from '@datadog/browser-core'
import { noop } from '@datadog/browser-core'
import type { Clock } from '@datadog/browser-core/test'
import { mockClock } from '@datadog/browser-core/test'
import type { RumResourceEvent } from '../../../rumEvent.types'
import { RumEventType } from '../../../rawRumEvent.types'
import type { Clock } from '../../../../../core/test/specHelper'
import { mockClock } from '../../../../../core/test/specHelper'
import { LifeCycle, LifeCycleEventType } from '../../lifeCycle'

@@ -8,0 +8,0 @@ import { KEEP_TRACKING_EVENT_COUNTS_AFTER_VIEW_DELAY, trackViewEventCounts } from './trackViewEventCounts'

import type { Context, RelativeTime, Duration } from '@datadog/browser-core'
import { addDuration, relativeNow } from '@datadog/browser-core'
import type { RumEvent } from '../../../rumEvent.types'
import type { TestSetupBuilder } from '../../../../test/testSetupBuilder'
import { setup } from '../../../../test/testSetupBuilder'
import type { TestSetupBuilder } from '../../../../test'
import { setup } from '../../../../test'
import type { RumPerformanceNavigationTiming } from '../../../browser/performanceCollection'

@@ -7,0 +7,0 @@ import { FrustrationType, RumEventType } from '../../../rawRumEvent.types'

@@ -10,4 +10,4 @@ import type { Context, Duration, RelativeTime } from '@datadog/browser-core'

} from '@datadog/browser-core'
import type { TestSetupBuilder } from '../../../../test/testSetupBuilder'
import { setup } from '../../../../test/testSetupBuilder'
import type { TestSetupBuilder } from '../../../../test'
import { setup } from '../../../../test'
import type {

@@ -14,0 +14,0 @@ RumLargestContentfulPaintTiming,

import type { Duration, RelativeTime, ServerDuration, TimeStamp } from '@datadog/browser-core'
import type { RecorderApi } from '../../../boot/rumPublicApi'
import type { TestSetupBuilder } from '../../../../test/testSetupBuilder'
import { setup } from '../../../../test/testSetupBuilder'
import type { TestSetupBuilder } from '../../../../test'
import { setup, noopRecorderApi } from '../../../../test'
import type { RawRumViewEvent } from '../../../rawRumEvent.types'
import { RumEventType, ViewLoadingType } from '../../../rawRumEvent.types'
import { LifeCycleEventType } from '../../lifeCycle'
import { noopRecorderApi } from '../../../../test/noopRecorderApi'
import type { ViewEvent } from './trackViews'

@@ -10,0 +9,0 @@ import { startViewCollection } from './viewCollection'

@@ -11,4 +11,4 @@ import type { RelativeTime } from '@datadog/browser-core'

} from '@datadog/browser-core'
import type { Clock } from '../../../core/test/specHelper'
import { mockClock } from '../../../core/test/specHelper'
import type { Clock } from '@datadog/browser-core/test'
import { mockClock } from '@datadog/browser-core/test'
import type { RumConfiguration } from './configuration'

@@ -15,0 +15,0 @@ import { validateAndBuildRumConfiguration } from './configuration'

import type { BatchFlushEvent, Context, ContextManager, TelemetryEvent } from '@datadog/browser-core'
import { resetExperimentalFeatures, TelemetryService, startTelemetry, Observable } from '@datadog/browser-core'
import type { TestSetupBuilder } from '../../test/testSetupBuilder'
import { setup } from '../../test/testSetupBuilder'
import type { TestSetupBuilder } from '../../test'
import { setup } from '../../test'
import { RumEventType } from '../rawRumEvent.types'

@@ -6,0 +6,0 @@ import type { RumEvent } from '../rumEvent.types'

import { display, isIE, objectEntries } from '@datadog/browser-core'
import type { TestSetupBuilder } from '../../../test/testSetupBuilder'
import { setup } from '../../../test/testSetupBuilder'
import type { RumSessionManagerMock } from '../../../test/mockRumSessionManager'
import { createRumSessionManagerMock } from '../../../test/mockRumSessionManager'
import type { TestSetupBuilder, RumSessionManagerMock } from '../../../test'
import { setup, createRumSessionManagerMock } from '../../../test'
import type { RumFetchResolveContext, RumFetchStartContext, RumXhrStartContext } from '../requestCollection'

@@ -7,0 +5,0 @@ import type { RumConfiguration, RumInitConfiguration } from '../configuration'

import type { RelativeTime, Subscription } from '@datadog/browser-core'
import { Observable, ONE_SECOND, getTimeStamp } from '@datadog/browser-core'
import type { Clock } from '@datadog/browser-core/test/specHelper'
import { mockClock } from '@datadog/browser-core/test/specHelper'
import type { TestSetupBuilder } from '../../test/testSetupBuilder'
import { setup } from '../../test/testSetupBuilder'
import type { Clock } from '@datadog/browser-core/test'
import { mockClock } from '@datadog/browser-core/test'
import type { TestSetupBuilder } from '../../test'
import { setup } from '../../test'
import type { RumPerformanceNavigationTiming, RumPerformanceResourceTiming } from '../browser/performanceCollection'

@@ -8,0 +8,0 @@ import { LifeCycleEventType } from './lifeCycle'

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc