UNPKG

@zendesk/retrace

Version:

define and capture Product Operation Traces along with computed metrics with an optional friendly React beacon API

35 lines (34 loc) 1.97 kB
import type { INHERIT_FROM_PARENT } from './constants'; import type { ProcessedSpan } from './spanAnnotationTypes'; import type { Attributes, ComponentRenderSpan, SpanBase, WithParentSpanMatcher } from './spanTypes'; import type { TraceManager } from './TraceManager'; import type { RelatedTo, RelationSchemasBase } from './types'; export type RenderedOutput = 'null' | 'loading' | 'content' | 'error'; export type MapRequiredAttributes<RequiredAttributesT> = { [K in keyof RequiredAttributesT]: RequiredAttributesT[K] | typeof INHERIT_FROM_PARENT; }; export type BeaconConfig<RelationSchemasT extends RelationSchemasBase<RelationSchemasT>, RequiredAttributesT = {}> = { /** The name of the component or hook */ name: string; /** What is this component related to based on the tracing schema? */ relatedTo: RelatedTo<RelationSchemasT>; /** * What is being rendered in this pass of the render function? */ renderedOutput: RenderedOutput; /** * If true, this is a component that is idle and not waiting for any data. * This is inferred automatically from `renderedOutput` and `error`, but can be overridden. */ isIdle?: boolean; /** * True if this is a hook being instrumented. */ isHook?: boolean; } & (keyof RequiredAttributesT extends never ? { attributes?: Attributes; } : { attributes: MapRequiredAttributes<RequiredAttributesT> & Attributes; }) & WithParentSpanMatcher<RelationSchemasT> & Pick<SpanBase<RelationSchemasT>, 'internalUse' | 'error'>; export type UseBeacon<RelationSchemasT extends RelationSchemasBase<RelationSchemasT>, RequiredAttributesT> = (beaconConfig: BeaconConfig<RelationSchemasT, RequiredAttributesT>) => ProcessedSpan<RelationSchemasT, ComponentRenderSpan<RelationSchemasT>>; export type GetRelationSchemasTFromTraceManager<TraceManagerT extends TraceManager<any>> = TraceManagerT extends TraceManager<infer RelationSchemasT> ? RelationSchemasT : never;