Skip to content

Commit ed8410a

Browse files
committed
feat: remove preview-sync hook and integrate preview command to work with new changes
1 parent f5f0836 commit ed8410a

File tree

4 files changed

+28
-51
lines changed

4 files changed

+28
-51
lines changed

lib/commands/preview.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@ export class PreviewCommand implements ICommand {
77
constructor(private $analyticsService: IAnalyticsService,
88
private $bundleValidatorHelper: IBundleValidatorHelper,
99
private $errors: IErrors,
10-
private $liveSyncService: ILiveSyncService,
1110
private $logger: ILogger,
11+
private $previewAppLiveSyncService: IPreviewAppLiveSyncService,
1212
private $networkConnectivityValidator: INetworkConnectivityValidator,
1313
private $projectData: IProjectData,
1414
private $options: IOptions,
@@ -24,10 +24,10 @@ export class PreviewCommand implements ICommand {
2424
this.$logger.info(message);
2525
});
2626

27-
await this.$liveSyncService.liveSyncToPreviewApp({
27+
await this.$previewAppLiveSyncService.initialize({
28+
projectDir: this.$projectData.projectDir,
2829
bundle: !!this.$options.bundle,
2930
useHotModuleReload: this.$options.hmr,
30-
projectDir: this.$projectData.projectDir,
3131
env: this.$options.env
3232
});
3333

lib/declarations.d.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -578,8 +578,6 @@ interface IHasAndroidBundle {
578578
androidBundle?: boolean;
579579
}
580580

581-
interface IAppFilesUpdaterOptions { }
582-
583581
interface IPlatformBuildData extends IRelease, IHasUseHotModuleReloadOption, IBuildConfig, IEnvOptions { }
584582

585583
interface IDeviceEmulator extends IHasEmulatorOption, IDeviceIdentifier { }

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

Lines changed: 23 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,33 @@
11
import * as path from "path";
22
import { Device, FilesPayload } from "nativescript-preview-sdk";
3-
import { APP_RESOURCES_FOLDER_NAME, APP_FOLDER_NAME, TrackActionNames } from "../../../constants";
3+
import { APP_RESOURCES_FOLDER_NAME, APP_FOLDER_NAME, TrackActionNames, FILES_CHANGE_EVENT_NAME } from "../../../constants";
44
import { PreviewAppLiveSyncEvents } from "./preview-app-constants";
55
import { HmrConstants } from "../../../common/constants";
66
import { stringify } from "../../../common/helpers";
77
import { EventEmitter } from "events";
88
import { performanceLog } from "../../../common/decorators";
9+
import { WorkflowDataService } from "../../workflow/workflow-data-service";
10+
import { PlatformWatcherService } from "../../platform/platform-watcher-service";
911

1012
export class PreviewAppLiveSyncService extends EventEmitter implements IPreviewAppLiveSyncService {
1113

1214
private deviceInitializationPromise: IDictionary<Promise<FilesPayload>> = {};
15+
private promise = Promise.resolve();
1316

1417
constructor(
1518
private $analyticsService: IAnalyticsService,
1619
private $errors: IErrors,
17-
private $hooksService: IHooksService,
20+
private $hmrStatusService: IHmrStatusService,
1821
private $logger: ILogger,
1922
private $platformsData: IPlatformsData,
23+
private $platformWatcherService: PlatformWatcherService,
2024
private $projectDataService: IProjectDataService,
2125
private $previewSdkService: IPreviewSdkService,
2226
private $previewAppFilesService: IPreviewAppFilesService,
2327
private $previewAppPluginsService: IPreviewAppPluginsService,
2428
private $previewDevicesService: IPreviewDevicesService,
25-
private $hmrStatusService: IHmrStatusService) {
26-
super();
27-
}
29+
private $workflowDataService: WorkflowDataService
30+
) { super(); }
2831

2932
@performanceLog()
3033
public async initialize(data: IPreviewAppLiveSyncData): Promise<void> {
@@ -46,7 +49,15 @@ export class PreviewAppLiveSyncService extends EventEmitter implements IPreviewA
4649
});
4750
}
4851

49-
this.deviceInitializationPromise[device.id] = this.getInitialFilesForDevice(data, device);
52+
this.deviceInitializationPromise[device.id] = this.getInitialFilesForPlatformSafe(data, device.platform);
53+
54+
this.$platformWatcherService.on(FILES_CHANGE_EVENT_NAME, async (filesChangeData: IFilesChangeEventData) => {
55+
await this.onWebpackCompilationComplete(data, filesChangeData.hmrData, filesChangeData.files, device.platform);
56+
});
57+
58+
const { nativePlatformData, projectData, preparePlatformData } = this.$workflowDataService.createWorkflowData(device.platform.toLowerCase(), data.projectDir, data);
59+
await this.$platformWatcherService.startWatchers(nativePlatformData, projectData, preparePlatformData);
60+
5061
try {
5162
const payloads = await this.deviceInitializationPromise[device.id];
5263
return payloads;
@@ -89,38 +100,6 @@ export class PreviewAppLiveSyncService extends EventEmitter implements IPreviewA
89100
this.$previewDevicesService.updateConnectedDevices([]);
90101
}
91102

92-
private async getInitialFilesForDevice(data: IPreviewAppLiveSyncData, device: Device): Promise<FilesPayload> {
93-
const hookArgs = this.getHookArgs(data, device);
94-
await this.$hooksService.executeBeforeHooks("preview-sync", { hookArgs });
95-
await this.$previewAppPluginsService.comparePluginsOnDevice(data, device);
96-
const payloads = await this.getInitialFilesForPlatformSafe(data, device.platform);
97-
return payloads;
98-
}
99-
100-
private getHookArgs(data: IPreviewAppLiveSyncData, device: Device) {
101-
const filesToSyncMap: IDictionary<string[]> = {};
102-
const hmrData: IDictionary<IPlatformHmrData> = {};
103-
const promise = Promise.resolve();
104-
const result = {
105-
projectData: this.$projectDataService.getProjectData(data.projectDir),
106-
hmrData,
107-
config: {
108-
env: data.env,
109-
platform: device.platform,
110-
appFilesUpdaterOptions: {
111-
bundle: data.bundle,
112-
useHotModuleReload: data.useHotModuleReload,
113-
release: false
114-
},
115-
},
116-
externals: this.$previewAppPluginsService.getExternalPlugins(device),
117-
filesToSyncMap,
118-
startSyncFilesTimeout: async (platform: string) => await this.onWebpackCompilationComplete(data, hmrData, filesToSyncMap, promise, platform)
119-
};
120-
121-
return result;
122-
}
123-
124103
private async getInitialFilesForPlatformSafe(data: IPreviewAppLiveSyncData, platform: string): Promise<FilesPayload> {
125104
this.$logger.info(`Start sending initial files for platform ${platform}.`);
126105

@@ -153,21 +132,20 @@ export class PreviewAppLiveSyncService extends EventEmitter implements IPreviewA
153132
}
154133

155134
@performanceLog()
156-
private async onWebpackCompilationComplete(data: IPreviewAppLiveSyncData, hmrData: IDictionary<IPlatformHmrData>, filesToSyncMap: IDictionary<string[]>, promise: Promise<void>, platform: string) {
157-
await promise
135+
private async onWebpackCompilationComplete(data: IPreviewAppLiveSyncData, hmrData: IPlatformHmrData, files: string[], platform: string) {
136+
await this.promise
158137
.then(async () => {
159-
const currentHmrData = _.cloneDeep(hmrData);
160-
const platformHmrData = currentHmrData[platform] || <any>{};
138+
const platformHmrData = _.cloneDeep(hmrData);
161139
const projectData = this.$projectDataService.getProjectData(data.projectDir);
162140
const platformData = this.$platformsData.getPlatformData(platform, projectData);
163-
const clonedFiles = _.cloneDeep(filesToSyncMap[platform]);
141+
const clonedFiles = _.cloneDeep(files);
164142
const filesToSync = _.map(clonedFiles, fileToSync => {
165143
const result = path.join(platformData.appDestinationDirectoryPath, APP_FOLDER_NAME, path.relative(projectData.getAppDirectoryPath(), fileToSync));
166144
return result;
167145
});
168146

169-
promise = this.syncFilesForPlatformSafe(data, { filesToSync }, platform);
170-
await promise;
147+
this.promise = this.syncFilesForPlatformSafe(data, { filesToSync }, platform);
148+
await this.promise;
171149

172150
if (data.useHotModuleReload && platformHmrData.hash) {
173151
const devices = this.$previewDevicesService.getDevicesForPlatform(platform);
@@ -183,7 +161,6 @@ export class PreviewAppLiveSyncService extends EventEmitter implements IPreviewA
183161
}));
184162
}
185163
});
186-
filesToSyncMap[platform] = [];
187164
}
188165

189166
private showWarningsForNativeFiles(files: string[]): void {

lib/services/livesync/playground/preview-qr-code-service.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,8 @@ export class PreviewQrCodeService implements IPreviewQrCodeService {
4444
const qrCodeUrl = this.$previewSdkService.getQrCodeUrl(options);
4545
const url = await this.getShortenUrl(qrCodeUrl);
4646

47+
this.$logger.info("======== qrCodeUrl ======== ", qrCodeUrl);
48+
4749
this.$logger.info();
4850
const message = `${EOL} Generating qrcode for url ${url}.`;
4951
this.$logger.trace(message);

0 commit comments

Comments
 (0)