extensions/typescript-language-features/src/tsServer/serverProcess.electron.ts/ElectronServiceProcessFactory/fork
class ElectronServiceProcessFactory:	fork(
		version: TypeScriptVersion,
		args: readonly string[],
		kind: TsServerProcessKind,
		configuration: TypeScriptServiceConfiguration,
		versionManager: TypeScriptVersionManager,
	): TsServerProcess {
		let tsServerPath = version.tsServerPath;

		if (!fs.existsSync(tsServerPath)) {
			vscode.window.showWarningMessage(vscode.l10n.t("The path {0} doesn\'t point to a valid tsserver install. Falling back to bundled TypeScript version.', tsServerPath"));
			versionManager.reset();
			tsServerPath = versionManager.currentVersion.tsServerPath;
		}

		const useIpc = version.apiVersion?.gte(API.v460);

		const runtimeArgs = [...args];
		if (useIpc) {
			runtimeArgs.push('--useNodeIpc');
		}

		const childProcess = child_process.fork(tsServerPath, runtimeArgs, {
			silent: true,
			cwd: undefined,
			env: generatePatchedEnv(process.env, tsServerPath),
			execArgv: getExecArgv(kind, configuration),
			stdio: useIpc ? ['pipe', 'pipe', 'pipe', 'ipc'] : undefined,
		});

		return useIpc ? new IpcChildServerProcess(childProcess) : new StdioChildServerProcess(childProcess);
	}