Skip to content

Commit 2bd892c

Browse files
author
Fatme
authored
Merge pull request #4179 from NativeScript/fatme/fix-preview-platform-files
fix: respect correctly platform specific files on preview command
2 parents cdd6b0b + 7236efa commit 2bd892c

File tree

3 files changed

+31
-12
lines changed

3 files changed

+31
-12
lines changed

lib/services/livesync/playground/preview-app-files-service.ts

+18-8
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,8 @@ export class PreviewAppFilesService implements IPreviewAppFilesService {
1313
private $logger: ILogger,
1414
private $platformsData: IPlatformsData,
1515
private $projectDataService: IProjectDataService,
16-
private $projectFilesManager: IProjectFilesManager
16+
private $projectFilesManager: IProjectFilesManager,
17+
private $projectFilesProvider: IProjectFilesProvider
1718
) { }
1819

1920
public getInitialFilesPayload(data: IPreviewAppLiveSyncData, platform: string, deviceId?: string): FilesPayload {
@@ -34,20 +35,29 @@ export class PreviewAppFilesService implements IPreviewAppFilesService {
3435

3536
this.$logger.trace(`Sending ${filesToTransfer.join("\n")}.`);
3637

37-
const rootFilesDir = this.getRootFilesDir(data, platform);
38-
const payloadsToSync = _.map(filesToTransfer, file => this.createFilePayload(file, rootFilesDir, PreviewSdkEventNames.CHANGE_EVENT_NAME));
39-
const payloadsToRemove = _.map(filesToRemove, file => this.createFilePayload(file, rootFilesDir, PreviewSdkEventNames.UNLINK_EVENT_NAME));
40-
const payloads = payloadsToSync.concat(payloadsToRemove);
38+
const files = this.createFilePayloads(data, platform, filesToTransfer, filesToRemove);
4139

4240
return {
43-
files: payloads,
44-
platform: platform,
41+
files,
42+
platform,
4543
hmrMode: data.useHotModuleReload ? 1 : 0,
4644
deviceId
4745
};
4846
}
4947

50-
private createFilePayload(file: string, rootFilesDir: string, event: string): FilePayload {
48+
private createFilePayloads(data: IPreviewAppLiveSyncData, platform: string, filesToTransfer: string[], filesToRemove: string[]): FilePayload[] {
49+
const rootFilesDir = this.getRootFilesDir(data, platform);
50+
const payloadsToSync = _.filter(filesToTransfer, file => {
51+
const fileInfo = this.$projectFilesProvider.getProjectFileInfo(file, platform, {});
52+
return fileInfo && fileInfo.shouldIncludeFile;
53+
})
54+
.map(file => this.createFilePayload(file, platform, rootFilesDir, PreviewSdkEventNames.CHANGE_EVENT_NAME));
55+
const payloadsToRemove = _.map(filesToRemove, file => this.createFilePayload(file, platform, rootFilesDir, PreviewSdkEventNames.UNLINK_EVENT_NAME));
56+
const payloads = payloadsToSync.concat(payloadsToRemove);
57+
return payloads;
58+
}
59+
60+
private createFilePayload(file: string, platform: string, rootFilesDir: string, event: string): FilePayload {
5161
let fileContents = "";
5262
let binary = false;
5363

lib/services/livesync/playground/preview-app-livesync-service.ts

+5-4
Original file line numberDiff line numberDiff line change
@@ -108,12 +108,13 @@ export class PreviewAppLiveSyncService implements IPreviewAppLiveSyncService {
108108
}
109109

110110
private async syncFilesForPlatformSafe(data: IPreviewAppLiveSyncData, filesData: IPreviewAppFilesData, platform: string, deviceId?: string): Promise<void> {
111-
this.$logger.info(`Start syncing changes for platform ${platform}.`);
112-
113111
try {
114112
const payloads = this.$previewAppFilesService.getFilesPayload(data, filesData, platform);
115-
await this.$previewSdkService.applyChanges(payloads);
116-
this.$logger.info(`Successfully synced ${payloads.files.map(filePayload => filePayload.file.yellow)} for platform ${platform}.`);
113+
if (payloads && payloads.files && payloads.files.length) {
114+
this.$logger.info(`Start syncing changes for platform ${platform}.`);
115+
await this.$previewSdkService.applyChanges(payloads);
116+
this.$logger.info(`Successfully synced ${payloads.files.map(filePayload => filePayload.file.yellow)} for platform ${platform}.`);
117+
}
117118
} catch (err) {
118119
this.$logger.warn(`Unable to apply changes for platform ${platform}. Error is: ${err}, ${stringify(err)}.`);
119120
}

test/services/playground/preview-app-files-service.ts

+8
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,14 @@ function createTestInjector(data?: { files: string[] }) {
3636
injector.register("projectFilesManager", {
3737
getProjectFiles: () => data ? data.files : []
3838
});
39+
injector.register("projectFilesProvider", {
40+
getProjectFileInfo: (filePath: string, platform: string) => {
41+
return {
42+
filePath,
43+
shouldIncludeFile: true
44+
};
45+
}
46+
});
3947
return injector;
4048
}
4149

0 commit comments

Comments
 (0)