@mtdt.temp/browser-rum-core
Version:
Datadog browser RUM core utilities.
175 lines (174 loc) • 6.81 kB
TypeScript
import type { Duration, RelativeTime } from '@mtdt.temp/browser-core';
import { Observable } from '@mtdt.temp/browser-core';
import type { RumConfiguration } from '../domain/configuration';
type RumPerformanceObserverConstructor = new (callback: PerformanceObserverCallback) => RumPerformanceObserver;
export interface BrowserWindow extends Window {
PerformanceObserver: RumPerformanceObserverConstructor;
performance: Performance & {
interactionCount?: number;
};
}
export interface RumPerformanceObserver extends PerformanceObserver {
observe(options?: PerformanceObserverInit & {
durationThreshold?: number;
}): void;
}
export declare enum RumPerformanceEntryType {
EVENT = "event",
FIRST_INPUT = "first-input",
LARGEST_CONTENTFUL_PAINT = "largest-contentful-paint",
LAYOUT_SHIFT = "layout-shift",
LONG_TASK = "longtask",
LONG_ANIMATION_FRAME = "long-animation-frame",
NAVIGATION = "navigation",
PAINT = "paint",
RESOURCE = "resource",
VISIBILITY_STATE = "visibility-state"
}
export interface RumPerformanceLongTaskTiming {
name: string;
entryType: RumPerformanceEntryType.LONG_TASK;
startTime: RelativeTime;
duration: Duration;
toJSON(): Omit<PerformanceEntry, 'toJSON'>;
}
export interface RumPerformanceResourceTiming {
entryType: RumPerformanceEntryType.RESOURCE;
initiatorType: string;
responseStatus?: number;
name: string;
startTime: RelativeTime;
duration: Duration;
fetchStart: RelativeTime;
workerStart: RelativeTime;
domainLookupStart: RelativeTime;
domainLookupEnd: RelativeTime;
connectStart: RelativeTime;
secureConnectionStart: RelativeTime;
connectEnd: RelativeTime;
requestStart: RelativeTime;
responseStart: RelativeTime;
responseEnd: RelativeTime;
redirectStart: RelativeTime;
redirectEnd: RelativeTime;
decodedBodySize?: number;
encodedBodySize?: number;
transferSize?: number;
nextHopProtocol?: string;
renderBlockingStatus?: string;
traceId?: string;
deliveryType?: 'cache' | 'navigational-prefetch' | '';
toJSON(): Omit<PerformanceEntry, 'toJSON'>;
}
export interface RumPerformancePaintTiming {
entryType: RumPerformanceEntryType.PAINT;
name: 'first-paint' | 'first-contentful-paint';
startTime: RelativeTime;
toJSON(): Omit<RumPerformancePaintTiming, 'toJSON'>;
}
export interface RumPerformanceNavigationTiming extends Omit<RumPerformanceResourceTiming, 'entryType'> {
entryType: RumPerformanceEntryType.NAVIGATION;
initiatorType: 'navigation';
name: string;
domComplete: RelativeTime;
domContentLoadedEventEnd: RelativeTime;
domInteractive: RelativeTime;
loadEventEnd: RelativeTime;
toJSON(): Omit<RumPerformanceNavigationTiming, 'toJSON'>;
}
export interface RumLargestContentfulPaintTiming {
entryType: RumPerformanceEntryType.LARGEST_CONTENTFUL_PAINT;
startTime: RelativeTime;
size: number;
element?: Element;
url?: string;
toJSON(): Omit<RumLargestContentfulPaintTiming, 'toJSON'>;
}
export interface RumFirstInputTiming {
entryType: RumPerformanceEntryType.FIRST_INPUT;
startTime: RelativeTime;
processingStart: RelativeTime;
processingEnd: RelativeTime;
duration: Duration;
target?: Node;
interactionId?: number;
toJSON(): Omit<RumFirstInputTiming, 'toJSON'>;
}
export interface RumPerformanceEventTiming {
entryType: RumPerformanceEntryType.EVENT;
startTime: RelativeTime;
processingStart: RelativeTime;
processingEnd: RelativeTime;
duration: Duration;
interactionId?: number;
target?: Node;
name: string;
toJSON(): Omit<RumPerformanceEventTiming, 'toJSON'>;
}
export interface RumLayoutShiftAttribution {
node: Node | null;
previousRect: DOMRectReadOnly;
currentRect: DOMRectReadOnly;
}
export interface RumLayoutShiftTiming {
entryType: RumPerformanceEntryType.LAYOUT_SHIFT;
startTime: RelativeTime;
value: number;
hadRecentInput: boolean;
sources: RumLayoutShiftAttribution[];
toJSON(): Omit<RumLayoutShiftTiming, 'toJSON'>;
}
export interface RumPerformanceScriptTiming {
duration: Duration;
entryType: 'script';
executionStart: RelativeTime;
forcedStyleAndLayoutDuration: Duration;
invoker: string;
invokerType: 'user-callback' | 'event-listener' | 'resolve-promise' | 'reject-promise' | 'classic-script' | 'module-script';
name: 'script';
pauseDuration: Duration;
sourceCharPosition: number;
sourceFunctionName: string;
sourceURL: string;
startTime: RelativeTime;
window: Window;
windowAttribution: string;
}
export interface RumPerformanceLongAnimationFrameTiming {
blockingDuration: Duration;
duration: Duration;
entryType: RumPerformanceEntryType.LONG_ANIMATION_FRAME;
firstUIEventTimestamp: RelativeTime;
name: 'long-animation-frame';
renderStart: RelativeTime;
scripts: RumPerformanceScriptTiming[];
startTime: RelativeTime;
styleAndLayoutStart: RelativeTime;
toJSON(): Omit<RumPerformanceLongAnimationFrameTiming, 'toJSON'>;
}
export interface RumFirstHiddenTiming {
entryType: RumPerformanceEntryType.VISIBILITY_STATE;
name: 'hidden' | 'visible';
startTime: RelativeTime;
toJSON(): Omit<RumFirstHiddenTiming, 'toJSON'>;
}
export type RumPerformanceEntry = RumPerformanceResourceTiming | RumPerformanceLongTaskTiming | RumPerformanceLongAnimationFrameTiming | RumPerformancePaintTiming | RumPerformanceNavigationTiming | RumLargestContentfulPaintTiming | RumFirstInputTiming | RumPerformanceEventTiming | RumLayoutShiftTiming | RumFirstHiddenTiming;
export interface EntryTypeToReturnType {
[RumPerformanceEntryType.EVENT]: RumPerformanceEventTiming;
[RumPerformanceEntryType.FIRST_INPUT]: RumFirstInputTiming;
[RumPerformanceEntryType.LARGEST_CONTENTFUL_PAINT]: RumLargestContentfulPaintTiming;
[RumPerformanceEntryType.LAYOUT_SHIFT]: RumLayoutShiftTiming;
[RumPerformanceEntryType.PAINT]: RumPerformancePaintTiming;
[RumPerformanceEntryType.LONG_TASK]: RumPerformanceLongTaskTiming;
[RumPerformanceEntryType.LONG_ANIMATION_FRAME]: RumPerformanceLongAnimationFrameTiming;
[RumPerformanceEntryType.NAVIGATION]: RumPerformanceNavigationTiming;
[RumPerformanceEntryType.RESOURCE]: RumPerformanceResourceTiming;
[RumPerformanceEntryType.VISIBILITY_STATE]: RumFirstHiddenTiming;
}
export declare function createPerformanceObservable<T extends RumPerformanceEntryType>(configuration: RumConfiguration, options: {
type: T;
buffered?: boolean;
durationThreshold?: number;
}): Observable<EntryTypeToReturnType[T][]>;
export declare function supportPerformanceTimingEvent(entryType: RumPerformanceEntryType): boolean;
export {};