@@ -10,9 +10,10 @@ export class PreviewAppPluginsService implements IPreviewAppPluginsService {
10
10
constructor ( private $errors : IErrors ,
11
11
private $fs : IFileSystem ,
12
12
private $logger : ILogger ,
13
+ private $packageInstallationManager : IPackageInstallationManager ,
13
14
private $pluginsService : IPluginsService ) { }
14
15
15
- public getPluginsUsageWarnings ( data : IPreviewAppLiveSyncData , device : Device ) : string [ ] {
16
+ public async getPluginsUsageWarnings ( data : IPreviewAppLiveSyncData , device : Device ) : Promise < string [ ] > {
16
17
if ( ! device ) {
17
18
this . $errors . fail ( "No device provided." ) ;
18
19
}
@@ -23,19 +24,21 @@ export class PreviewAppPluginsService implements IPreviewAppPluginsService {
23
24
24
25
const devicePlugins = this . getDevicePlugins ( device ) ;
25
26
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
+ }
33
36
34
37
return warnings ;
35
38
}
36
39
37
40
public async comparePluginsOnDevice ( data : IPreviewAppLiveSyncData , device : Device ) : Promise < void > {
38
- const warnings = this . getPluginsUsageWarnings ( data , device ) ;
41
+ const warnings = await this . getPluginsUsageWarnings ( data , device ) ;
39
42
_ . map ( warnings , warning => this . $logger . warn ( warning ) ) ;
40
43
}
41
44
@@ -69,33 +72,40 @@ export class PreviewAppPluginsService implements IPreviewAppPluginsService {
69
72
}
70
73
}
71
74
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 > {
73
76
const pluginPackageJsonPath = path . join ( data . projectDir , NODE_MODULES_DIR_NAME , localPlugin , PACKAGE_JSON_FILE_NAME ) ;
74
77
const isNativeScriptPlugin = this . $pluginsService . isNativeScriptPlugin ( pluginPackageJsonPath ) ;
75
78
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
+ }
76
83
77
- return shouldCompare ? this . getWarningForPluginCore ( localPlugin , localPluginVersion , devicePluginVersion , device . id ) : null ;
84
+ return warning ;
78
85
}
79
86
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 } ` ) ;
82
89
83
90
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 ) ;
85
92
}
86
93
87
94
const shouldSkipCheck = ! semver . valid ( localPluginVersion ) && ! semver . validRange ( localPluginVersion ) ;
88
95
if ( shouldSkipCheck ) {
89
96
return null ;
90
97
}
91
98
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
+ }
94
108
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 ) ;
99
109
}
100
110
101
111
return null ;
0 commit comments