Skip to content

Commit 8992b24

Browse files
committed
fix(definitions): align conflicting service typings and declare conformance
Five services were injected as an interface that nothing checked them against. Two of the interfaces disagreed with the implementation: checkForAvailableSimulators returns the simulators it found rather than void, and DeployController.deploy takes the deploy descriptor set rather than the run one. Both declarations now match the code they describe. The implements clauses make the compiler verify what was previously assumed. IOptionsTracker also needed importing, since lib/declarations is a module and its interfaces are not global.
1 parent e2a712a commit 8992b24

7 files changed

Lines changed: 47 additions & 42 deletions

File tree

lib/common/definitions/mobile.d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -532,7 +532,7 @@ declare global {
532532
}
533533

534534
interface IiOSSimulatorDiscovery extends IDeviceDiscovery {
535-
checkForAvailableSimulators(): Promise<void>;
535+
checkForAvailableSimulators(): Promise<IDeviceInfo[]>;
536536
}
537537

538538
interface IAndroidDeviceDiscovery extends IDeviceDiscovery {

lib/common/mobile/mobile-core/ios-simulator-discovery.ts

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,10 @@ import { IInjector } from "../../definitions/yok";
66
import { injector } from "../../yok";
77
import * as _ from "lodash";
88

9-
export class IOSSimulatorDiscovery extends DeviceDiscovery {
9+
export class IOSSimulatorDiscovery
10+
extends DeviceDiscovery
11+
implements Mobile.IiOSSimulatorDiscovery
12+
{
1013
private cachedSimulators: Mobile.IiSimDevice[] = [];
1114
private availableSimulators: IDictionary<Mobile.IDeviceInfo> = {};
1215

@@ -15,13 +18,13 @@ export class IOSSimulatorDiscovery extends DeviceDiscovery {
1518
private $iOSSimResolver: Mobile.IiOSSimResolver,
1619
private $mobileHelper: Mobile.IMobileHelper,
1720
private $hostInfo: IHostInfo,
18-
private $iOSEmulatorServices: Mobile.IiOSSimulatorService
21+
private $iOSEmulatorServices: Mobile.IiOSSimulatorService,
1922
) {
2023
super();
2124
}
2225

2326
public async startLookingForDevices(
24-
options?: Mobile.IDeviceLookingOptions
27+
options?: Mobile.IDeviceLookingOptions,
2528
): Promise<void> {
2629
if (
2730
options &&
@@ -36,7 +39,8 @@ export class IOSSimulatorDiscovery extends DeviceDiscovery {
3639

3740
private async checkForDevices(): Promise<void> {
3841
if (this.$hostInfo.isDarwin) {
39-
const currentSimulators: Mobile.IiSimDevice[] = await this.$iOSSimResolver.iOSSim.getRunningSimulators();
42+
const currentSimulators: Mobile.IiSimDevice[] =
43+
await this.$iOSSimResolver.iOSSim.getRunningSimulators();
4044

4145
// Remove old simulators
4246
_(this.cachedSimulators)
@@ -47,8 +51,8 @@ export class IOSSimulatorDiscovery extends DeviceDiscovery {
4751
simulator &&
4852
s &&
4953
simulator.id === s.id &&
50-
simulator.state === s.state
51-
)
54+
simulator.state === s.state,
55+
),
5256
)
5357
.each((s) => this.deleteAndRemoveDevice(s));
5458

@@ -61,8 +65,8 @@ export class IOSSimulatorDiscovery extends DeviceDiscovery {
6165
simulator &&
6266
s &&
6367
simulator.id === s.id &&
64-
simulator.state === s.state
65-
)
68+
simulator.state === s.state,
69+
),
6670
)
6771
.each((s) => this.createAndAddDevice(s));
6872
}
@@ -83,7 +87,7 @@ export class IOSSimulatorDiscovery extends DeviceDiscovery {
8387
if (
8488
!_.find(
8589
this.availableSimulators,
86-
(s) => s.imageIdentifier === simulator.imageIdentifier
90+
(s) => s.imageIdentifier === simulator.imageIdentifier,
8791
)
8892
) {
8993
lostSimulators.push(simulator);
@@ -110,7 +114,7 @@ export class IOSSimulatorDiscovery extends DeviceDiscovery {
110114
private createAndAddDevice(simulator: Mobile.IiSimDevice): void {
111115
this.cachedSimulators.push(_.cloneDeep(simulator));
112116
this.addDevice(
113-
this.$injector.resolve(IOSSimulator, { simulator: simulator })
117+
this.$injector.resolve(IOSSimulator, { simulator: simulator }),
114118
);
115119
}
116120

lib/controllers/deploy-controller.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
import * as _ from "lodash";
22
import { injector } from "../common/yok";
33

4-
export class DeployController {
4+
export class DeployController implements IDeployController {
55
constructor(
66
private $deviceInstallAppService: IDeviceInstallAppService,
77
private $devicesService: Mobile.IDevicesService,
8-
private $prepareController: IPrepareController
8+
private $prepareController: IPrepareController,
99
) {}
1010

1111
public async deploy(data: IDeployData): Promise<void> {
@@ -14,7 +14,7 @@ export class DeployController {
1414
const executeAction = async (device: Mobile.IDevice) => {
1515
const deviceDescriptor = _.find(
1616
deviceDescriptors,
17-
(dd) => dd.identifier === device.deviceInfo.identifier
17+
(dd) => dd.identifier === device.deviceInfo.identifier,
1818
);
1919
const prepareData = {
2020
...deviceDescriptor.buildData,
@@ -27,7 +27,7 @@ export class DeployController {
2727
await this.$deviceInstallAppService.installOnDevice(
2828
device,
2929
{ ...deviceDescriptor.buildData, buildForDevice: !device.isEmulator },
30-
packageFilePath
30+
packageFilePath,
3131
);
3232
};
3333

@@ -37,8 +37,8 @@ export class DeployController {
3737
_.some(
3838
deviceDescriptors,
3939
(deviceDescriptor) =>
40-
deviceDescriptor.identifier === device.deviceInfo.identifier
41-
)
40+
deviceDescriptor.identifier === device.deviceInfo.identifier,
41+
),
4242
);
4343
}
4444
}

lib/controllers/prepare-controller.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,10 @@ interface IPlatformWatcherData {
5252
};
5353
}
5454

55-
export class PrepareController extends EventEmitter {
55+
export class PrepareController
56+
extends EventEmitter
57+
implements IPrepareController
58+
{
5659
private watchersData: IDictionary<IDictionary<IPlatformWatcherData>> = {};
5760
private isInitialPrepareReady = false;
5861
private persistedData: IFilesChangeEventData[] = [];

lib/definitions/deploy.d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
interface IDeployController {
2-
deploy(data: IRunData): Promise<void>;
2+
deploy(data: IDeployData): Promise<void>;
33
}

lib/helpers/options-track-helper.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import * as path from "path";
22
import { TrackActionNames } from "../constants";
3-
import { IOptions } from "../declarations";
3+
import { IOptions, IOptionsTracker } from "../declarations";
44
import {
55
IAnalyticsService,
66
IDictionary,
@@ -10,7 +10,7 @@ import { OptionType } from "../common/enums";
1010
import * as _ from "lodash";
1111
import { injector } from "../common/yok";
1212

13-
export class OptionsTracker {
13+
export class OptionsTracker implements IOptionsTracker {
1414
public static PASSWORD_DETECTION_STRING = "password";
1515
public static PRIVATE_REPLACE_VALUE = "private";
1616
public static PATH_REPLACE_VALUE = "_localpath";

lib/services/device/device-install-app-service.ts

Lines changed: 19 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import {
1414
import { IAnalyticsService, IFileSystem } from "../../common/declarations";
1515
import { injector } from "../../common/yok";
1616

17-
export class DeviceInstallAppService {
17+
export class DeviceInstallAppService implements IDeviceInstallAppService {
1818
constructor(
1919
private $analyticsService: IAnalyticsService,
2020
private $buildArtifactsService: IBuildArtifactsService,
@@ -23,25 +23,25 @@ export class DeviceInstallAppService {
2323
private $logger: ILogger,
2424
private $mobileHelper: Mobile.IMobileHelper,
2525
private $projectDataService: IProjectDataService,
26-
private $platformsDataService: IPlatformsDataService
26+
private $platformsDataService: IPlatformsDataService,
2727
) {}
2828

2929
public async installOnDevice(
3030
device: Mobile.IDevice,
3131
buildData: IBuildData,
32-
packageFile?: string
32+
packageFile?: string,
3333
): Promise<void> {
3434
this.$logger.info(
35-
`Installing on device ${device.deviceInfo.identifier}...`
35+
`Installing on device ${device.deviceInfo.identifier}...`,
3636
);
3737

3838
const platform = device.deviceInfo.platform.toLowerCase();
3939
const projectData = this.$projectDataService.getProjectData(
40-
buildData.projectDir
40+
buildData.projectDir,
4141
);
4242
const platformData = this.$platformsDataService.getPlatformData(
4343
platform,
44-
projectData
44+
projectData,
4545
);
4646

4747
await this.$analyticsService.trackEventActionInGoogleAnalytics({
@@ -53,13 +53,13 @@ export class DeviceInstallAppService {
5353
if (!packageFile) {
5454
packageFile = await this.$buildArtifactsService.getLatestAppPackagePath(
5555
platformData,
56-
buildData
56+
buildData,
5757
);
5858
}
5959

6060
await platformData.platformProjectService.cleanDeviceTempFolder(
6161
device.deviceInfo.identifier,
62-
projectData
62+
projectData,
6363
);
6464

6565
const appIdentifier = projectData.projectIdentifiers[platform];
@@ -69,7 +69,7 @@ export class DeviceInstallAppService {
6969
await device.applicationManager.reinstallApplication(
7070
appIdentifier,
7171
packageFile,
72-
buildData
72+
buildData,
7373
);
7474

7575
await this.updateHashesOnDevice({
@@ -83,19 +83,19 @@ export class DeviceInstallAppService {
8383
await this.$buildInfoFileService.saveDeviceBuildInfo(
8484
device,
8585
projectData,
86-
outputFilePath
86+
outputFilePath,
8787
);
8888
}
8989

9090
this.$logger.info(
91-
`Successfully installed on device with identifier '${device.deviceInfo.identifier}'.`
91+
`Successfully installed on device with identifier '${device.deviceInfo.identifier}'.`,
9292
);
9393
}
9494

9595
public async installOnDeviceIfNeeded(
9696
device: Mobile.IDevice,
9797
buildData: IBuildData,
98-
packageFile?: string
98+
packageFile?: string,
9999
): Promise<void> {
100100
const shouldInstall = await this.shouldInstall(device, buildData);
101101
if (shouldInstall) {
@@ -105,31 +105,29 @@ export class DeviceInstallAppService {
105105

106106
public async shouldInstall(
107107
device: Mobile.IDevice,
108-
buildData: IBuildData
108+
buildData: IBuildData,
109109
): Promise<boolean> {
110110
const projectData = this.$projectDataService.getProjectData(
111-
buildData.projectDir
111+
buildData.projectDir,
112112
);
113113
const platformData = this.$platformsDataService.getPlatformData(
114114
device.deviceInfo.platform,
115-
projectData
115+
projectData,
116116
);
117117
const platform = device.deviceInfo.platform;
118118
if (
119119
!(await device.applicationManager.isApplicationInstalled(
120-
projectData.projectIdentifiers[platform.toLowerCase()]
120+
projectData.projectIdentifiers[platform.toLowerCase()],
121121
))
122122
) {
123123
return true;
124124
}
125125

126-
const deviceBuildInfo: IBuildInfo = await this.$buildInfoFileService.getDeviceBuildInfo(
127-
device,
128-
projectData
129-
);
126+
const deviceBuildInfo: IBuildInfo =
127+
await this.$buildInfoFileService.getDeviceBuildInfo(device, projectData);
130128
const localBuildInfo = this.$buildInfoFileService.getLocalBuildInfo(
131129
platformData,
132-
{ ...buildData, buildForDevice: !device.isEmulator }
130+
{ ...buildData, buildForDevice: !device.isEmulator },
133131
);
134132

135133
return (

0 commit comments

Comments
 (0)