Skip to content

Commit 1ba4656

Browse files
Improve get latest compatible version to search for major.minor.*x* versions (#3052)
* Improve get latest compatible version to search for major.minor.*any* versions * Update submodule
1 parent 381b35e commit 1ba4656

File tree

3 files changed

+19
-5
lines changed

3 files changed

+19
-5
lines changed

lib/npm-installation-manager.ts

+12-4
Original file line numberDiff line numberDiff line change
@@ -20,15 +20,23 @@ export class NpmInstallationManager implements INpmInstallationManager {
2020
}
2121

2222
public async getLatestCompatibleVersion(packageName: string): Promise<string> {
23+
const configVersion = this.$staticConfig.version;
24+
const isPreReleaseVersion = semver.prerelease(configVersion) !== null;
25+
let cliVersionRange = `~${semver.major(configVersion)}.${semver.minor(configVersion)}.0`;
26+
if (isPreReleaseVersion) {
27+
// if the user has some 0-19 pre-release version, include pre-release versions in the search query.
28+
cliVersionRange = `~${configVersion}`;
29+
}
2330

24-
let cliVersionRange = `~${this.$staticConfig.version}`;
25-
let latestVersion = await this.getLatestVersion(packageName);
31+
const latestVersion = await this.getLatestVersion(packageName);
2632
if (semver.satisfies(latestVersion, cliVersionRange)) {
2733
return latestVersion;
2834
}
29-
let data = await this.$npm.view(packageName, { "versions": true });
3035

31-
return semver.maxSatisfying(data, cliVersionRange) || latestVersion;
36+
const data = await this.$npm.view(packageName, { "versions": true });
37+
38+
const maxSatisfying = semver.maxSatisfying(data, cliVersionRange);
39+
return maxSatisfying || latestVersion;
3240
}
3341

3442
public async install(packageName: string, projectDir: string, opts?: INpmInstallOptions): Promise<any> {

test/npm-installation-manager.ts

+6
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,12 @@ describe("Npm installation manager tests", () => {
146146
packageLatestVersion: "1.4.0",
147147
cliVersion: "1.6.0-2016-10-01-182",
148148
expectedResult: "1.4.0"
149+
},
150+
"When CLI Version has patch version larger than an existing package, should return max compliant package from the same major.minor version": {
151+
versions: ["1.0.0", "1.0.1", "1.4.0", "2.5.0", "2.5.1", "2.5.2", "3.0.0"],
152+
packageLatestVersion: "3.0.0",
153+
cliVersion: "2.5.4",
154+
expectedResult: "2.5.2"
149155
}
150156
};
151157

0 commit comments

Comments
 (0)