UNPKG

@zendesk/react-measure-timing-hooks

Version:

react hooks for measuring time to interactive and time to render of components

68 lines (61 loc) 1.93 kB
import type { SpanAndAnnotation, SpanAnnotation } from '../spanAnnotationTypes' import type { Span } from '../spanTypes' import type { Timestamp } from '../types' const EPOCH_START = 1_000 export const createTimestamp = (now: number): Timestamp => ({ epoch: EPOCH_START + now, now, }) export type AnyRelation = Record<string, unknown> export const createAnnotation = ( span: Span<AnyRelation>, traceStartTime: Timestamp, partial: Partial<SpanAnnotation> = {}, ): SpanAnnotation => ({ id: 'test-id', operationRelativeStartTime: span.startTime.now - traceStartTime.now, operationRelativeEndTime: span.startTime.now + span.duration - traceStartTime.now, occurrence: 1, recordedInState: 'active', labels: [], ...partial, }) export const createMockSpan = <TSpan extends Span<AnyRelation>>( startTimeNow: number, partial: Partial<TSpan>, ): TSpan => (partial.type === 'component-render' ? { name: 'test-component', type: 'component-render', relatedTo: {}, startTime: createTimestamp(startTimeNow), duration: 100, attributes: {}, isIdle: true, renderCount: 1, renderedOutput: 'content', ...partial, } : { name: 'test-span', type: 'mark', startTime: createTimestamp(startTimeNow), duration: 100, attributes: {}, ...partial, }) as TSpan // eslint-disable-next-line @typescript-eslint/no-explicit-any export const createMockSpanAndAnnotation = <TSpan extends Span<any>>( startTimeNow: number, spanPartial: Partial<TSpan> = {}, annotationPartial: Partial<SpanAnnotation> = {}, // eslint-disable-next-line @typescript-eslint/no-explicit-any ): SpanAndAnnotation<any> => { const span = createMockSpan<TSpan>(startTimeNow, spanPartial) return { span, annotation: createAnnotation(span, createTimestamp(0), annotationPartial), } }