Skip to content

Commit fbf8cf2

Browse files
author
Dimitar Kerezov
committed
refactor(livesync): speedup livesync
1 parent 3064e0d commit fbf8cf2

12 files changed

+42
-17
lines changed

lib/commands/appstore-upload.ts

+1
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ export class PublishIOS implements ICommand {
6060
const platformInfo: IPreparePlatformInfo = {
6161
platform,
6262
appFilesUpdaterOptions,
63+
skipModulesNativeCheck: !this.$options.syncAllFiles,
6364
platformTemplate: this.$options.platformTemplate,
6465
projectData: this.$projectData,
6566
config: this.$options,

lib/commands/build.ts

+1
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ export class BuildCommandBase extends BundleBase {
1818
const platformInfo: IPreparePlatformInfo = {
1919
platform,
2020
appFilesUpdaterOptions,
21+
skipModulesNativeCheck: !this.$options.syncAllFiles,
2122
platformTemplate: this.$options.platformTemplate,
2223
projectData: this.$projectData,
2324
config: this.$options,

lib/commands/prepare.ts

+1
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ export class PrepareCommand implements ICommand {
1414
const platformInfo: IPreparePlatformInfo = {
1515
platform: args[0],
1616
appFilesUpdaterOptions,
17+
skipModulesNativeCheck: !this.$options.syncAllFiles,
1718
platformTemplate: this.$options.platformTemplate,
1819
projectData: this.$projectData,
1920
config: this.$options,

lib/definitions/livesync.d.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,7 @@ interface IProjectDataComposition {
152152
/**
153153
* Desribes object that can be passed to ensureLatestAppPackageIsInstalledOnDevice method.
154154
*/
155-
interface IEnsureLatestAppPackageIsInstalledOnDeviceOptions extends IProjectDataComposition, IEnvOptions, IBundle, IRelease {
155+
interface IEnsureLatestAppPackageIsInstalledOnDeviceOptions extends IProjectDataComposition, IEnvOptions, IBundle, IRelease, ISkipNativeCheckOptional {
156156
device: Mobile.IDevice;
157157
preparedPlatforms: string[];
158158
rebuiltInformation: ILiveSyncBuildInfo[];

lib/definitions/platform.d.ts

+6-3
Original file line numberDiff line numberDiff line change
@@ -296,7 +296,7 @@ interface IPlatformDataComposition {
296296
platformData: IPlatformData;
297297
}
298298

299-
interface ICopyAppFilesData extends IProjectDataComposition, IAppFilesUpdaterOptionsComposition, IPlatformDataComposition { }
299+
interface ICopyAppFilesData extends IProjectDataComposition, IAppFilesUpdaterOptionsComposition, IPlatformDataComposition, IOptionalFilesToSync { }
300300

301301
interface IPreparePlatformService {
302302
addPlatform(info: IAddPlatformInfo): Promise<void>;
@@ -319,14 +319,17 @@ interface IPreparePlatformCoreInfo extends IPreparePlatformInfoBase {
319319
changesInfo?: IProjectChangesInfo;
320320
}
321321

322-
interface IPreparePlatformInfo extends IPreparePlatformInfoBase, IPlatformConfig, IPlatformTemplate { }
322+
interface IPreparePlatformInfo extends IPreparePlatformInfoBase, IPlatformConfig, IPlatformTemplate, ISkipNativeCheckOptional { }
323323

324324
interface IPlatformConfig {
325325
config: IPlatformOptions;
326326
}
327327

328-
interface IPreparePlatformInfoBase extends IPlatform, IAppFilesUpdaterOptionsComposition, IProjectDataComposition, IEnvOptions {
328+
interface IOptionalFilesToSync {
329329
filesToSync?: string[];
330+
}
331+
332+
interface IPreparePlatformInfoBase extends IPlatform, IAppFilesUpdaterOptionsComposition, IProjectDataComposition, IEnvOptions, IOptionalFilesToSync {
330333
nativePrepare?: INativePrepare;
331334
}
332335

lib/definitions/project-changes.d.ts

+11-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,17 @@ interface IProjectChangesInfo extends IAddedNativePlatform {
2323
readonly changesRequirePrepare: boolean;
2424
}
2525

26-
interface IProjectChangesOptions extends IAppFilesUpdaterOptions, IProvision, ITeamIdentifier {
26+
/**
27+
* Describes interface for controlling checking node_modules for native changes.
28+
*/
29+
interface ISkipNativeCheckOptional {
30+
/**
31+
* Designates node_modules should not be checked for native changes.
32+
*/
33+
skipModulesNativeCheck?: boolean;
34+
}
35+
36+
interface IProjectChangesOptions extends IAppFilesUpdaterOptions, IProvision, ITeamIdentifier, ISkipNativeCheckOptional {
2737
nativePlatformStatus?: "1" | "2" | "3";
2838
}
2939

lib/services/app-files-updater.ts

+3-5
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,15 @@ import * as constants from "../constants";
44
import * as fs from "fs";
55

66
export class AppFilesUpdater {
7-
constructor(
8-
private appSourceDirectoryPath: string,
7+
constructor(private appSourceDirectoryPath: string,
98
private appDestinationDirectoryPath: string,
109
public options: IAppFilesUpdaterOptions,
1110
public fs: IFileSystem
1211
) {
1312
}
1413

15-
public updateApp(beforeCopyAction: (sourceFiles: string[]) => void): void {
16-
this.cleanDestinationApp();
17-
const sourceFiles = this.resolveAppSourceFiles();
14+
public updateApp(beforeCopyAction: (sourceFiles: string[]) => void, filesToSync?: string[]): void {
15+
const sourceFiles = filesToSync || this.resolveAppSourceFiles();
1816

1917
beforeCopyAction(sourceFiles);
2018
this.copyAppSourceFiles(sourceFiles);

lib/services/livesync/livesync-service.ts

+4-1
Original file line numberDiff line numberDiff line change
@@ -370,6 +370,7 @@ export class LiveSyncService extends EventEmitter implements IDebugLiveSyncServi
370370
nativePrepare: nativePrepare,
371371
filesToSync: options.modifiedFiles,
372372
platformTemplate: null,
373+
skipModulesNativeCheck: options.skipModulesNativeCheck,
373374
config: platformSpecificOptions
374375
};
375376

@@ -459,6 +460,7 @@ export class LiveSyncService extends EventEmitter implements IDebugLiveSyncServi
459460
deviceBuildInfoDescriptor,
460461
liveSyncData,
461462
settings,
463+
skipModulesNativeCheck: !liveSyncData.watchAllFiles,
462464
bundle: liveSyncData.bundle,
463465
release: liveSyncData.release,
464466
env: liveSyncData.env
@@ -568,7 +570,8 @@ export class LiveSyncService extends EventEmitter implements IDebugLiveSyncServi
568570
modifiedFiles: allModifiedFiles,
569571
bundle: liveSyncData.bundle,
570572
release: liveSyncData.release,
571-
env: liveSyncData.env
573+
env: liveSyncData.env,
574+
skipModulesNativeCheck: !liveSyncData.watchAllFiles
572575
}, { skipNativePrepare: deviceBuildInfoDescriptor.skipNativePrepare });
573576

574577
const service = this.getLiveSyncService(device.deviceInfo.platform);

lib/services/platform-service.ts

+10-3
Original file line numberDiff line numberDiff line change
@@ -190,7 +190,7 @@ export class PlatformService extends EventEmitter implements IPlatformService {
190190
public async preparePlatform(platformInfo: IPreparePlatformInfo): Promise<boolean> {
191191
const platformData = this.$platformsData.getPlatformData(platformInfo.platform, platformInfo.projectData);
192192

193-
const changesInfo = await this.initialPrepare(platformInfo.platform, platformData, platformInfo.appFilesUpdaterOptions, platformInfo.platformTemplate, platformInfo.projectData, platformInfo.config, platformInfo.nativePrepare);
193+
const changesInfo = await this.initialPrepare(platformInfo.platform, platformData, platformInfo.appFilesUpdaterOptions, platformInfo.platformTemplate, platformInfo.projectData, platformInfo.config, platformInfo.nativePrepare, platformInfo);
194194
const requiresNativePrepare = (!platformInfo.nativePrepare || !platformInfo.nativePrepare.skipNativePrepare) && changesInfo.nativePlatformStatus === constants.NativePlatformStatus.requiresPrepare;
195195

196196
if (changesInfo.hasChanges || platformInfo.appFilesUpdaterOptions.bundle || requiresNativePrepare) {
@@ -237,7 +237,7 @@ export class PlatformService extends EventEmitter implements IPlatformService {
237237
}
238238
}
239239

240-
private async initialPrepare(platform: string, platformData: IPlatformData, appFilesUpdaterOptions: IAppFilesUpdaterOptions, platformTemplate: string, projectData: IProjectData, config: IPlatformOptions, nativePrepare?: INativePrepare): Promise<IProjectChangesInfo> {
240+
private async initialPrepare(platform: string, platformData: IPlatformData, appFilesUpdaterOptions: IAppFilesUpdaterOptions, platformTemplate: string, projectData: IProjectData, config: IPlatformOptions, nativePrepare?: INativePrepare, skipNativeCheckOptions?: ISkipNativeCheckOptional): Promise<IProjectChangesInfo> {
241241
this.validatePlatform(platform, projectData);
242242

243243
await this.trackProjectType(projectData);
@@ -254,7 +254,14 @@ export class PlatformService extends EventEmitter implements IPlatformService {
254254

255255
const bundle = appFilesUpdaterOptions.bundle;
256256
const nativePlatformStatus = (nativePrepare && nativePrepare.skipNativePrepare) ? constants.NativePlatformStatus.requiresPlatformAdd : constants.NativePlatformStatus.requiresPrepare;
257-
const changesInfo = await this.$projectChangesService.checkForChanges(platform, projectData, { bundle, release: appFilesUpdaterOptions.release, provision: config.provision, teamId: config.teamId, nativePlatformStatus });
257+
const changesInfo = await this.$projectChangesService.checkForChanges(platform, projectData, {
258+
bundle,
259+
release: appFilesUpdaterOptions.release,
260+
provision: config.provision,
261+
teamId: config.teamId,
262+
nativePlatformStatus,
263+
skipModulesNativeCheck: skipNativeCheckOptions.skipModulesNativeCheck
264+
});
258265

259266
this.$logger.trace("Changes info in prepare platform:", changesInfo);
260267
return changesInfo;

lib/services/prepare-platform-service.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,6 @@ export class PreparePlatformService {
2525
const appUpdater = new AppFilesUpdater(appSourceDirectoryPath, appDestinationDirectoryPath, copyAppFilesData.appFilesUpdaterOptions, this.$fs);
2626
appUpdater.updateApp(sourceFiles => {
2727
this.$xmlValidator.validateXmlFiles(sourceFiles);
28-
});
28+
}, copyAppFilesData.filesToSync);
2929
}
3030
}

lib/services/project-changes-service.ts

+1-2
Original file line numberDiff line numberDiff line change
@@ -63,8 +63,7 @@ export class ProjectChangesService implements IProjectChangesService {
6363
this._changesInfo.appFilesChanged = this.containsNewerFiles(projectData.appDirectoryPath, projectData.appResourcesDirectoryPath, projectData);
6464
this._changesInfo.packageChanged = this.isProjectFileChanged(projectData, platform);
6565
this._changesInfo.appResourcesChanged = this.containsNewerFiles(projectData.appResourcesDirectoryPath, null, projectData);
66-
/*done because currently all node_modules are traversed, a possible improvement could be traversing only the production dependencies*/
67-
this._changesInfo.nativeChanged = this.containsNewerFiles(
66+
this._changesInfo.nativeChanged = projectChangesOptions.skipModulesNativeCheck ? false : this.containsNewerFiles(
6867
path.join(projectData.projectDir, NODE_MODULES_FOLDER_NAME),
6968
path.join(projectData.projectDir, NODE_MODULES_FOLDER_NAME, "tns-ios-inspector"),
7069
projectData,

lib/services/test-execution-service.ts

+2
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ class TestExecutionService implements ITestExecutionService {
6060
const preparePlatformInfo: IPreparePlatformInfo = {
6161
platform,
6262
appFilesUpdaterOptions,
63+
skipModulesNativeCheck: !this.$options.syncAllFiles,
6364
platformTemplate: this.$options.platformTemplate,
6465
projectData,
6566
config: this.$options,
@@ -187,6 +188,7 @@ class TestExecutionService implements ITestExecutionService {
187188
const preparePlatformInfo: IPreparePlatformInfo = {
188189
platform,
189190
appFilesUpdaterOptions,
191+
skipModulesNativeCheck: !this.$options.syncAllFiles,
190192
platformTemplate: this.$options.platformTemplate,
191193
projectData,
192194
config: this.$options,

0 commit comments

Comments
 (0)