/*---------------------------------------------------------------------------------------------
 *  Copyright (c) Microsoft Corporation. All rights reserved.
 *  Licensed under the MIT License. See License.txt in the project root for license information.
 *--------------------------------------------------------------------------------------------*/

import { SerializedError } from '@sussudio/base/common/errors.mjs';
import { Disposable, IDisposable } from '@sussudio/base/common/lifecycle.mjs';
import { IExtensionHostProcessOptions, IExtensionHostStarter } from '../common/extensionHostStarter.mjs';
import { Emitter, Event } from '@sussudio/base/common/event.mjs';
import { ILogService } from '../../log/common/log.mjs';
import { ILifecycleMainService } from '../../lifecycle/electron-main/lifecycleMainService.mjs';
import { IWindowsMainService } from '../../windows/electron-main/windows.mjs';
export declare class ExtensionHostStarter implements IDisposable, IExtensionHostStarter {
	private readonly _logService;
	private readonly _windowsMainService;
	_serviceBrand: undefined;
	private static _lastId;
	protected readonly _extHosts: Map<string, ExtensionHostProcess | UtilityExtensionHostProcess>;
	private _shutdown;
	constructor(
		_logService: ILogService,
		lifecycleMainService: ILifecycleMainService,
		_windowsMainService: IWindowsMainService,
	);
	dispose(): void;
	private _getExtHost;
	onDynamicStdout(id: string): Event<string>;
	onDynamicStderr(id: string): Event<string>;
	onDynamicMessage(id: string): Event<any>;
	onDynamicError(id: string): Event<{
		error: SerializedError;
	}>;
	onDynamicExit(id: string): Event<{
		code: number;
		signal: string;
	}>;
	canUseUtilityProcess(): Promise<boolean>;
	createExtensionHost(useUtilityProcess: boolean): Promise<{
		id: string;
	}>;
	start(id: string, opts: IExtensionHostProcessOptions): Promise<void>;
	enableInspectPort(id: string): Promise<boolean>;
	kill(id: string): Promise<void>;
	_killAllNow(): Promise<void>;
	_waitForAllExit(maxWaitTimeMs: number): Promise<void>;
}
declare class ExtensionHostProcess extends Disposable {
	readonly id: string;
	private readonly _logService;
	readonly _onStdout: Emitter<string>;
	readonly onStdout: Event<string>;
	readonly _onStderr: Emitter<string>;
	readonly onStderr: Event<string>;
	readonly _onMessage: Emitter<any>;
	readonly onMessage: Event<any>;
	readonly _onError: Emitter<{
		error: SerializedError;
	}>;
	readonly onError: Event<{
		error: SerializedError;
	}>;
	readonly _onExit: Emitter<{
		pid: number;
		code: number;
		signal: string;
	}>;
	readonly onExit: Event<{
		pid: number;
		code: number;
		signal: string;
	}>;
	private _process;
	private _hasExited;
	constructor(id: string, _logService: ILogService);
	start(opts: IExtensionHostProcessOptions): void;
	enableInspectPort(): boolean;
	kill(): void;
	waitForExit(maxWaitTimeMs: number): Promise<void>;
}
declare class UtilityExtensionHostProcess extends Disposable {
	readonly id: string;
	private readonly _logService;
	private readonly _windowsMainService;
	readonly onError: Event<any>;
	readonly _onStdout: Emitter<string>;
	readonly onStdout: Event<string>;
	readonly _onStderr: Emitter<string>;
	readonly onStderr: Event<string>;
	readonly _onMessage: Emitter<any>;
	readonly onMessage: Event<any>;
	readonly _onExit: Emitter<{
		pid: number;
		code: number;
		signal: string;
	}>;
	readonly onExit: Event<{
		pid: number;
		code: number;
		signal: string;
	}>;
	private _process;
	private _hasExited;
	constructor(id: string, _logService: ILogService, _windowsMainService: IWindowsMainService);
	start(opts: IExtensionHostProcessOptions): void;
	enableInspectPort(): boolean;
	kill(): void;
	waitForExit(maxWaitTimeMs: number): Promise<void>;
}
export {};
