129 lines
2.8 KiB
TypeScript
129 lines
2.8 KiB
TypeScript
/*---------------------------------------------------------------------------------------------
|
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
* Licensed under the MIT License. See License.txt in the project root for license information.
|
|
*--------------------------------------------------------------------------------------------*/
|
|
|
|
import { IProcessEnvironment } from 'vs/base/common/platform';
|
|
|
|
/**
|
|
* Options to be passed to the external program or shell.
|
|
*/
|
|
export interface CommandOptions {
|
|
/**
|
|
* The current working directory of the executed program or shell.
|
|
* If omitted VSCode's current workspace root is used.
|
|
*/
|
|
cwd?: string;
|
|
|
|
/**
|
|
* The environment of the executed program or shell. If omitted
|
|
* the parent process' environment is used.
|
|
*/
|
|
env?: { [key: string]: string; };
|
|
}
|
|
|
|
export interface Executable {
|
|
/**
|
|
* The command to be executed. Can be an external program or a shell
|
|
* command.
|
|
*/
|
|
command: string;
|
|
|
|
/**
|
|
* Specifies whether the command is a shell command and therefore must
|
|
* be executed in a shell interpreter (e.g. cmd.exe, bash, ...).
|
|
*/
|
|
isShellCommand: boolean;
|
|
|
|
/**
|
|
* The arguments passed to the command.
|
|
*/
|
|
args: string[];
|
|
|
|
/**
|
|
* The command options used when the command is executed. Can be omitted.
|
|
*/
|
|
options?: CommandOptions;
|
|
}
|
|
|
|
export interface ForkOptions extends CommandOptions {
|
|
execArgv?: string[];
|
|
}
|
|
|
|
export const enum Source {
|
|
stdout,
|
|
stderr
|
|
}
|
|
|
|
/**
|
|
* The data send via a success callback
|
|
*/
|
|
export interface SuccessData {
|
|
error?: Error;
|
|
cmdCode?: number;
|
|
terminated?: boolean;
|
|
}
|
|
|
|
/**
|
|
* The data send via a error callback
|
|
*/
|
|
export interface ErrorData {
|
|
error?: Error;
|
|
terminated?: boolean;
|
|
stdout?: string;
|
|
stderr?: string;
|
|
}
|
|
|
|
export interface TerminateResponse {
|
|
success: boolean;
|
|
code?: TerminateResponseCode;
|
|
error?: any;
|
|
}
|
|
|
|
export const enum TerminateResponseCode {
|
|
Success = 0,
|
|
Unknown = 1,
|
|
AccessDenied = 2,
|
|
ProcessNotFound = 3,
|
|
}
|
|
|
|
export interface ProcessItem {
|
|
name: string;
|
|
cmd: string;
|
|
pid: number;
|
|
ppid: number;
|
|
load: number;
|
|
mem: number;
|
|
|
|
children?: ProcessItem[];
|
|
}
|
|
|
|
/**
|
|
* Sanitizes a VS Code process environment by removing all Electron/VS Code-related values.
|
|
*/
|
|
export function sanitizeProcessEnvironment(env: IProcessEnvironment, ...preserve: string[]): void {
|
|
const set = preserve.reduce((set, key) => {
|
|
set[key] = true;
|
|
return set;
|
|
}, {} as Record<string, boolean>);
|
|
const keysToRemove = [
|
|
/^ELECTRON_.+$/,
|
|
/^GOOGLE_API_KEY$/,
|
|
/^VSCODE_.+$/,
|
|
/^SNAP(|_.*)$/,
|
|
/^GDK_PIXBUF_.+$/,
|
|
/^CODE_SERVER_.+$/,
|
|
];
|
|
const envKeys = Object.keys(env);
|
|
envKeys
|
|
.filter(key => !set[key])
|
|
.forEach(envKey => {
|
|
for (let i = 0; i < keysToRemove.length; i++) {
|
|
if (envKey.search(keysToRemove[i]) !== -1) {
|
|
delete env[envKey];
|
|
break;
|
|
}
|
|
}
|
|
});
|
|
}
|