Skip to content

Commit 77b0515

Browse files
fix: Platform add hangs when invalid frameworkPath is passed
In case non-existent file is passed to `--frameworkPath` the `tns platform add ...` command hangs. Fix this by checking if the passed value is correct.
1 parent 6ecd8fc commit 77b0515

File tree

3 files changed

+21
-1
lines changed

3 files changed

+21
-1
lines changed

lib/constants.ts

+4
Original file line numberDiff line numberDiff line change
@@ -208,3 +208,7 @@ export class Hooks {
208208
}
209209

210210
export const PACKAGE_PLACEHOLDER_NAME = "__PACKAGE__";
211+
212+
export class AddPlaformErrors {
213+
public static InvalidFrameworkPathStringFormat = "Invalid frameworkPath: %s. Please ensure the specified frameworkPath exists.";
214+
}

lib/services/platform-service.ts

+5
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import * as constants from "../constants";
44
import { Configurations } from "../common/constants";
55
import * as helpers from "../common/helpers";
66
import * as semver from "semver";
7+
import { format } from "util";
78
import { EventEmitter } from "events";
89
import { AppFilesUpdater } from "./app-files-updater";
910
import { attachAwaitDetach } from "../common/helpers";
@@ -104,6 +105,10 @@ export class PlatformService extends EventEmitter implements IPlatformService {
104105
let packageToInstall = "";
105106
if (frameworkPath) {
106107
packageToInstall = path.resolve(frameworkPath);
108+
if (!this.$fs.exists(packageToInstall)) {
109+
const errorMessage = format(constants.AddPlaformErrors.InvalidFrameworkPathStringFormat, frameworkPath);
110+
this.$errors.fail(errorMessage);
111+
}
107112
} else {
108113
if (!version) {
109114
version = this.getCurrentPlatformVersion(platform, projectData) ||

test/platform-service.ts

+12-1
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,13 @@ import * as yok from "../lib/common/yok";
22
import * as stubs from "./stubs";
33
import * as PlatformServiceLib from "../lib/services/platform-service";
44
import * as StaticConfigLib from "../lib/config";
5-
import { VERSION_STRING, PACKAGE_JSON_FILE_NAME } from "../lib/constants";
5+
import { VERSION_STRING, PACKAGE_JSON_FILE_NAME, AddPlaformErrors } from "../lib/constants";
66
import * as fsLib from "../lib/common/file-system";
77
import * as optionsLib from "../lib/options";
88
import * as hostInfoLib from "../lib/common/host-info";
99
import * as ProjectFilesManagerLib from "../lib/common/services/project-files-manager";
1010
import * as path from "path";
11+
import { format } from "util";
1112
import { assert } from "chai";
1213
import { DeviceAppDataFactory } from "../lib/common/mobile/device-app-data/device-app-data-factory";
1314
import { LocalToDevicePathDataFactory } from "../lib/common/mobile/local-to-device-path-data-factory";
@@ -232,6 +233,16 @@ describe('Platform Service Tests', () => {
232233
await assert.isRejected(platformService.addPlatforms(["android"], "", projectData, config), errorMessage);
233234
});
234235

236+
it("fails when path passed to frameworkPath does not exist", async () => {
237+
const fs = testInjector.resolve("fs");
238+
fs.exists = () => false;
239+
240+
const projectData: IProjectData = testInjector.resolve("projectData");
241+
const frameworkPath = "invalidPath";
242+
const errorMessage = format(AddPlaformErrors.InvalidFrameworkPathStringFormat, frameworkPath);
243+
await assert.isRejected(platformService.addPlatforms(["android"], "", projectData, config, frameworkPath), errorMessage);
244+
});
245+
235246
const assertCorrectDataIsPassedToPacoteService = async (versionString: string): Promise<void> => {
236247
const fs = testInjector.resolve("fs");
237248
fs.exists = () => false;

0 commit comments

Comments
 (0)