@@ -10,9 +10,10 @@ export class PreviewAppPluginsService implements IPreviewAppPluginsService {
1010 constructor ( private $errors : IErrors ,
1111 private $fs : IFileSystem ,
1212 private $logger : ILogger ,
13+ private $packageInstallationManager : IPackageInstallationManager ,
1314 private $pluginsService : IPluginsService ) { }
1415
15- public getPluginsUsageWarnings ( data : IPreviewAppLiveSyncData , device : Device ) : string [ ] {
16+ public async getPluginsUsageWarnings ( data : IPreviewAppLiveSyncData , device : Device ) : Promise < string [ ] > {
1617 if ( ! device ) {
1718 this . $errors . fail ( "No device provided." ) ;
1819 }
@@ -23,19 +24,21 @@ export class PreviewAppPluginsService implements IPreviewAppPluginsService {
2324
2425 const devicePlugins = this . getDevicePlugins ( device ) ;
2526 const localPlugins = this . getLocalPlugins ( data . projectDir ) ;
26- const warnings = _ . keys ( localPlugins )
27- . map ( localPlugin => {
28- const localPluginVersion = localPlugins [ localPlugin ] ;
29- const devicePluginVersion = devicePlugins [ localPlugin ] ;
30- return this . getWarningForPlugin ( data , localPlugin , localPluginVersion , devicePluginVersion , device ) ;
31- } )
32- . filter ( item => ! ! item ) ;
27+ const warnings : string [ ] = [ ] ;
28+ for ( const pluginName in localPlugins ) {
29+ const localPluginVersion = localPlugins [ pluginName ] ;
30+ const devicePluginVersion = devicePlugins [ pluginName ] ;
31+ const pluginWarnings = await this . getWarningForPlugin ( data , pluginName , localPluginVersion , devicePluginVersion , device ) ;
32+ if ( pluginWarnings ) {
33+ warnings . push ( pluginWarnings ) ;
34+ }
35+ }
3336
3437 return warnings ;
3538 }
3639
3740 public async comparePluginsOnDevice ( data : IPreviewAppLiveSyncData , device : Device ) : Promise < void > {
38- const warnings = this . getPluginsUsageWarnings ( data , device ) ;
41+ const warnings = await this . getPluginsUsageWarnings ( data , device ) ;
3942 _ . map ( warnings , warning => this . $logger . warn ( warning ) ) ;
4043 }
4144
@@ -69,33 +72,40 @@ export class PreviewAppPluginsService implements IPreviewAppPluginsService {
6972 }
7073 }
7174
72- private getWarningForPlugin ( data : IPreviewAppLiveSyncData , localPlugin : string , localPluginVersion : string , devicePluginVersion : string , device : Device ) : string {
75+ private async getWarningForPlugin ( data : IPreviewAppLiveSyncData , localPlugin : string , localPluginVersion : string , devicePluginVersion : string , device : Device ) : Promise < string > {
7376 const pluginPackageJsonPath = path . join ( data . projectDir , NODE_MODULES_DIR_NAME , localPlugin , PACKAGE_JSON_FILE_NAME ) ;
7477 const isNativeScriptPlugin = this . $pluginsService . isNativeScriptPlugin ( pluginPackageJsonPath ) ;
7578 const shouldCompare = isNativeScriptPlugin && this . hasNativeCode ( localPlugin , device . platform , data . projectDir ) ;
79+ let warning = null ;
80+ if ( shouldCompare ) {
81+ warning = await this . getWarningForPluginCore ( localPlugin , localPluginVersion , devicePluginVersion , device . id ) ;
82+ }
7683
77- return shouldCompare ? this . getWarningForPluginCore ( localPlugin , localPluginVersion , devicePluginVersion , device . id ) : null ;
84+ return warning ;
7885 }
7986
80- private getWarningForPluginCore ( localPlugin : string , localPluginVersion : string , devicePluginVersion : string , deviceId : string ) : string {
81- this . $logger . trace ( `Comparing plugin ${ localPlugin } with localPluginVersion ${ localPluginVersion } and devicePluginVersion ${ devicePluginVersion } ` ) ;
87+ private async getWarningForPluginCore ( pluginName : string , localPluginVersion : string , devicePluginVersion : string , deviceId : string ) : Promise < string > {
88+ this . $logger . trace ( `Comparing plugin ${ pluginName } with localPluginVersion ${ localPluginVersion } and devicePluginVersion ${ devicePluginVersion } ` ) ;
8289
8390 if ( ! devicePluginVersion ) {
84- return util . format ( PluginComparisonMessages . PLUGIN_NOT_INCLUDED_IN_PREVIEW_APP , localPlugin , deviceId ) ;
91+ return util . format ( PluginComparisonMessages . PLUGIN_NOT_INCLUDED_IN_PREVIEW_APP , pluginName , deviceId ) ;
8592 }
8693
8794 const shouldSkipCheck = ! semver . valid ( localPluginVersion ) && ! semver . validRange ( localPluginVersion ) ;
8895 if ( shouldSkipCheck ) {
8996 return null ;
9097 }
9198
92- const localPluginVersionData = semver . coerce ( localPluginVersion ) ;
93- const devicePluginVersionData = semver . coerce ( devicePluginVersion ) ;
99+ const localPluginVersionData = await this . $packageInstallationManager . getMaxSatisfyingVersionSafe ( pluginName , localPluginVersion ) ;
100+ const devicePluginVersionData = await this . $packageInstallationManager . getMaxSatisfyingVersionSafe ( pluginName , devicePluginVersion ) ;
101+
102+ if ( semver . valid ( localPluginVersionData ) && semver . valid ( devicePluginVersionData ) ) {
103+ if ( semver . major ( localPluginVersionData ) !== semver . major ( devicePluginVersionData ) ) {
104+ return util . format ( PluginComparisonMessages . LOCAL_PLUGIN_WITH_DIFFERENCE_IN_MAJOR_VERSION , pluginName , localPluginVersion , devicePluginVersion ) ;
105+ } else if ( semver . minor ( localPluginVersionData ) > semver . minor ( devicePluginVersionData ) ) {
106+ return util . format ( PluginComparisonMessages . LOCAL_PLUGIN_WITH_GREATHER_MINOR_VERSION , pluginName , localPluginVersion , devicePluginVersion ) ;
107+ }
94108
95- if ( localPluginVersionData . major !== devicePluginVersionData . major ) {
96- return util . format ( PluginComparisonMessages . LOCAL_PLUGIN_WITH_DIFFERENCE_IN_MAJOR_VERSION , localPlugin , localPluginVersion , devicePluginVersion ) ;
97- } else if ( localPluginVersionData . minor > devicePluginVersionData . minor ) {
98- return util . format ( PluginComparisonMessages . LOCAL_PLUGIN_WITH_GREATHER_MINOR_VERSION , localPlugin , localPluginVersion , devicePluginVersion ) ;
99109 }
100110
101111 return null ;
0 commit comments