@sussudio/platform
Version:
Internal APIs for VS Code's service injection the base services.
202 lines (201 loc) • 8.8 kB
JavaScript
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import { localize } from 'vscode-nls.mjs';
import { createDecorator } from '../../instantiation/common/instantiation.mjs';
export const EXTENSION_IDENTIFIER_PATTERN = '^([a-z0-9A-Z][a-z0-9-A-Z]*)\\.([a-z0-9A-Z][a-z0-9-A-Z]*)$';
export const EXTENSION_IDENTIFIER_REGEX = new RegExp(EXTENSION_IDENTIFIER_PATTERN);
export const WEB_EXTENSION_TAG = '__web_extension';
export function TargetPlatformToString(targetPlatform) {
switch (targetPlatform) {
case 'win32-x64' /* TargetPlatform.WIN32_X64 */:
return 'Windows 64 bit';
case 'win32-ia32' /* TargetPlatform.WIN32_IA32 */:
return 'Windows 32 bit';
case 'win32-arm64' /* TargetPlatform.WIN32_ARM64 */:
return 'Windows ARM';
case 'linux-x64' /* TargetPlatform.LINUX_X64 */:
return 'Linux 64 bit';
case 'linux-arm64' /* TargetPlatform.LINUX_ARM64 */:
return 'Linux ARM 64';
case 'linux-armhf' /* TargetPlatform.LINUX_ARMHF */:
return 'Linux ARM';
case 'alpine-x64' /* TargetPlatform.ALPINE_X64 */:
return 'Alpine Linux 64 bit';
case 'alpine-arm64' /* TargetPlatform.ALPINE_ARM64 */:
return 'Alpine ARM 64';
case 'darwin-x64' /* TargetPlatform.DARWIN_X64 */:
return 'Mac';
case 'darwin-arm64' /* TargetPlatform.DARWIN_ARM64 */:
return 'Mac Silicon';
case 'web' /* TargetPlatform.WEB */:
return 'Web';
case 'universal' /* TargetPlatform.UNIVERSAL */:
return 'universal' /* TargetPlatform.UNIVERSAL */;
case 'unknown' /* TargetPlatform.UNKNOWN */:
return 'unknown' /* TargetPlatform.UNKNOWN */;
case 'undefined' /* TargetPlatform.UNDEFINED */:
return 'undefined' /* TargetPlatform.UNDEFINED */;
}
}
export function toTargetPlatform(targetPlatform) {
switch (targetPlatform) {
case 'win32-x64' /* TargetPlatform.WIN32_X64 */:
return 'win32-x64' /* TargetPlatform.WIN32_X64 */;
case 'win32-ia32' /* TargetPlatform.WIN32_IA32 */:
return 'win32-ia32' /* TargetPlatform.WIN32_IA32 */;
case 'win32-arm64' /* TargetPlatform.WIN32_ARM64 */:
return 'win32-arm64' /* TargetPlatform.WIN32_ARM64 */;
case 'linux-x64' /* TargetPlatform.LINUX_X64 */:
return 'linux-x64' /* TargetPlatform.LINUX_X64 */;
case 'linux-arm64' /* TargetPlatform.LINUX_ARM64 */:
return 'linux-arm64' /* TargetPlatform.LINUX_ARM64 */;
case 'linux-armhf' /* TargetPlatform.LINUX_ARMHF */:
return 'linux-armhf' /* TargetPlatform.LINUX_ARMHF */;
case 'alpine-x64' /* TargetPlatform.ALPINE_X64 */:
return 'alpine-x64' /* TargetPlatform.ALPINE_X64 */;
case 'alpine-arm64' /* TargetPlatform.ALPINE_ARM64 */:
return 'alpine-arm64' /* TargetPlatform.ALPINE_ARM64 */;
case 'darwin-x64' /* TargetPlatform.DARWIN_X64 */:
return 'darwin-x64' /* TargetPlatform.DARWIN_X64 */;
case 'darwin-arm64' /* TargetPlatform.DARWIN_ARM64 */:
return 'darwin-arm64' /* TargetPlatform.DARWIN_ARM64 */;
case 'web' /* TargetPlatform.WEB */:
return 'web' /* TargetPlatform.WEB */;
case 'universal' /* TargetPlatform.UNIVERSAL */:
return 'universal' /* TargetPlatform.UNIVERSAL */;
default:
return 'unknown' /* TargetPlatform.UNKNOWN */;
}
}
export function getTargetPlatform(platform, arch) {
switch (platform) {
case 3 /* Platform.Windows */:
if (arch === 'x64') {
return 'win32-x64' /* TargetPlatform.WIN32_X64 */;
}
if (arch === 'ia32') {
return 'win32-ia32' /* TargetPlatform.WIN32_IA32 */;
}
if (arch === 'arm64') {
return 'win32-arm64' /* TargetPlatform.WIN32_ARM64 */;
}
return 'unknown' /* TargetPlatform.UNKNOWN */;
case 2 /* Platform.Linux */:
if (arch === 'x64') {
return 'linux-x64' /* TargetPlatform.LINUX_X64 */;
}
if (arch === 'arm64') {
return 'linux-arm64' /* TargetPlatform.LINUX_ARM64 */;
}
if (arch === 'arm') {
return 'linux-armhf' /* TargetPlatform.LINUX_ARMHF */;
}
return 'unknown' /* TargetPlatform.UNKNOWN */;
case 'alpine':
if (arch === 'x64') {
return 'alpine-x64' /* TargetPlatform.ALPINE_X64 */;
}
if (arch === 'arm64') {
return 'alpine-arm64' /* TargetPlatform.ALPINE_ARM64 */;
}
return 'unknown' /* TargetPlatform.UNKNOWN */;
case 1 /* Platform.Mac */:
if (arch === 'x64') {
return 'darwin-x64' /* TargetPlatform.DARWIN_X64 */;
}
if (arch === 'arm64') {
return 'darwin-arm64' /* TargetPlatform.DARWIN_ARM64 */;
}
return 'unknown' /* TargetPlatform.UNKNOWN */;
case 0 /* Platform.Web */:
return 'web' /* TargetPlatform.WEB */;
}
}
export function isNotWebExtensionInWebTargetPlatform(allTargetPlatforms, productTargetPlatform) {
// Not a web extension in web target platform
return (
productTargetPlatform === 'web' /* TargetPlatform.WEB */ &&
!allTargetPlatforms.includes('web' /* TargetPlatform.WEB */)
);
}
export function isTargetPlatformCompatible(extensionTargetPlatform, allTargetPlatforms, productTargetPlatform) {
// Not compatible when extension is not a web extension in web target platform
if (isNotWebExtensionInWebTargetPlatform(allTargetPlatforms, productTargetPlatform)) {
return false;
}
// Compatible when extension target platform is not defined
if (extensionTargetPlatform === 'undefined' /* TargetPlatform.UNDEFINED */) {
return true;
}
// Compatible when extension target platform is universal
if (extensionTargetPlatform === 'universal' /* TargetPlatform.UNIVERSAL */) {
return true;
}
// Not compatible when extension target platform is unknown
if (extensionTargetPlatform === 'unknown' /* TargetPlatform.UNKNOWN */) {
return false;
}
// Compatible when extension and product target platforms matches
if (extensionTargetPlatform === productTargetPlatform) {
return true;
}
// Fallback
const fallbackTargetPlatforms = getFallbackTargetPlarforms(productTargetPlatform);
return fallbackTargetPlatforms.includes(extensionTargetPlatform);
}
export function getFallbackTargetPlarforms(targetPlatform) {
switch (targetPlatform) {
case 'win32-x64' /* TargetPlatform.WIN32_X64 */:
return ['win32-ia32' /* TargetPlatform.WIN32_IA32 */];
case 'win32-arm64' /* TargetPlatform.WIN32_ARM64 */:
return ['win32-ia32' /* TargetPlatform.WIN32_IA32 */];
}
return [];
}
export function isIExtensionIdentifier(thing) {
return (
thing &&
typeof thing === 'object' &&
typeof thing.id === 'string' &&
(!thing.uuid || typeof thing.uuid === 'string')
);
}
export const IExtensionGalleryService = createDecorator('extensionGalleryService');
export var ExtensionManagementErrorCode;
(function (ExtensionManagementErrorCode) {
ExtensionManagementErrorCode['Unsupported'] = 'Unsupported';
ExtensionManagementErrorCode['Deprecated'] = 'Deprecated';
ExtensionManagementErrorCode['Malicious'] = 'Malicious';
ExtensionManagementErrorCode['Incompatible'] = 'Incompatible';
ExtensionManagementErrorCode['IncompatiblePreRelease'] = 'IncompatiblePreRelease';
ExtensionManagementErrorCode['IncompatibleTargetPlatform'] = 'IncompatibleTargetPlatform';
ExtensionManagementErrorCode['ReleaseVersionNotFound'] = 'ReleaseVersionNotFound';
ExtensionManagementErrorCode['Invalid'] = 'Invalid';
ExtensionManagementErrorCode['Download'] = 'Download';
ExtensionManagementErrorCode['Extract'] = 'Extract';
ExtensionManagementErrorCode['Delete'] = 'Delete';
ExtensionManagementErrorCode['Rename'] = 'Rename';
ExtensionManagementErrorCode['CorruptZip'] = 'CorruptZip';
ExtensionManagementErrorCode['IncompleteZip'] = 'IncompleteZip';
ExtensionManagementErrorCode['Internal'] = 'Internal';
ExtensionManagementErrorCode['Signature'] = 'Signature';
})(ExtensionManagementErrorCode || (ExtensionManagementErrorCode = {}));
export class ExtensionManagementError extends Error {
code;
constructor(message, code) {
super(message);
this.code = code;
this.name = code;
}
}
export const IExtensionManagementService = createDecorator('extensionManagementService');
export const DISABLED_EXTENSIONS_STORAGE_PATH = 'extensionsIdentifiers/disabled';
export const ENABLED_EXTENSIONS_STORAGE_PATH = 'extensionsIdentifiers/enabled';
export const IGlobalExtensionEnablementService = createDecorator('IGlobalExtensionEnablementService');
export const IExtensionTipsService = createDecorator('IExtensionTipsService');
export const ExtensionsLabel = localize('extensions', 'Extensions');
export const ExtensionsLocalizedLabel = { value: ExtensionsLabel, original: 'Extensions' };
export const PreferencesLabel = localize('preferences', 'Preferences');
export const PreferencesLocalizedLabel = { value: PreferencesLabel, original: 'Preferences' };