UNPKG

@sussudio/platform

Version:

Internal APIs for VS Code's service injection the base services.

51 lines (50 loc) 3 kB
/*--------------------------------------------------------------------------------------------- * 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(); });