Skip to content

Commit 8681af7

Browse files
Fatme HavaluovaFatme Havaluova
authored andcommitted
Refactor options
1 parent 19f6461 commit 8681af7

18 files changed

+154
-130
lines changed

lib/bootstrap.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
require("./common/bootstrap");
22
$injector.require("config", "./config");
3-
require("./options");
3+
$injector.require("options", "./options");
44
// note: order above is important!
55
$injector.require("nativescript-cli", "./nativescript-cli");
66

lib/declarations.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,3 +30,18 @@ interface ILockFile {
3030
interface IOpener {
3131
open(target: string, appname: string): void;
3232
}
33+
34+
interface IOptions extends ICommonOptions {
35+
frameworkPath: string;
36+
copyFrom: string;
37+
linkTo: string;
38+
release: boolean;
39+
emulator: boolean;
40+
symlink: boolean;
41+
forDevice: boolean;
42+
client: boolean;
43+
keyStorePath: string;
44+
keyStorePassword: string;
45+
keyStoreAlias: string;
46+
keyStoreAliasPassword: string;
47+
}

lib/lockfile.ts

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,14 @@
44
import Future = require("fibers/future");
55
import lockfile = require("lockfile");
66
import path = require("path");
7-
import options = require("./common/options");
87

98
export class LockFile implements ILockFile {
10-
private static LOCK_FILENAME = path.join(options["profile-dir"], ".lock");
9+
private lockFilePath: string;
10+
11+
constructor(private $options: IOptions) {
12+
this.lockFilePath = path.join(this.$options.profileDir, ".lock");
13+
}
14+
1115
private static LOCK_EXPIRY_PERIOD_SEC = 180;
1216
private static LOCK_PARAMS = {
1317
retryWait: 100,
@@ -17,7 +21,7 @@ export class LockFile implements ILockFile {
1721

1822
public lock(): IFuture<void> {
1923
var future = new Future<void>();
20-
lockfile.lock(LockFile.LOCK_FILENAME, LockFile.LOCK_PARAMS, (err: Error) => {
24+
lockfile.lock(this.lockFilePath, LockFile.LOCK_PARAMS, (err: Error) => {
2125
if(err) {
2226
future.throw(err);
2327
} else {
@@ -29,7 +33,7 @@ export class LockFile implements ILockFile {
2933

3034
public unlock(): IFuture<void> {
3135
var future = new Future<void>();
32-
lockfile.unlock(LockFile.LOCK_FILENAME, (err: Error) => {
36+
lockfile.unlock(this.lockFilePath, (err: Error) => {
3337
if(err) {
3438
future.throw(err);
3539
} else {

lib/node-package-manager.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ import semver = require("semver");
88
import shell = require("shelljs");
99
import helpers = require("./common/helpers");
1010
import constants = require("./constants");
11-
import options = require("./common/options");
1211

1312
export class NodePackageManager implements INodePackageManager {
1413
private static NPM_LOAD_FAILED = "Failed to retrieve data from npm. Please try again a little bit later.";
@@ -19,7 +18,8 @@ export class NodePackageManager implements INodePackageManager {
1918
constructor(private $logger: ILogger,
2019
private $errors: IErrors,
2120
private $fs: IFileSystem,
22-
private $lockfile: ILockFile) {
21+
private $lockfile: ILockFile,
22+
private $options: IOptions) {
2323
this.versionsCache = {};
2424
this.load().wait();
2525
}
@@ -94,14 +94,14 @@ export class NodePackageManager implements INodePackageManager {
9494

9595
private installCore(packageName: string, pathToSave: string, version: string): IFuture<string> {
9696
return (() => {
97-
if (options.frameworkPath) {
98-
if (this.$fs.getFsStats(options.frameworkPath).wait().isFile()) {
97+
if (this.$options.frameworkPath) {
98+
if (this.$fs.getFsStats(this.$options.frameworkPath).wait().isFile()) {
9999
this.npmInstall(packageName, pathToSave, version).wait();
100100
var pathToNodeModules = path.join(pathToSave, "node_modules");
101101
var folders = this.$fs.readDirectory(pathToNodeModules).wait();
102102
return path.join(pathToNodeModules, folders[0]);
103103
}
104-
return options.frameworkPath;
104+
return this.$options.frameworkPath;
105105
} else {
106106
version = version || this.getLatestVersion(packageName).wait();
107107
var packagePath = this.getCachedPackagePath(packageName, version);
@@ -121,7 +121,7 @@ export class NodePackageManager implements INodePackageManager {
121121
this.$logger.out("Installing ", packageName);
122122

123123
var incrementedVersion = semver.inc(version, constants.ReleaseType.MINOR);
124-
if (!options.frameworkPath && packageName.indexOf("@") < 0) {
124+
if (!this.$options.frameworkPath && packageName.indexOf("@") < 0) {
125125
packageName = packageName + "@<" + incrementedVersion;
126126
}
127127

lib/options.ts

Lines changed: 25 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1,46 +1,32 @@
11
///<reference path=".d.ts"/>
22
"use strict";
33

4-
import path = require("path");
5-
import commonOptions = require("./common/options");
4+
import commonOptionsLibPath = require("./common/options");
65
import osenv = require("osenv");
7-
import hostInfo = require("./common/host-info");
8-
9-
var knownOpts: any = {
10-
"frameworkPath": String,
11-
"copy-from": String,
12-
"link-to": String,
13-
"release": Boolean,
14-
"emulator": Boolean,
15-
"symlink": Boolean,
16-
"for-device": Boolean,
17-
"client": Boolean,
18-
"keyStorePath": String,
19-
"keyStorePassword": String,
20-
"keyStoreAlias": String,
21-
"keyStoreAliasPassword": String
22-
},
23-
shorthands: IStringDictionary = {
24-
};
6+
import path = require("path");
257

26-
_.extend(commonOptions.knownOpts, knownOpts);
27-
_.extend(commonOptions.shorthands, shorthands);
8+
let OptionType = commonOptionsLibPath.OptionType;
289

29-
var defaultProfileDir = "";
30-
var nativeScriptCacheFolder = ".nativescript-cli";
31-
if(hostInfo.isWindows()) {
32-
defaultProfileDir = path.join(process.env.LocalAppData, nativeScriptCacheFolder);
33-
} else {
34-
defaultProfileDir = path.join(osenv.home(), ".local/share", nativeScriptCacheFolder);
10+
export class Options extends commonOptionsLibPath.OptionsBase {
11+
constructor($errors: IErrors,
12+
$staticConfig: IStaticConfig,
13+
$hostInfo: IHostInfo) {
14+
super({
15+
frameworkPath: { type: OptionType.String },
16+
copyFrom: { type: OptionType.String },
17+
linkTo: { type: OptionType.String },
18+
release: { type: OptionType.Boolean },
19+
emulator: { type: OptionType.Boolean },
20+
symlink: { type: OptionType.Boolean },
21+
forDevice: { type: OptionType.Boolean },
22+
client: { type: OptionType.Boolean },
23+
keyStorePath: { type: OptionType.String },
24+
keyStorePassword: { type: OptionType.String,},
25+
keyStoreAlias: { type: OptionType.String },
26+
keyStoreAliasPassword: { type: OptionType.String }
27+
},
28+
path.join($hostInfo.isWindows ? process.env.LocalAppData : path.join(osenv.home(), ".local/share", "Telerik", "BlackDragon", ".nativescript-cli")),
29+
$errors, $staticConfig);
30+
}
3531
}
36-
37-
commonOptions.setProfileDir(defaultProfileDir);
38-
var errors: IErrors = $injector.resolve("errors");
39-
_(errors.validateArgs("tns", commonOptions.knownOpts, commonOptions.shorthands)).each((val,key) => {
40-
key = shorthands[key] || key;
41-
commonOptions[key] = val;
42-
}).value();
43-
exports.knownOpts = knownOpts;
44-
45-
declare var exports:any;
46-
export = exports;
32+
$injector.register("options", Options);

lib/project-data.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
import constants = require("./constants");
55
import path = require("path");
66
import os = require("os");
7-
import options = require("./common/options");
87

98
export class ProjectData implements IProjectData {
109
private static OLD_PROJECT_FILE_NAME = ".tnsproject";
@@ -19,7 +18,8 @@ export class ProjectData implements IProjectData {
1918
private $errors: IErrors,
2019
private $logger: ILogger,
2120
private $projectHelper: IProjectHelper,
22-
private $staticConfig: IStaticConfig) {
21+
private $staticConfig: IStaticConfig,
22+
private $options: IOptions) {
2323
this.initializeProjectData().wait();
2424
}
2525

@@ -56,12 +56,12 @@ export class ProjectData implements IProjectData {
5656
}
5757

5858
private throwNoProjectFoundError(): void {
59-
this.$errors.fail("No project found at or above '%s' and neither was a --path specified.", options.path || path.resolve("."));
59+
this.$errors.fail("No project found at or above '%s' and neither was a --path specified.", this.$options.path || path.resolve("."));
6060
}
6161

6262
private tryToUpgradeProject(): IFuture<void> {
6363
return (() => {
64-
let projectDir = this.projectDir || path.resolve(options.path || ".");
64+
let projectDir = this.projectDir || path.resolve(this.$options.path || ".");
6565
let oldProjectFilePath = path.join(projectDir, ProjectData.OLD_PROJECT_FILE_NAME);
6666
if(this.$fs.exists(oldProjectFilePath).wait()) {
6767
this.upgrade(projectDir, oldProjectFilePath).wait();

lib/services/android-debug-service.ts

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import options = require("./../common/options");
21
import iOSProxyServices = require("./../common/mobile/ios/ios-proxy-services");
32
import iOSDevice = require("./../common/mobile/ios/ios-device");
43
import net = require("net");
@@ -8,12 +7,13 @@ class AndroidDebugService implements IDebugService {
87
private $platformService: IPlatformService,
98
private $platformsData: IPlatformsData,
109
private $projectData: IProjectData,
11-
private $logger: ILogger) { }
10+
private $logger: ILogger,
11+
private $options: IOptions) { }
1212

1313
private get platform() { return "android"; }
1414

1515
public debug(): IFuture<void> {
16-
return options.emulator
16+
return this.$options.emulator
1717
? this.debugOnEmulator()
1818
: this.debugOnDevice();
1919
}
@@ -31,19 +31,19 @@ class AndroidDebugService implements IDebugService {
3131
var packageFile = "";
3232
var platformData = this.$platformsData.getPlatformData(this.platform);
3333

34-
if (options["debug-brk"]) {
34+
if (this.$options.debugBrk) {
3535
this.$platformService.preparePlatform(this.platform).wait();
3636

37-
var cachedDeviceOption = options.forDevice;
38-
options.forDevice = true;
37+
var cachedDeviceOption = this.$options.forDevice;
38+
this.$options.forDevice = true;
3939
this.$platformService.buildPlatform(this.platform).wait();
40-
options.forDevice = cachedDeviceOption;
40+
this.$options.forDevice = cachedDeviceOption;
4141

4242
packageFile = this.$platformService.getLatestApplicationPackageForDevice(platformData).wait().packageName;
4343
this.$logger.out("Using ", packageFile);
4444
}
4545

46-
this.$devicesServices.initialize({ platform: this.platform, deviceId: options.device}).wait();
46+
this.$devicesServices.initialize({ platform: this.platform, deviceId: this.$options.device}).wait();
4747
var action = (device: Mobile.IAndroidDevice): IFuture<void> => { return device.debug(packageFile, this.$projectData.projectId) };
4848
this.$devicesServices.execute(action).wait();
4949

lib/services/android-project-service.ts

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,7 @@ import path = require("path");
44
import shell = require("shelljs");
55
import util = require("util");
66
import Future = require("fibers/future");
7-
import options = require("../common/options");
87
import constants = require("../constants");
9-
import hostInfo = require("../common/host-info");
108
import helpers = require("../common/helpers");
119
import fs = require("fs");
1210
import os = require("os");
@@ -26,7 +24,9 @@ class AndroidProjectService implements IPlatformProjectService {
2624
private $fs: IFileSystem,
2725
private $logger: ILogger,
2826
private $projectData: IProjectData,
29-
private $propertiesParser: IPropertiesParser) {
27+
private $propertiesParser: IPropertiesParser,
28+
private $options: IOptions,
29+
private $hostInfo: IHostInfo) {
3030
}
3131

3232
private _platformData: IPlatformData = null;
@@ -68,7 +68,7 @@ class AndroidProjectService implements IPlatformProjectService {
6868
this.$fs.ensureDirectoryExists(projectRoot).wait();
6969
var newTarget = this.getLatestValidAndroidTarget(frameworkDir).wait();
7070
var versionNumber = _.last(newTarget.split("-"));
71-
if(options.symlink) {
71+
if(this.$options.symlink) {
7272
this.copyResValues(projectRoot, frameworkDir, versionNumber).wait();
7373
this.copy(projectRoot, frameworkDir, ".project AndroidManifest.xml project.properties custom_rules.xml", "-f").wait();
7474

@@ -146,7 +146,7 @@ class AndroidProjectService implements IPlatformProjectService {
146146

147147
public buildProject(projectRoot: string): IFuture<void> {
148148
return (() => {
149-
var buildConfiguration = options.release ? "release" : "debug";
149+
var buildConfiguration = this.$options.release ? "release" : "debug";
150150
var args = this.getAntArgs(buildConfiguration, projectRoot);
151151
this.spawn('ant', args).wait();
152152
}).future<void>()();
@@ -256,7 +256,7 @@ class AndroidProjectService implements IPlatformProjectService {
256256
}
257257

258258
private spawn(command: string, args: string[]): IFuture<void> {
259-
if (hostInfo.isWindows()) {
259+
if (this.$hostInfo.isWindows) {
260260
args.unshift('/s', '/c', command);
261261
command = process.env.COMSPEC || 'cmd.exe';
262262
}
@@ -267,20 +267,20 @@ class AndroidProjectService implements IPlatformProjectService {
267267
private getAntArgs(configuration: string, projectRoot: string): string[] {
268268
var args = [configuration, "-f", path.join(projectRoot, "build.xml")];
269269
if(configuration === "release") {
270-
if(options.keyStorePath) {
271-
args = args.concat(["-Dkey.store", options.keyStorePath]);
270+
if(this.$options.keyStorePath) {
271+
args = args.concat(["-Dkey.store", this.$options.keyStorePath]);
272272
}
273273

274-
if(options.keyStorePassword) {
275-
args = args.concat(["-Dkey.store.password", options.keyStorePassword]);
274+
if(this.$options.keyStorePassword) {
275+
args = args.concat(["-Dkey.store.password", this.$options.keyStorePassword]);
276276
}
277277

278-
if(options.keyStoreAlias) {
279-
args = args.concat(["-Dkey.alias", options.keyStoreAlias]);
278+
if(this.$options.keyStoreAlias) {
279+
args = args.concat(["-Dkey.alias", this.$options.keyStoreAlias]);
280280
}
281281

282-
if(options.keyStoreAliasPassword) {
283-
args = args.concat(["-Dkey.alias.password", options.keyStoreAliasPassword])
282+
if(this.$options.keyStoreAliasPassword) {
283+
args = args.concat(["-Dkey.alias.password", this.$options.keyStoreAliasPassword])
284284
}
285285
}
286286

0 commit comments

Comments
 (0)