Skip to content

Commit 78df478

Browse files
FatmeFatme
Fatme
authored and
Fatme
committed
Merge pull request #589 from NativeScript/fatme/install-command
Implement install command
2 parents 3061fcd + 28ddc2f commit 78df478

File tree

3 files changed

+86
-1
lines changed

3 files changed

+86
-1
lines changed

bin/nativescript.js

100644100755
File mode changed.

lib/bootstrap.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -58,4 +58,5 @@ $injector.require("broccoliPluginWrapper", "./tools/broccoli/broccoli-plugin-wra
5858

5959
$injector.require("pluginsService", "./services/plugins-service");
6060
$injector.requireCommand("plugin|add", "./commands/plugin/add-plugin");
61-
$injector.requireCommand("plugin|remove", "./commands/plugin/remove-plugin");
61+
$injector.requireCommand("plugin|remove", "./commands/plugin/remove-plugin");
62+
$injector.requireCommand("install", "./commands/install");

lib/commands/install.ts

+84
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
///<reference path="../.d.ts"/>
2+
"use strict";
3+
4+
import path = require("path");
5+
6+
export class InstallCommand implements ICommand {
7+
private _projectData: any;
8+
9+
constructor(private $fs: IFileSystem,
10+
private $errors: IErrors,
11+
private $logger: ILogger,
12+
private $options: IOptions,
13+
private $injector: IInjector,
14+
private $staticConfig: IStaticConfig) { }
15+
16+
public enableHooks = false;
17+
18+
public allowedParameters: ICommandParameter[] = [];
19+
20+
public execute(args: string[]): IFuture<void> {
21+
return (() => {
22+
let projectFilePath = this.getProjectFilePath(args[0]);
23+
let projectData = this.getProjectData(projectFilePath).wait();
24+
let projectName = projectData.id.split(".")[2];
25+
26+
this.$injector.resolve("projectService").createProject(projectName).wait();
27+
28+
this.$options.path = path.join(this.$options.path || path.resolve("."), projectName);
29+
30+
this.$logger.info("Adding platforms...");
31+
32+
let $platformsData = this.$injector.resolve("platformsData");
33+
let $platformService = this.$injector.resolve("platformService");
34+
_.each($platformsData.platformsNames, platform => {
35+
let platformData = $platformsData.getPlatformData(platform);
36+
let frameworkPackageData = projectData[platformData.frameworkPackageName];
37+
if(frameworkPackageData && frameworkPackageData.version) {
38+
$platformService.addPlatforms([`${platform}@${frameworkPackageData.version}`]).wait();
39+
}
40+
});
41+
42+
}).future<void>()();
43+
}
44+
45+
public canExecute(args: string[]): IFuture<boolean> {
46+
return (() => {
47+
let projectFilePath = this.getProjectFilePath(args[0]);
48+
let errorMessage = args[0] ? "The provided path doesn't contain package.json." :
49+
"The current directory doesn't contain package.json file. Execute the command in directory which contains package.json file or specify the path to package.json file.";
50+
51+
if(!this.$fs.exists(projectFilePath).wait()) {
52+
this.$errors.failWithoutHelp(errorMessage);
53+
}
54+
55+
let projectData = this.getProjectData(projectFilePath).wait();
56+
if(!projectData) {
57+
this.$errors.failWithoutHelp("Invalid project file. Verify that the specified package.json file contains a nativescript key and try again.");
58+
}
59+
60+
if(!projectData.id) {
61+
this.$errors.failWithoutHelp("Invalid project file. Verify that the specified package.json file contains an id and try again.");
62+
}
63+
64+
return true;
65+
}).future<boolean>()();
66+
}
67+
68+
private getProjectFilePath(providedPath: string): string {
69+
let resolvedPath = path.resolve(providedPath || ".");
70+
return path.basename(resolvedPath) === "package.json" ? resolvedPath : path.join(resolvedPath, "package.json");
71+
}
72+
73+
private getProjectData(projectFilePath: string): IFuture<any> {
74+
return (() => {
75+
if(!this._projectData) {
76+
let fileContent = this.$fs.readJson(projectFilePath).wait();
77+
this._projectData = fileContent[this.$staticConfig.CLIENT_NAME_KEY_IN_PROJECT_FILE];
78+
}
79+
80+
return this._projectData;
81+
}).future<any>()();
82+
}
83+
}
84+
$injector.registerCommand("install", InstallCommand);

0 commit comments

Comments
 (0)