Skip to content

Commit 3c03579

Browse files
authored
feat(config): cli.packageManager override support (#5596)
1 parent 9ff3a45 commit 3c03579

6 files changed

+35
-3
lines changed

lib/definitions/project.d.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -346,7 +346,7 @@ interface IProjectConfigService {
346346
* Get value for a given config key path
347347
* @param key the property key path
348348
*/
349-
getValue(key: string): any;
349+
getValue(key: string, defaultValue?: any): any;
350350
/**
351351
* Set value for a given config key path
352352
* @param key the property key path

lib/package-manager.ts

+22-1
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import {
1616
IDictionary,
1717
} from "./common/declarations";
1818
import { injector } from "./common/yok";
19+
import { IProjectConfigService } from "./definitions/project";
1920
export class PackageManager implements IPackageManager {
2021
private packageManager: INodePackageManager;
2122
private _packageManagerName: string;
@@ -27,7 +28,8 @@ export class PackageManager implements IPackageManager {
2728
private $yarn: INodePackageManager,
2829
private $pnpm: INodePackageManager,
2930
private $logger: ILogger,
30-
private $userSettingsService: IUserSettingsService
31+
private $userSettingsService: IUserSettingsService,
32+
private $projectConfigService: IProjectConfigService
3133
) {}
3234

3335
@cache()
@@ -140,6 +142,25 @@ export class PackageManager implements IPackageManager {
140142
);
141143
}
142144

145+
try {
146+
const configPm = this.$projectConfigService.getValue(
147+
"cli.packageManager"
148+
);
149+
150+
if (configPm) {
151+
this.$logger.trace(
152+
`Determined packageManager to use from user config is: ${configPm}`
153+
);
154+
pm = configPm;
155+
}
156+
} catch (err) {
157+
// ignore error, but log info
158+
this.$logger.trace(
159+
"Tried to read cli.packageManager from project config and failed. Error is: ",
160+
err
161+
);
162+
}
163+
143164
if (pm === PackageManagers.yarn || this.$options.yarn) {
144165
this._packageManagerName = PackageManagers.yarn;
145166
return this.$yarn;

test/ios-project-service.ts

+2
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ import {
3535
ProjectDataStub,
3636
TempServiceStub,
3737
ProjectDataServiceStub,
38+
ProjectConfigServiceStub,
3839
} from "./stubs";
3940
import { xcode } from "../lib/node/xcode";
4041
import temp = require("temp");
@@ -172,6 +173,7 @@ function createTestInjector(
172173
getSettingValue: async (settingName: string): Promise<void> => undefined,
173174
});
174175
testInjector.register("packageManager", PackageManager);
176+
testInjector.register("projectConfigService", ProjectConfigServiceStub);
175177
testInjector.register("npm", NodePackageManager);
176178
testInjector.register("yarn", YarnPackageManager);
177179
testInjector.register("xcconfigService", XcconfigService);

test/package-installation-manager.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import * as yok from "../lib/common/yok";
1515
import ChildProcessLib = require("../lib/common/child-process");
1616
import { SettingsService } from "../lib/common/test/unit-tests/stubs";
1717
import { ProjectDataService } from "../lib/services/project-data-service";
18-
import { ProjectDataStub } from "./stubs";
18+
import { ProjectConfigServiceStub, ProjectDataStub } from "./stubs";
1919
import { IInjector } from "../lib/common/definitions/yok";
2020
import * as _ from "lodash";
2121
import { IDictionary } from "../lib/common/declarations";
@@ -48,6 +48,7 @@ function createTestInjector(): IInjector {
4848
testInjector.register("yarn", YarnLib.YarnPackageManager);
4949
testInjector.register("pnpm", PnpmLib.PnpmPackageManager);
5050
testInjector.register("packageManager", PackageManagerLib.PackageManager);
51+
testInjector.register("projectConfigService", ProjectConfigServiceStub);
5152
testInjector.register(
5253
"packageInstallationManager",
5354
PackageInstallationManagerLib.PackageInstallationManager

test/plugins-service.ts

+4
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,10 @@ function createTestInjector() {
6868
getSettingValue: async (settingName: string): Promise<void> => undefined,
6969
});
7070
testInjector.register("packageManager", PackageManager);
71+
testInjector.register(
72+
"projectConfigService",
73+
stubs.PackageInstallationManagerStub
74+
);
7175
testInjector.register("npm", NodePackageManager);
7276
testInjector.register("yarn", YarnPackageManager);
7377
testInjector.register("pnpm", PnpmPackageManager);

test/services/extensibility-service.ts

+4
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,10 @@ describe("extensibilityService", () => {
5757
testInjector.register("hostInfo", HostInfo);
5858
testInjector.register("httpClient", {});
5959
testInjector.register("packageManager", PackageManager);
60+
testInjector.register(
61+
"projectConfigService",
62+
stubs.ProjectConfigServiceStub
63+
);
6064
testInjector.register("options", {});
6165
testInjector.register("pacoteService", {
6266
manifest: async (

0 commit comments

Comments
 (0)