/
index.ts
40 lines (37 loc) · 1.23 KB
/
index.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
import { logger } from '@storybook/client-logger';
import type { EventType, Payload, Options, TelemetryData } from './types';
import { getStorybookMetadata } from './storybook-metadata';
import { sendTelemetry } from './telemetry';
import { notify } from './notify';
import { sanitizeError } from './sanitize';
export * from './storybook-metadata';
export const telemetry = async (
eventType: EventType,
payload: Payload = {},
options: Partial<Options> = {}
) => {
await notify();
const telemetryData: TelemetryData = {
eventType,
payload,
};
try {
telemetryData.metadata = await getStorybookMetadata(options?.configDir);
} catch (error) {
if (!telemetryData.payload.error) telemetryData.payload.error = error;
} finally {
const { error } = telemetryData.payload;
if (error) {
// make sure to anonymise possible paths from error messages
telemetryData.payload.error = sanitizeError(error);
}
if (!telemetryData.payload.error || options?.enableCrashReports) {
if (process.env?.STORYBOOK_TELEMETRY_DEBUG) {
logger.info('\n[telemetry]');
logger.info(JSON.stringify(telemetryData, null, 2));
} else {
await sendTelemetry(telemetryData, options);
}
}
}
};