sussudio
Version:
An unofficial VS Code Internal API
51 lines (50 loc) • 3.02 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 "../../../base/common/path.mjs";
import { URI } from "../../../base/common/uri.mjs";
import { ProxyChannel } from "../../../base/parts/ipc/common/ipc.mjs";
import { Server } from "../../../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();
});