Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
microsoft
GitHub Repository: microsoft/vscode
Path: blob/main/extensions/markdown-language-features/src/telemetryReporter.ts
3292 views
1
/*---------------------------------------------------------------------------------------------
2
* Copyright (c) Microsoft Corporation. All rights reserved.
3
* Licensed under the MIT License. See License.txt in the project root for license information.
4
*--------------------------------------------------------------------------------------------*/
5
import { default as VSCodeTelemetryReporter } from '@vscode/extension-telemetry';
6
import * as vscode from 'vscode';
7
8
interface IPackageInfo {
9
name: string;
10
version: string;
11
aiKey: string;
12
}
13
14
export interface TelemetryReporter {
15
dispose(): void;
16
sendTelemetryEvent(eventName: string, properties?: {
17
[key: string]: string;
18
}): void;
19
}
20
21
const nullReporter = new class NullTelemetryReporter implements TelemetryReporter {
22
sendTelemetryEvent() { /** noop */ }
23
dispose() { /** noop */ }
24
};
25
26
class ExtensionReporter implements TelemetryReporter {
27
private readonly _reporter: VSCodeTelemetryReporter;
28
29
constructor(
30
packageInfo: IPackageInfo
31
) {
32
this._reporter = new VSCodeTelemetryReporter(packageInfo.aiKey);
33
}
34
sendTelemetryEvent(eventName: string, properties?: {
35
[key: string]: string;
36
}) {
37
this._reporter.sendTelemetryEvent(eventName, properties);
38
}
39
40
dispose() {
41
this._reporter.dispose();
42
}
43
}
44
45
export function loadDefaultTelemetryReporter(): TelemetryReporter {
46
const packageInfo = getPackageInfo();
47
return packageInfo ? new ExtensionReporter(packageInfo) : nullReporter;
48
}
49
50
function getPackageInfo(): IPackageInfo | null {
51
const extension = vscode.extensions.getExtension('Microsoft.vscode-markdown');
52
if (extension?.packageJSON) {
53
return {
54
name: extension.packageJSON.name,
55
version: extension.packageJSON.version,
56
aiKey: extension.packageJSON.aiKey
57
};
58
}
59
return null;
60
}
61
62