| 113 | * @param {P[E]} [properties] |
| 114 | */ |
| 115 | export function sendTelemetryEvent<P extends IEventNamePropertyMapping, E extends keyof P>( |
| 116 | eventName: E, |
| 117 | measures?: |
| 118 | | (P[E] extends TelemetryEventInfo<infer R> ? PickType<UnionToIntersection<R>, number> : undefined) |
| 119 | | undefined, |
| 120 | properties?: P[E] extends TelemetryEventInfo<infer R> |
| 121 | ? ExcludeType<R, number> extends never | undefined |
| 122 | ? undefined |
| 123 | : ExcludeType<R, number> |
| 124 | : undefined | undefined, |
| 125 | ex?: Error |
| 126 | ) { |
| 127 | if (!isPerfMeasurementOnCI(eventName.toString()) && (isTestExecution() || !isTelemetrySupported())) { |
| 128 | return; |
| 129 | } |
| 130 | sendTelemetryEventInternal( |
| 131 | eventName as any, |
| 132 | // Because of exactOptionalPropertyTypes we have to cast. |
| 133 | measures as unknown as Record<string, number> | undefined, |
| 134 | properties, |
| 135 | ex |
| 136 | ); |
| 137 | } |
| 138 | |
| 139 | /** |
| 140 | * Some telemetry is sent on CI as part of our tests, |