Path: blob/main/src/vs/workbench/services/extensions/common/extensionHostProtocol.ts
5251 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};48remoteExtensionTips?: { readonly [remoteName: string]: unknown };49virtualWorkspaceExtensionTips?: { readonly [remoteName: string]: unknown };50logLevel: LogLevel;51loggers: UriDto<ILoggerResource>[];52logsLocation: URI;53autoStart: boolean;54remote: { isRemote: boolean; authority: string | undefined; connectionData: IRemoteConnectionData | null };55consoleForward: { includeStack: boolean; logNative: boolean };56uiKind: UIKind;57messagePorts?: ReadonlyMap<string, MessagePortLike>;58handle?: string;59}6061export interface IEnvironment {62isExtensionDevelopmentDebug: boolean;63appName: string;64appHost: string;65appRoot?: URI;66appLanguage: string;67isExtensionTelemetryLoggingOnly: boolean;68appUriScheme: string;69isPortable?: boolean;70extensionDevelopmentLocationURI?: URI[];71extensionTestsLocationURI?: URI;72globalStorageHome: URI;73workspaceStorageHome: URI;74useHostProxy?: boolean;75skipWorkspaceStorageLock?: boolean;76extensionLogLevel?: [string, LogLevel][];77}7879export interface IStaticWorkspaceData {80id: string;81name: string;82transient?: boolean;83configuration?: UriComponents | null;84isUntitled?: boolean | null;85isAgentSessionsWorkspace?: boolean;86}8788export interface MessagePortLike {89postMessage(message: unknown, transfer?: Transferable[]): void;90addEventListener(type: 'message', listener: (e: MessageEvent<unknown>) => unknown): void;91removeEventListener(type: 'message', listener: (e: MessageEvent<unknown>) => unknown): void;92start(): void;93}9495export enum UIKind {96Desktop = 1,97Web = 298}99100export const enum ExtensionHostExitCode {101// nodejs uses codes 1-13 and exit codes >128 are signal exits102VersionMismatch = 55,103UnexpectedError = 81,104}105106export interface IExtHostReadyMessage {107type: 'VSCODE_EXTHOST_IPC_READY';108}109110export interface IExtHostSocketMessage {111type: 'VSCODE_EXTHOST_IPC_SOCKET';112initialDataChunk: string;113skipWebSocketFrames: boolean;114permessageDeflate: boolean;115inflateBytes: string;116}117118export interface IExtHostReduceGraceTimeMessage {119type: 'VSCODE_EXTHOST_IPC_REDUCE_GRACE_TIME';120}121122export const enum MessageType {123Initialized,124Ready,125Terminate126}127128export function createMessageOfType(type: MessageType): VSBuffer {129const result = VSBuffer.alloc(1);130131switch (type) {132case MessageType.Initialized: result.writeUInt8(1, 0); break;133case MessageType.Ready: result.writeUInt8(2, 0); break;134case MessageType.Terminate: result.writeUInt8(3, 0); break;135}136137return result;138}139140export function isMessageOfType(message: VSBuffer, type: MessageType): boolean {141if (message.byteLength !== 1) {142return false;143}144145switch (message.readUInt8(0)) {146case 1: return type === MessageType.Initialized;147case 2: return type === MessageType.Ready;148case 3: return type === MessageType.Terminate;149default: return false;150}151}152153export const enum NativeLogMarkers {154Start = 'START_NATIVE_LOG',155End = 'END_NATIVE_LOG',156}157158159