Skip to content

Commit 646aa5d

Browse files
committed
fix() - ensure packageManager is used everywhere
1 parent 7f14263 commit 646aa5d

22 files changed

+99
-65
lines changed

lib/bootstrap.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ $injector.requirePublic("npm", "./node-package-manager");
8484
$injector.requirePublic("yarn", "./yarn-package-manager");
8585
$injector.requireCommand("package-manager|set", "./commands/package-manager-set");
8686

87-
$injector.require("npmInstallationManager", "./npm-installation-manager");
87+
$injector.require("packageInstallationManager", "./package-installation-manager");
8888
$injector.require("dynamicHelpProvider", "./dynamic-help-provider");
8989
$injector.require("mobilePlatformsCapabilities", "./mobile-platforms-capabilities");
9090
$injector.require("commandsServiceProvider", "./providers/commands-service-provider");

lib/declarations.d.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ interface INodePackageManager {
5454
getCachePath(): Promise<string>;
5555
}
5656

57-
interface INpmInstallationManager {
57+
interface IPackageInstallationManager {
5858
install(packageName: string, packageDir: string, options?: INpmInstallOptions): Promise<any>;
5959
getLatestVersion(packageName: string): Promise<string>;
6060
getNextVersion(packageName: string): Promise<string>;

lib/npm-installation-manager.ts renamed to lib/package-installation-manager.ts

+7-6
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,9 @@ import * as path from "path";
22
import * as semver from "semver";
33
import * as constants from "./constants";
44

5-
export class NpmInstallationManager implements INpmInstallationManager {
6-
constructor(private $npm: INodePackageManager,
5+
export class PackageInstallationManager implements IPackageInstallationManager {
6+
constructor(
7+
private $packageManager: INodePackageManager,
78
private $childProcess: IChildProcess,
89
private $logger: ILogger,
910
private $settingsService: ISettingsService,
@@ -32,7 +33,7 @@ export class NpmInstallationManager implements INpmInstallationManager {
3233
return latestVersion;
3334
}
3435

35-
const data = await this.$npm.view(packageName, { "versions": true });
36+
const data = await this.$packageManager.view(packageName, { "versions": true });
3637

3738
const maxSatisfying = semver.maxSatisfying(data, compatibleVersionRange);
3839
return maxSatisfying || latestVersion;
@@ -144,18 +145,18 @@ export class NpmInstallationManager implements INpmInstallationManager {
144145
npmOptions[dependencyType] = true;
145146
}
146147

147-
return await this.$npm.install(packageName, pathToSave, npmOptions);
148+
return await this.$packageManager.install(packageName, pathToSave, npmOptions);
148149
}
149150

150151
/**
151152
* This function must not be used with packageName being a URL or local file,
152153
* because npm view doens't work with those
153154
*/
154155
private async getVersion(packageName: string, version: string): Promise<string> {
155-
const data: any = await this.$npm.view(packageName, { "dist-tags": true });
156+
const data: any = await this.$packageManager.view(packageName, { "dist-tags": true });
156157
this.$logger.trace("Using version %s. ", data[version]);
157158

158159
return data[version];
159160
}
160161
}
161-
$injector.register("npmInstallationManager", NpmInstallationManager);
162+
$injector.register("packageInstallationManager", PackageInstallationManager);

lib/services/extensibility-service.ts

+5-5
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ export class ExtensibilityService implements IExtensibilityService {
1414

1515
constructor(private $fs: IFileSystem,
1616
private $logger: ILogger,
17-
private $npm: INodePackageManager,
17+
private $packageManager: INodePackageManager,
1818
private $settingsService: ISettingsService,
1919
private $requireService: IRequireService) {
2020
}
@@ -33,7 +33,7 @@ export class ExtensibilityService implements IExtensibilityService {
3333
const localPath = path.resolve(extensionName);
3434
const packageName = this.$fs.exists(localPath) ? localPath : extensionName;
3535

36-
const installResultInfo = await this.$npm.install(packageName, this.pathToExtensions, npmOpts);
36+
const installResultInfo = await this.$packageManager.install(packageName, this.pathToExtensions, npmOpts);
3737
this.$logger.trace(`Finished installation of extension '${extensionName}'. Trying to load it now.`);
3838

3939
return this.getInstalledExtensionData(installResultInfo.name);
@@ -45,7 +45,7 @@ export class ExtensibilityService implements IExtensibilityService {
4545

4646
await this.assertPackageJsonExists();
4747

48-
await this.$npm.uninstall(extensionName, { save: true }, this.pathToExtensions);
48+
await this.$packageManager.uninstall(extensionName, { save: true }, this.pathToExtensions);
4949

5050
this.$logger.trace(`Finished uninstallation of extension '${extensionName}'.`);
5151
}
@@ -112,7 +112,7 @@ export class ExtensibilityService implements IExtensibilityService {
112112
let allExtensions: INpmsSingleResultData[] = [];
113113

114114
try {
115-
const npmsResult = await this.$npm.searchNpms("nativescript:extension");
115+
const npmsResult = await this.$packageManager.searchNpms("nativescript:extension");
116116
allExtensions = npmsResult.results || [];
117117
} catch (err) {
118118
this.$logger.trace(`Unable to find extensions via npms. Error is: ${err}`);
@@ -127,7 +127,7 @@ export class ExtensibilityService implements IExtensibilityService {
127127

128128
try {
129129
// now get full package.json for the latest version of the package
130-
const registryData = await this.$npm.getRegistryPackageData(extensionName);
130+
const registryData = await this.$packageManager.getRegistryPackageData(extensionName);
131131
const latestPackageData = registryData.versions[registryData["dist-tags"].latest];
132132
const commands: string[] = latestPackageData && latestPackageData.nativescript && latestPackageData.nativescript.commands;
133133
if (commands && commands.length) {

lib/services/init-service.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ export class InitService implements IInitService {
2222
private $projectHelper: IProjectHelper,
2323
private $prompter: IPrompter,
2424
private $packageManager: INodePackageManager,
25-
private $npmInstallationManager: INpmInstallationManager) { }
25+
private $packageInstallationManager: IPackageInstallationManager) { }
2626

2727
public async initialize(): Promise<void> {
2828
let projectData: any = {};
@@ -100,7 +100,7 @@ export class InitService implements IInitService {
100100
}
101101

102102
private async getVersionData(packageName: string): Promise<IStringDictionary> {
103-
const latestVersion = await this.$npmInstallationManager.getLatestCompatibleVersion(packageName);
103+
const latestVersion = await this.$packageInstallationManager.getLatestCompatibleVersion(packageName);
104104

105105
if (this.useDefaultValue) {
106106
return this.buildVersionData(latestVersion);

lib/services/ios-debug-service.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ export class IOSDebugService extends DebugServiceBase implements IPlatformDebugS
2424
private $hostInfo: IHostInfo,
2525
private $logger: ILogger,
2626
private $errors: IErrors,
27-
private $npmInstallationManager: INpmInstallationManager,
27+
private $packageInstallationManager: IPackageInstallationManager,
2828
private $iOSDebuggerPortService: IIOSDebuggerPortService,
2929
private $iOSNotification: IiOSNotification,
3030
private $iOSSocketRequestExecutor: IiOSSocketRequestExecutor,
@@ -219,7 +219,7 @@ export class IOSDebugService extends DebugServiceBase implements IPlatformDebugS
219219

220220
private async openAppInspector(fileDescriptor: string, debugData: IDebugData, debugOptions: IDebugOptions): Promise<void> {
221221
if (debugOptions.client) {
222-
const inspectorPath = await this.$npmInstallationManager.getInspectorFromCache(inspectorNpmPackageName, debugData.projectDir);
222+
const inspectorPath = await this.$packageInstallationManager.getInspectorFromCache(inspectorNpmPackageName, debugData.projectDir);
223223

224224
const inspectorSourceLocation = path.join(inspectorPath, inspectorUiDir, "Main.html");
225225
const inspectorApplicationPath = path.join(inspectorPath, inspectorAppName);

lib/services/nativescript-cloud-extension-service.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import * as semver from "semver";
44
export class NativeScriptCloudExtensionService implements INativeScriptCloudExtensionService {
55
constructor(private $extensibilityService: IExtensibilityService,
66
private $logger: ILogger,
7-
private $npmInstallationManager: INpmInstallationManager) { }
7+
private $packageInstallationManager: IPackageInstallationManager) { }
88

99
public install(): Promise<IExtensionData> {
1010
if (!this.isInstalled()) {
@@ -21,7 +21,7 @@ export class NativeScriptCloudExtensionService implements INativeScriptCloudExte
2121
public async isLatestVersionInstalled(): Promise<boolean> {
2222
const extensionData = this.getExtensionData();
2323
if (extensionData) {
24-
const latestVersion = await this.$npmInstallationManager.getLatestVersion(constants.NATIVESCRIPT_CLOUD_EXTENSION_NAME);
24+
const latestVersion = await this.$packageInstallationManager.getLatestVersion(constants.NATIVESCRIPT_CLOUD_EXTENSION_NAME);
2525
return semver.eq(latestVersion, extensionData.version);
2626
}
2727

lib/services/platform-service.ts

+4-4
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ export class PlatformService extends EventEmitter implements IPlatformService {
2828
private $errors: IErrors,
2929
private $fs: IFileSystem,
3030
private $logger: ILogger,
31-
private $npmInstallationManager: INpmInstallationManager,
31+
private $packageInstallationManager: IPackageInstallationManager,
3232
private $platformsData: IPlatformsData,
3333
private $projectDataService: IProjectDataService,
3434
private $hooksService: IHooksService,
@@ -113,7 +113,7 @@ export class PlatformService extends EventEmitter implements IPlatformService {
113113
} else {
114114
if (!version) {
115115
version = this.getCurrentPlatformVersion(platform, projectData) ||
116-
await this.$npmInstallationManager.getLatestCompatibleVersion(platformData.frameworkPackageName);
116+
await this.$packageInstallationManager.getLatestCompatibleVersion(platformData.frameworkPackageName);
117117
}
118118

119119
packageToInstall = `${platformData.frameworkPackageName}@${version}`;
@@ -914,8 +914,8 @@ export class PlatformService extends EventEmitter implements IPlatformService {
914914

915915
const installedModuleDir = temp.mkdirSync("runtime-to-update");
916916
let newVersion = version === constants.PackageVersion.NEXT ?
917-
await this.$npmInstallationManager.getNextVersion(platformData.frameworkPackageName) :
918-
version || await this.$npmInstallationManager.getLatestCompatibleVersion(platformData.frameworkPackageName);
917+
await this.$packageInstallationManager.getNextVersion(platformData.frameworkPackageName) :
918+
version || await this.$packageInstallationManager.getLatestCompatibleVersion(platformData.frameworkPackageName);
919919
await this.$pacoteService.extractPackage(`${platformData.frameworkPackageName}@${newVersion}`, installedModuleDir);
920920
const cachedPackageData = this.$fs.readJson(path.join(installedModuleDir, "package.json"));
921921
newVersion = (cachedPackageData && cachedPackageData.version) || newVersion;

lib/services/project-service.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ export class ProjectService implements IProjectService {
1919
private $projectNameService: IProjectNameService,
2020
private $projectTemplatesService: IProjectTemplatesService,
2121
private $staticConfig: IStaticConfig,
22-
private $npmInstallationManager: INpmInstallationManager) { }
22+
private $packageInstallationManager: IPackageInstallationManager) { }
2323

2424
public async validateProjectName(opts: { projectName: string, force: boolean, pathToProject: string }) : Promise<string> {
2525
let projectName = opts.projectName;
@@ -245,7 +245,7 @@ export class ProjectService implements IProjectService {
245245
const projectFilePath = path.join(projectDir, this.$staticConfig.PROJECT_FILE_NAME);
246246
const packageJsonData = this.$fs.readJson(projectFilePath);
247247

248-
const version = await this.$npmInstallationManager.getLatestCompatibleVersion(constants.TNS_CORE_MODULES_NAME);
248+
const version = await this.$packageInstallationManager.getLatestCompatibleVersion(constants.TNS_CORE_MODULES_NAME);
249249
packageJsonData.dependencies[constants.TNS_CORE_MODULES_NAME] = version;
250250

251251
this.$fs.writeJson(projectFilePath, packageJsonData);

lib/services/project-templates-service.ts

+4-4
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ export class ProjectTemplatesService implements IProjectTemplatesService {
1010
public constructor(private $analyticsService: IAnalyticsService,
1111
private $fs: IFileSystem,
1212
private $logger: ILogger,
13-
private $npmInstallationManager: INpmInstallationManager,
13+
private $packageInstallationManager: IPackageInstallationManager,
1414
private $pacoteService: IPacoteService,
1515
private $errors: IErrors) { }
1616

@@ -86,15 +86,15 @@ export class ProjectTemplatesService implements IProjectTemplatesService {
8686

8787
/**
8888
* Install verified NativeScript template in the npm cache.
89-
* The "special" here is that npmInstallationManager will check current CLI version and will instal best matching version of the template.
90-
* For example in case CLI is version 10.12.8, npmInstallationManager will try to find latest 10.12.x version of the template.
89+
* The "special" here is that packageInstallationManager will check current CLI version and will instal best matching version of the template.
90+
* For example in case CLI is version 10.12.8, packageInstallationManager will try to find latest 10.12.x version of the template.
9191
* @param {string} templateName The name of the verified NativeScript template.
9292
* @param {string} version The version of the template specified by user.
9393
* @return {string} Path to the directory where the template is installed.
9494
*/
9595
private async prepareNativeScriptTemplate(templateName: string, version?: string, projectDir?: string): Promise<string> {
9696
this.$logger.trace(`Using NativeScript verified template: ${templateName} with version ${version}.`);
97-
return this.$npmInstallationManager.install(templateName, projectDir, { version: version, dependencyType: "save" });
97+
return this.$packageInstallationManager.install(templateName, projectDir, { version: version, dependencyType: "save" });
9898
}
9999

100100
private getTemplateNameToBeTracked(templateName: string, packageJsonContent: any): string {

lib/services/versions-service.ts

+4-4
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ class VersionsService implements IVersionsService {
1717
private projectData: IProjectData;
1818

1919
constructor(private $fs: IFileSystem,
20-
private $npmInstallationManager: INpmInstallationManager,
20+
private $packageInstallationManager: IPackageInstallationManager,
2121
private $injector: IInjector,
2222
private $logger: ILogger,
2323
private $staticConfig: Config.IStaticConfig,
@@ -28,7 +28,7 @@ class VersionsService implements IVersionsService {
2828

2929
public async getNativescriptCliVersion(): Promise<IVersionInformation> {
3030
const currentCliVersion = this.$staticConfig.version;
31-
const latestCliVersion = await this.$npmInstallationManager.getLatestVersion(constants.NATIVESCRIPT_KEY_NAME);
31+
const latestCliVersion = await this.$packageInstallationManager.getLatestVersion(constants.NATIVESCRIPT_KEY_NAME);
3232

3333
return {
3434
componentName: constants.NATIVESCRIPT_KEY_NAME,
@@ -38,7 +38,7 @@ class VersionsService implements IVersionsService {
3838
}
3939

4040
public async getTnsCoreModulesVersion(): Promise<IVersionInformation> {
41-
const latestTnsCoreModulesVersion = await this.$npmInstallationManager.getLatestVersion(constants.TNS_CORE_MODULES_NAME);
41+
const latestTnsCoreModulesVersion = await this.$packageInstallationManager.getLatestVersion(constants.TNS_CORE_MODULES_NAME);
4242
const nativescriptCoreModulesInfo: IVersionInformation = {
4343
componentName: constants.TNS_CORE_MODULES_NAME,
4444
latestVersion: latestTnsCoreModulesVersion
@@ -72,7 +72,7 @@ class VersionsService implements IVersionsService {
7272
}
7373

7474
const runtimesVersions: IVersionInformation[] = await Promise.all(runtimes.map(async (runtime: string) => {
75-
const latestRuntimeVersion = await this.$npmInstallationManager.getLatestVersion(runtime);
75+
const latestRuntimeVersion = await this.$packageInstallationManager.getLatestVersion(runtime);
7676
const runtimeInformation: IVersionInformation = {
7777
componentName: runtime,
7878
latestVersion: latestRuntimeVersion

test/npm-installation-manager.ts

+19-6
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,10 @@ import * as ErrorsLib from "../lib/common/errors";
44
import * as FsLib from "../lib/common/file-system";
55
import * as HostInfoLib from "../lib/common/host-info";
66
import * as LoggerLib from "../lib/common/logger";
7-
import * as NpmInstallationManagerLib from "../lib/npm-installation-manager";
7+
import * as NpmLib from "../lib/node-package-manager";
8+
import * as YarnLib from "../lib/yarn-package-manager";
9+
import * as PackageManagerLib from "../lib/package-manager";
10+
import * as PackageInstallationManagerLib from "../lib/package-installation-manager";
811
import * as OptionsLib from "../lib/options";
912
import * as StaticConfigLib from "../lib/config";
1013
import * as yok from "../lib/common/yok";
@@ -28,7 +31,17 @@ function createTestInjector(): IInjector {
2831
testInjector.register("devicePlatformsConstants", {});
2932
testInjector.register("androidResourcesMigrationService", {});
3033

31-
testInjector.register("npmInstallationManager", NpmInstallationManagerLib.NpmInstallationManager);
34+
testInjector.register("httpClient", {});
35+
testInjector.register("pacoteService", {
36+
manifest: () => Promise.resolve(),
37+
});
38+
testInjector.register("userSettingsService", {
39+
getSettingValue: async (settingName: string): Promise<void> => undefined
40+
});
41+
testInjector.register("npm", NpmLib.NodePackageManager);
42+
testInjector.register("yarn", YarnLib.YarnPackageManager);
43+
testInjector.register("packageManager", PackageManagerLib.PackageManager);
44+
testInjector.register("packageInstallationManager", PackageInstallationManagerLib.PackageInstallationManager);
3245

3346
return testInjector;
3447
}
@@ -185,11 +198,11 @@ describe("Npm installation manager tests", () => {
185198
const staticConfig = testInjector.resolve("staticConfig");
186199
staticConfig.version = currentTestData.cliVersion;
187200

188-
// Mock npmInstallationManager.getLatestVersion
189-
const npmInstallationManager = testInjector.resolve("npmInstallationManager");
190-
npmInstallationManager.getLatestVersion = (packageName: string) => Promise.resolve(currentTestData.packageLatestVersion);
201+
// Mock packageInstallationManager.getLatestVersion
202+
const packageInstallationManager = testInjector.resolve("packageInstallationManager");
203+
packageInstallationManager.getLatestVersion = (packageName: string) => Promise.resolve(currentTestData.packageLatestVersion);
191204

192-
const actualLatestCompatibleVersion = await npmInstallationManager.getLatestCompatibleVersion("", currentTestData.referenceVersion);
205+
const actualLatestCompatibleVersion = await packageInstallationManager.getLatestCompatibleVersion("", currentTestData.referenceVersion);
193206
assert.equal(actualLatestCompatibleVersion, currentTestData.expectedResult);
194207
});
195208
});

test/npm-support.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ function createTestInjector(): IInjector {
5151
testInjector.register("platformsData", PlatformsDataLib.PlatformsData);
5252
testInjector.register("platformService", PlatformServiceLib.PlatformService);
5353
testInjector.register("logger", stubs.LoggerStub);
54-
testInjector.register("npmInstallationManager", {
54+
testInjector.register("packageInstallationManager", {
5555
install: () => Promise.resolve()
5656
});
5757
testInjector.register("prompter", {});

test/platform-commands.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ function createTestInjector() {
105105
testInjector.register('platformService', PlatformServiceLib.PlatformService);
106106
testInjector.register('errors', ErrorsNoFailStub);
107107
testInjector.register('logger', stubs.LoggerStub);
108-
testInjector.register('npmInstallationManager', stubs.NpmInstallationManagerStub);
108+
testInjector.register('packageInstallationManager', stubs.PackageInstallationManagerStub);
109109
testInjector.register('projectData', stubs.ProjectDataStub);
110110
testInjector.register('platformsData', PlatformsData);
111111
testInjector.register('devicesService', {});

0 commit comments

Comments
 (0)