@datadog/browser-rum-core
Advanced tools
Comparing version 4.37.0 to 4.38.0
@@ -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
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
1435337
28847
+ Added@datadog/browser-core@4.38.0(transitive)
- Removed@datadog/browser-core@4.37.0(transitive)
Updated@datadog/browser-core@4.38.0