diff --git a/lib/commands/install.ts b/lib/commands/install.ts index 6a718077be..bb2b0668fa 100644 --- a/lib/commands/install.ts +++ b/lib/commands/install.ts @@ -1,17 +1,13 @@ /// "use strict"; -import path = require("path"); - export class InstallCommand implements ICommand { private _projectData: any; - constructor(private $fs: IFileSystem, - private $errors: IErrors, - private $logger: ILogger, - private $options: IOptions, - private $injector: IInjector, - private $staticConfig: IStaticConfig) { } + constructor(private $platformsData: IPlatformsData, + private $platformService: IPlatformService, + private $projectData: IProjectData, + private $projectDataService: IProjectDataService) { } public enableHooks = false; @@ -19,66 +15,16 @@ export class InstallCommand implements ICommand { public execute(args: string[]): IFuture { return (() => { - let projectFilePath = this.getProjectFilePath(args[0]); - let projectData = this.getProjectData(projectFilePath).wait(); - let projectName = projectData.id.split(".")[2]; - - this.$injector.resolve("projectService").createProject(projectName).wait(); - - this.$options.path = path.join(this.$options.path || path.resolve("."), projectName); + this.$projectDataService.initialize(this.$projectData.projectDir); - this.$logger.info("Adding platforms..."); - - let $platformsData = this.$injector.resolve("platformsData"); - let $platformService = this.$injector.resolve("platformService"); - _.each($platformsData.platformsNames, platform => { - let platformData = $platformsData.getPlatformData(platform); - let frameworkPackageData = projectData[platformData.frameworkPackageName]; + _.each(this.$platformsData.platformsNames, platform => { + let platformData = this.$platformsData.getPlatformData(platform); + let frameworkPackageData = this.$projectDataService.getValue(platformData.frameworkPackageName).wait(); if(frameworkPackageData && frameworkPackageData.version) { - $platformService.addPlatforms([`${platform}@${frameworkPackageData.version}`]).wait(); + this.$platformService.addPlatforms([`${platform}@${frameworkPackageData.version}`]).wait(); } - }); - + }); }).future()(); } - - public canExecute(args: string[]): IFuture { - return (() => { - let projectFilePath = this.getProjectFilePath(args[0]); - let errorMessage = args[0] ? "The provided path doesn't contain package.json." : - "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."; - - if(!this.$fs.exists(projectFilePath).wait()) { - this.$errors.failWithoutHelp(errorMessage); - } - - let projectData = this.getProjectData(projectFilePath).wait(); - if(!projectData) { - this.$errors.failWithoutHelp("Invalid project file. Verify that the specified package.json file contains a nativescript key and try again."); - } - - if(!projectData.id) { - this.$errors.failWithoutHelp("Invalid project file. Verify that the specified package.json file contains an id and try again."); - } - - return true; - }).future()(); - } - - private getProjectFilePath(providedPath: string): string { - let resolvedPath = path.resolve(providedPath || "."); - return path.basename(resolvedPath) === "package.json" ? resolvedPath : path.join(resolvedPath, "package.json"); - } - - private getProjectData(projectFilePath: string): IFuture { - return (() => { - if(!this._projectData) { - let fileContent = this.$fs.readJson(projectFilePath).wait(); - this._projectData = fileContent[this.$staticConfig.CLIENT_NAME_KEY_IN_PROJECT_FILE]; - } - - return this._projectData; - }).future()(); - } } $injector.registerCommand("install", InstallCommand); \ No newline at end of file