sussudio
Version:
An unofficial VS Code Internal API
68 lines (67 loc) • 3.84 kB
JavaScript
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __param = (this && this.__param) || function (paramIndex, decorator) {
return function (target, key) { decorator(target, key, paramIndex); }
};
import { IConfigurationService } from "../../configuration/common/configuration.mjs";
import { refineServiceDecorator } from "../../instantiation/common/instantiation.mjs";
import { IProductService } from "../../product/common/productService.mjs";
import { ITelemetryService } from "./telemetry.mjs";
import { TelemetryService } from "./telemetryService.mjs";
import { NullTelemetryServiceShape } from "./telemetryUtils.mjs";
let ServerTelemetryService = class ServerTelemetryService extends TelemetryService {
// Because we cannot read the workspace config on the remote site
// the ServerTelemetryService is responsible for knowing its telemetry level
// this is done through IPC calls and initial value injections
_injectedTelemetryLevel;
constructor(config, injectedTelemetryLevel, _configurationService, _productService) {
super(config, _configurationService, _productService);
this._injectedTelemetryLevel = injectedTelemetryLevel;
}
publicLog(eventName, data) {
if (this._injectedTelemetryLevel < 3 /* TelemetryLevel.USAGE */) {
return Promise.resolve(undefined);
}
return super.publicLog(eventName, data);
}
publicLog2(eventName, data) {
return this.publicLog(eventName, data);
}
publicLogError(errorEventName, data) {
if (this._injectedTelemetryLevel < 2 /* TelemetryLevel.ERROR */) {
return Promise.resolve(undefined);
}
return super.publicLogError(errorEventName, data);
}
publicLogError2(eventName, data) {
return this.publicLogError(eventName, data);
}
async updateInjectedTelemetryLevel(telemetryLevel) {
if (telemetryLevel === undefined) {
this._injectedTelemetryLevel = 0 /* TelemetryLevel.NONE */;
throw new Error('Telemetry level cannot be undefined. This will cause infinite looping!');
}
// We always take the most restrictive level because we don't want multiple clients to connect and send data when one client does not consent
this._injectedTelemetryLevel = this._injectedTelemetryLevel ? Math.min(this._injectedTelemetryLevel, telemetryLevel) : telemetryLevel;
if (this._injectedTelemetryLevel === 0 /* TelemetryLevel.NONE */) {
this.dispose();
}
}
};
ServerTelemetryService = __decorate([
__param(2, IConfigurationService),
__param(3, IProductService)
], ServerTelemetryService);
export { ServerTelemetryService };
export const ServerNullTelemetryService = new class extends NullTelemetryServiceShape {
async updateInjectedTelemetryLevel() { return; } // No-op, telemetry is already disabled
};
export const IServerTelemetryService = refineServiceDecorator(ITelemetryService);