@sussudio/platform
Version:
Internal APIs for VS Code's service injection the base services.
51 lines (50 loc) • 3 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 { join } from '@sussudio/base/common/path.mjs';
import { URI } from '@sussudio/base/common/uri.mjs';
import { ProxyChannel } from '@sussudio/base/parts/ipc/common/ipc.mjs';
import { Server } from '@sussudio/base/parts/ipc/node/ipc.cp.mjs';
import { OPTIONS, parseArgs } from '../../environment/node/argv.mjs';
import { NativeEnvironmentService } from '../../environment/node/environmentService.mjs';
import { BufferLogService } from '../../log/common/bufferLog.mjs';
import { ConsoleLogger, LogService, MultiplexLogService } from '../../log/common/log.mjs';
import { LogLevelChannel } from '../../log/common/logIpc.mjs';
import { LoggerService } from '../../log/node/loggerService.mjs';
import product from '../../product/common/product.mjs';
import { TerminalIpcChannels } from '../common/terminal.mjs';
import { HeartbeatService } from './heartbeatService.mjs';
import { PtyService } from './ptyService.mjs';
const server = new Server('ptyHost');
const lastPtyId = parseInt(process.env.VSCODE_LAST_PTY_ID || '0');
delete process.env.VSCODE_LAST_PTY_ID;
// Logging
const productService = { _serviceBrand: undefined, ...product };
const environmentService = new NativeEnvironmentService(parseArgs(process.argv, OPTIONS), productService);
const bufferLogService = new BufferLogService();
const logService = new LogService(new MultiplexLogService([new ConsoleLogger(), bufferLogService]));
const loggerService = new LoggerService(logService);
bufferLogService.logger = loggerService.createLogger(
URI.file(join(environmentService.logsPath, `${'ptyhost' /* TerminalLogConstants.FileName */}.log`)),
{ name: 'ptyhost' /* TerminalLogConstants.FileName */ },
);
const logLevelChannel = new LogLevelChannel(logService, loggerService);
server.registerChannel(TerminalIpcChannels.Log, logLevelChannel);
const heartbeatService = new HeartbeatService();
server.registerChannel(TerminalIpcChannels.Heartbeat, ProxyChannel.fromService(heartbeatService));
const reconnectConstants = {
graceTime: parseInt(process.env.VSCODE_RECONNECT_GRACE_TIME || '0'),
shortGraceTime: parseInt(process.env.VSCODE_RECONNECT_SHORT_GRACE_TIME || '0'),
scrollback: parseInt(process.env.VSCODE_RECONNECT_SCROLLBACK || '100'),
};
delete process.env.VSCODE_RECONNECT_GRACE_TIME;
delete process.env.VSCODE_RECONNECT_SHORT_GRACE_TIME;
delete process.env.VSCODE_RECONNECT_SCROLLBACK;
const ptyService = new PtyService(lastPtyId, logService, productService, reconnectConstants);
server.registerChannel(TerminalIpcChannels.PtyHost, ProxyChannel.fromService(ptyService));
process.once('exit', () => {
logService.dispose();
heartbeatService.dispose();
ptyService.dispose();
});