UNPKG

sussudio

Version:

An unofficial VS Code Internal API

109 lines (108 loc) 4 kB
/*--------------------------------------------------------------------------------------------- * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ import * as platform from "../../../base/common/platform.mjs"; export const ASSIGNMENT_STORAGE_KEY = 'VSCode.ABExp.FeatureData'; export const ASSIGNMENT_REFETCH_INTERVAL = 0; // no polling export var TargetPopulation; (function (TargetPopulation) { TargetPopulation["Team"] = "team"; TargetPopulation["Internal"] = "internal"; TargetPopulation["Insiders"] = "insider"; TargetPopulation["Public"] = "public"; })(TargetPopulation || (TargetPopulation = {})); /* Based upon the official VSCode currently existing filters in the ExP backend for the VSCode cluster. https://experimentation.visualstudio.com/Analysis%20and%20Experimentation/_git/AnE.ExP.TAS.TachyonHost.Configuration?path=%2FConfigurations%2Fvscode%2Fvscode.json&version=GBmaster "X-MSEdge-Market": "detection.market", "X-FD-Corpnet": "detection.corpnet", "X-VSCode-AppVersion": "appversion", "X-VSCode-Build": "build", "X-MSEdge-ClientId": "clientid", "X-VSCode-ExtensionName": "extensionname", "X-VSCode-ExtensionVersion": "extensionversion", "X-VSCode-TargetPopulation": "targetpopulation", "X-VSCode-Language": "language" */ export var Filters; (function (Filters) { /** * The market in which the extension is distributed. */ Filters["Market"] = "X-MSEdge-Market"; /** * The corporation network. */ Filters["CorpNet"] = "X-FD-Corpnet"; /** * Version of the application which uses experimentation service. */ Filters["ApplicationVersion"] = "X-VSCode-AppVersion"; /** * Insiders vs Stable. */ Filters["Build"] = "X-VSCode-Build"; /** * Client Id which is used as primary unit for the experimentation. */ Filters["ClientId"] = "X-MSEdge-ClientId"; /** * Extension header. */ Filters["ExtensionName"] = "X-VSCode-ExtensionName"; /** * The version of the extension. */ Filters["ExtensionVersion"] = "X-VSCode-ExtensionVersion"; /** * The language in use by VS Code */ Filters["Language"] = "X-VSCode-Language"; /** * The target population. * This is used to separate internal, early preview, GA, etc. */ Filters["TargetPopulation"] = "X-VSCode-TargetPopulation"; })(Filters || (Filters = {})); export class AssignmentFilterProvider { version; appName; machineId; targetPopulation; constructor(version, appName, machineId, targetPopulation) { this.version = version; this.appName = appName; this.machineId = machineId; this.targetPopulation = targetPopulation; } getFilterValue(filter) { switch (filter) { case Filters.ApplicationVersion: return this.version; // productService.version case Filters.Build: return this.appName; // productService.nameLong case Filters.ClientId: return this.machineId; case Filters.Language: return platform.language; case Filters.ExtensionName: return 'vscode-core'; // always return vscode-core for exp service case Filters.ExtensionVersion: return '999999.0'; // always return a very large number for cross-extension experimentation case Filters.TargetPopulation: return this.targetPopulation; default: return ''; } } getFilters() { const filters = new Map(); const filterValues = Object.values(Filters); for (const value of filterValues) { filters.set(value, this.getFilterValue(value)); } return filters; } }