Path: blob/main/src/vs/workbench/services/extensions/common/extensionHostProtocol.ts
3296 views
/*---------------------------------------------------------------------------------------------1* Copyright (c) Microsoft Corporation. All rights reserved.2* Licensed under the MIT License. See License.txt in the project root for license information.3*--------------------------------------------------------------------------------------------*/45import { VSBuffer } from '../../../../base/common/buffer.js';6import { URI, UriComponents, UriDto } from '../../../../base/common/uri.js';7import { ExtensionIdentifier, IExtensionDescription } from '../../../../platform/extensions/common/extensions.js';8import { ILoggerResource, LogLevel } from '../../../../platform/log/common/log.js';9import { IRemoteConnectionData } from '../../../../platform/remote/common/remoteAuthorityResolver.js';1011export interface IExtensionDescriptionSnapshot {12readonly versionId: number;13readonly allExtensions: IExtensionDescription[];14readonly activationEvents: { [extensionId: string]: string[] };15readonly myExtensions: ExtensionIdentifier[];16}1718export interface IExtensionDescriptionDelta {19readonly versionId: number;20readonly toRemove: ExtensionIdentifier[];21readonly toAdd: IExtensionDescription[];22readonly addActivationEvents: { [extensionId: string]: string[] };23readonly myToRemove: ExtensionIdentifier[];24readonly myToAdd: ExtensionIdentifier[];25}2627export interface IExtensionHostInitData {28version: string;29quality: string | undefined;30commit?: string;31date?: string;32/**33* When set to `0`, no polling for the parent process still running will happen.34*/35parentPid: number | 0;36environment: IEnvironment;37workspace?: IStaticWorkspaceData | null;38extensions: IExtensionDescriptionSnapshot;39nlsBaseUrl?: URI;40telemetryInfo: {41readonly sessionId: string;42readonly machineId: string;43readonly sqmId: string;44readonly devDeviceId: string;45readonly firstSessionDate: string;46readonly msftInternal?: boolean;47};48logLevel: LogLevel;49loggers: UriDto<ILoggerResource>[];50logsLocation: URI;51autoStart: boolean;52remote: { isRemote: boolean; authority: string | undefined; connectionData: IRemoteConnectionData | null };53consoleForward: { includeStack: boolean; logNative: boolean };54uiKind: UIKind;55messagePorts?: ReadonlyMap<string, MessagePortLike>;56handle?: string;57}5859export interface IEnvironment {60isExtensionDevelopmentDebug: boolean;61appName: string;62appHost: string;63appRoot?: URI;64appLanguage: string;65isExtensionTelemetryLoggingOnly: boolean;66appUriScheme: string;67extensionDevelopmentLocationURI?: URI[];68extensionTestsLocationURI?: URI;69globalStorageHome: URI;70workspaceStorageHome: URI;71useHostProxy?: boolean;72skipWorkspaceStorageLock?: boolean;73extensionLogLevel?: [string, string][];74}7576export interface IStaticWorkspaceData {77id: string;78name: string;79transient?: boolean;80configuration?: UriComponents | null;81isUntitled?: boolean | null;82}8384export interface MessagePortLike {85postMessage(message: any, transfer?: any[]): void;86addEventListener(type: 'message', listener: (e: any) => unknown): void;87removeEventListener(type: 'message', listener: (e: any) => unknown): void;88start(): void;89}9091export enum UIKind {92Desktop = 1,93Web = 294}9596export const enum ExtensionHostExitCode {97// nodejs uses codes 1-13 and exit codes >128 are signal exits98VersionMismatch = 55,99UnexpectedError = 81,100}101102export interface IExtHostReadyMessage {103type: 'VSCODE_EXTHOST_IPC_READY';104}105106export interface IExtHostSocketMessage {107type: 'VSCODE_EXTHOST_IPC_SOCKET';108initialDataChunk: string;109skipWebSocketFrames: boolean;110permessageDeflate: boolean;111inflateBytes: string;112}113114export interface IExtHostReduceGraceTimeMessage {115type: 'VSCODE_EXTHOST_IPC_REDUCE_GRACE_TIME';116}117118export const enum MessageType {119Initialized,120Ready,121Terminate122}123124export function createMessageOfType(type: MessageType): VSBuffer {125const result = VSBuffer.alloc(1);126127switch (type) {128case MessageType.Initialized: result.writeUInt8(1, 0); break;129case MessageType.Ready: result.writeUInt8(2, 0); break;130case MessageType.Terminate: result.writeUInt8(3, 0); break;131}132133return result;134}135136export function isMessageOfType(message: VSBuffer, type: MessageType): boolean {137if (message.byteLength !== 1) {138return false;139}140141switch (message.readUInt8(0)) {142case 1: return type === MessageType.Initialized;143case 2: return type === MessageType.Ready;144case 3: return type === MessageType.Terminate;145default: return false;146}147}148149export const enum NativeLogMarkers {150Start = 'START_NATIVE_LOG',151End = 'END_NATIVE_LOG',152}153154155