diff --git a/lib/definitions/preview-app-livesync.d.ts b/lib/definitions/preview-app-livesync.d.ts index caf5d65114..bac20cb7b0 100644 --- a/lib/definitions/preview-app-livesync.d.ts +++ b/lib/definitions/preview-app-livesync.d.ts @@ -18,6 +18,7 @@ declare global { } interface IPreviewAppPluginsService { + getPluginsUsageWarnings(data: IPreviewAppLiveSyncData, device: Device): string[]; comparePluginsOnDevice(data: IPreviewAppLiveSyncData, device: Device): Promise; getExternalPlugins(device: Device): string[]; } @@ -49,5 +50,6 @@ declare global { updateConnectedDevices(devices: Device[]): void; getDeviceById(id: string): Device; getDevicesForPlatform(platform: string): Device[]; + getPluginsUsageWarnings(data: IPreviewAppLiveSyncData, device: Device): string[]; } } \ No newline at end of file diff --git a/lib/services/livesync/playground/devices/preview-devices-service.ts b/lib/services/livesync/playground/devices/preview-devices-service.ts index c52ec67229..93429b789e 100644 --- a/lib/services/livesync/playground/devices/preview-devices-service.ts +++ b/lib/services/livesync/playground/devices/preview-devices-service.ts @@ -5,10 +5,11 @@ import { DeviceDiscoveryEventNames, DEVICE_LOG_EVENT_NAME } from "../../../../co export class PreviewDevicesService extends EventEmitter implements IPreviewDevicesService { private connectedDevices: Device[] = []; - constructor(private $previewAppLogProvider: IPreviewAppLogProvider) { - super(); + constructor(private $previewAppLogProvider: IPreviewAppLogProvider, + private $previewAppPluginsService: IPreviewAppPluginsService) { + super(); - this.initialize(); + this.initialize(); } public getConnectedDevices(): Device[] { @@ -33,6 +34,10 @@ export class PreviewDevicesService extends EventEmitter implements IPreviewDevic return _.filter(this.connectedDevices, { platform: platform.toLowerCase() }); } + public getPluginsUsageWarnings(data: IPreviewAppLiveSyncData, device: Device): string[] { + return this.$previewAppPluginsService.getPluginsUsageWarnings(data, device); + } + private initialize(): void { this.$previewAppLogProvider.on(DEVICE_LOG_EVENT_NAME, (deviceId: string, message: string) => { this.emit(DEVICE_LOG_EVENT_NAME, deviceId, message); diff --git a/lib/services/livesync/playground/preview-app-plugins-service.ts b/lib/services/livesync/playground/preview-app-plugins-service.ts index f70637d13e..3c8c80a178 100644 --- a/lib/services/livesync/playground/preview-app-plugins-service.ts +++ b/lib/services/livesync/playground/preview-app-plugins-service.ts @@ -9,11 +9,20 @@ import { PLATFORMS_DIR_NAME, PACKAGE_JSON_FILE_NAME } from "../../../constants"; export class PreviewAppPluginsService implements IPreviewAppPluginsService { private previewAppVersionWarnings: IDictionary = {}; - constructor(private $fs: IFileSystem, + constructor(private $errors: IErrors, + private $fs: IFileSystem, private $logger: ILogger, private $pluginsService: IPluginsService) { } - public async comparePluginsOnDevice(data: IPreviewAppLiveSyncData, device: Device): Promise { + public getPluginsUsageWarnings(data: IPreviewAppLiveSyncData, device: Device): string[] { + if (!device) { + this.$errors.failWithoutHelp("No device provided."); + } + + if (!device.previewAppVersion) { + this.$errors.failWithoutHelp("No version of preview app provided."); + } + if (!this.previewAppVersionWarnings[device.previewAppVersion]) { const devicePlugins = this.getDevicePlugins(device); const localPlugins = this.getLocalPlugins(data.projectDir); @@ -27,7 +36,12 @@ export class PreviewAppPluginsService implements IPreviewAppPluginsService { this.previewAppVersionWarnings[device.previewAppVersion] = warnings; } - this.previewAppVersionWarnings[device.previewAppVersion].map(warning => this.$logger.warn(warning)); + return this.previewAppVersionWarnings[device.previewAppVersion]; + } + + public async comparePluginsOnDevice(data: IPreviewAppLiveSyncData, device: Device): Promise { + const warnings = this.getPluginsUsageWarnings(data, device); + _.map(warnings, warning => this.$logger.warn(warning)); } public getExternalPlugins(device: Device): string[] { diff --git a/test/services/playground/preview-app-plugins-service.ts b/test/services/playground/preview-app-plugins-service.ts index d23c358e55..277b5be34b 100644 --- a/test/services/playground/preview-app-plugins-service.ts +++ b/test/services/playground/preview-app-plugins-service.ts @@ -4,6 +4,7 @@ import { Device } from "nativescript-preview-sdk"; import { assert } from "chai"; import * as util from "util"; import { PluginComparisonMessages } from "../../../lib/services/livesync/playground/preview-app-constants"; +import { ErrorsStub } from "../../stubs"; let readJsonParams: string[] = []; let warnParams: string[] = []; @@ -43,6 +44,7 @@ function createTestInjector(localPlugins: IStringDictionary, options?: { isNativ trace: () => ({}), warn: (message: string) => warnParams.push(message) }); + injector.register("errors", ErrorsStub); injector.register("previewAppPluginsService", PreviewAppPluginsService); return injector; } diff --git a/test/services/preview-devices-service.ts b/test/services/preview-devices-service.ts index 0f71e273be..ccc9339a66 100644 --- a/test/services/preview-devices-service.ts +++ b/test/services/preview-devices-service.ts @@ -3,17 +3,19 @@ import { PreviewDevicesService } from "../../lib/services/livesync/playground/de import { Device } from "nativescript-preview-sdk"; import { assert } from "chai"; import { DeviceDiscoveryEventNames } from "../../lib/common/constants"; -import { LoggerStub } from "../stubs"; +import { LoggerStub, ErrorsStub } from "../stubs"; let foundDevices: Device[] = []; let lostDevices: Device[] = []; function createTestInjector(): IInjector { const injector = new Yok(); + injector.register("errors", ErrorsStub); injector.register("previewDevicesService", PreviewDevicesService); injector.register("previewAppLogProvider", { on: () => ({}) }); + injector.register("previewAppPluginsService", {}); injector.register("logger", LoggerStub); return injector; }