From e3247449f3c1a6fb1840de07b835feff44c66b38 Mon Sep 17 00:00:00 2001 From: Sam Rose Date: Mon, 23 May 2022 19:09:02 -0600 Subject: [PATCH] Avoid circular dependencies in SemVer A circular dependency between the Range and Comparator classes can cause issues for consumers who are trying to bundle extensions with vscode-languageclient as a dependency. See related GitHub issue from [npm/node-semver](https://github.com/npm/node-semver) - [[BUG] the package isn't compatible with Rollup due to require cycle #381](https://github.com/npm/node-semver/issues/381) --- client/src/node/main.ts | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/client/src/node/main.ts b/client/src/node/main.ts index 9f27b2f6f..82b6e8c5f 100644 --- a/client/src/node/main.ts +++ b/client/src/node/main.ts @@ -8,8 +8,6 @@ import ChildProcess = cp.ChildProcess; import * as fs from 'fs'; import * as path from 'path'; -import * as SemVer from 'semver'; - import { workspace as Workspace, Disposable, version as VSCodeVersion } from 'vscode'; import * as Is from '../common/utils/is'; @@ -18,6 +16,10 @@ import { BaseLanguageClient, LanguageClientOptions, MessageTransports } from '.. import { terminate } from './processes'; import { StreamMessageReader, StreamMessageWriter, IPCMessageReader, IPCMessageWriter, createClientPipeTransport, generateRandomPipeName, createClientSocketTransport, InitializeParams} from 'vscode-languageserver-protocol/node'; +// Import SemVer functions individually to avoid circular dependencies in SemVer +import semverParse = require('semver/functions/parse'); +import semverSatisfies = require('semver/functions/satisfies'); + export * from 'vscode-languageserver-protocol/node'; export * from '../common/api'; @@ -168,7 +170,7 @@ export class LanguageClient extends BaseLanguageClient { } private checkVersion() { - const codeVersion = SemVer.parse(VSCodeVersion); + const codeVersion = semverParse(VSCodeVersion); if (!codeVersion) { throw new Error(`No valid VS Code version detected. Version string is: ${VSCodeVersion}`); } @@ -176,7 +178,7 @@ export class LanguageClient extends BaseLanguageClient { if (codeVersion.prerelease && codeVersion.prerelease.length > 0) { codeVersion.prerelease = []; } - if (!SemVer.satisfies(codeVersion, REQUIRED_VSCODE_VERSION)) { + if (!semverSatisfies(codeVersion, REQUIRED_VSCODE_VERSION)) { throw new Error(`The language client requires VS Code version ${REQUIRED_VSCODE_VERSION} but received version ${VSCodeVersion}`); } }