@@ -85,8 +85,13 @@ export class PluginsService implements IPluginsService {
85
85
}
86
86
87
87
public getAvailablePlugins ( ) : IPlugin [ ] {
88
- return _ . values ( this . identifierToPlugin ) ;
88
+ let plugins = _ . values ( this . identifierToPlugin ) ;
89
+ if ( this . $project . projectData ) {
90
+ plugins = _ . filter ( plugins , pl => this . isPluginSupported ( pl , this . $project . projectData . FrameworkVersion ) ) ;
91
+ }
92
+ return plugins ;
89
93
}
94
+
90
95
private get configurations ( ) : string [ ] {
91
96
return [ this . $projectConstants . DEBUG_CONFIGURATION_NAME , this . $projectConstants . RELEASE_CONFIGURATION_NAME ] ;
92
97
}
@@ -136,6 +141,9 @@ export class PluginsService implements IPluginsService {
136
141
let pluginToAdd = this . getPluginByName ( pluginName ) ;
137
142
if ( pluginToAdd . type === pluginsDataLib . PluginType . MarketplacePlugin ) {
138
143
version = this . selectPluginVersion ( version , pluginToAdd ) . wait ( ) ;
144
+ if ( ! this . isPluginSupported ( pluginToAdd , this . $project . projectData . FrameworkVersion , version ) ) {
145
+ this . $errors . failWithoutHelp ( `Plugin ${ pluginName } is not avaialble for framework version '${ this . $project . projectData . FrameworkVersion } '.` ) ;
146
+ }
139
147
}
140
148
141
149
let configurations = this . $project . configurations ;
@@ -220,12 +228,18 @@ export class PluginsService implements IPluginsService {
220
228
return { name, version } ;
221
229
}
222
230
223
- public isPluginSupported ( plugin : string , version : string , frameworkVersion : string ) : boolean {
224
- let pluginCordovaVersionRange = _ . find ( this . getPluginVersions ( plugin ) , v => v . value === version ) . cordovaVersionRange ;
225
- return semver . satisfies ( frameworkVersion , pluginCordovaVersionRange ) ;
231
+ private isPluginSupported ( plugin : IPlugin , frameworkVersion : string , pluginVersion ?: string ) : boolean {
232
+ if ( ! this . isMarketplacePlugin ( plugin ) ) {
233
+ return true ;
234
+ }
235
+
236
+ pluginVersion = pluginVersion || plugin . data . Version ;
237
+ let pluginVersions = this . getPluginVersions ( plugin ) ;
238
+ let version = _ . find ( pluginVersions , v => v . value === pluginVersion ) ;
239
+ return version && semver . satisfies ( frameworkVersion , version . cordovaVersionRange ) ;
226
240
}
227
241
228
- public getInstalledPluginByName ( pluginName : string ) : IPlugin [ ] {
242
+ private getInstalledPluginByName ( pluginName : string ) : IPlugin [ ] {
229
243
pluginName = pluginName . toLowerCase ( ) ;
230
244
let installedPlugins = this . getInstalledPlugins ( ) ;
231
245
let installedPluginInstances = _ . filter ( installedPlugins , ( plugin : IPlugin ) => plugin . data . Name . toLowerCase ( ) === pluginName || plugin . data . Identifier . toLowerCase ( ) === pluginName ) ;
@@ -378,28 +392,19 @@ export class PluginsService implements IPluginsService {
378
392
return plugin ;
379
393
}
380
394
381
- public getPluginVersions ( pluginName : string ) : IPluginVersion [ ] {
382
- let toLowerCasePluginName = pluginName . toLowerCase ( ) ;
383
-
384
- let versions :any [ ] = [ ] ;
385
- _ . each ( this . getAvailablePlugins ( ) , ( plugin :IPlugin ) => {
386
- if ( plugin . data . Name . toLowerCase ( ) === toLowerCasePluginName || plugin . data . Identifier . toLowerCase ( ) === toLowerCasePluginName ) {
387
- let pluginVersionsData = ( < IMarketplacePlugin > plugin ) . pluginVersionsData ;
388
- versions = _ . map ( pluginVersionsData . Versions , p => {
389
- let pluginVersion : IPluginVersion = {
390
- name : p . Version ,
391
- value : p . Version ,
392
- cordovaVersionRange : p . SupportedVersion
393
- }
394
-
395
- return pluginVersion ;
396
- } ) ;
397
- return false ;
395
+ public getPluginVersions ( plugin : IPlugin ) : IPluginVersion [ ] {
396
+ let pluginVersionsData = ( < IMarketplacePlugin > plugin ) . pluginVersionsData ;
397
+ return _ . map ( pluginVersionsData . Versions , p => {
398
+ let pluginVersion : IPluginVersion = {
399
+ name : p . Version ,
400
+ value : p . Version ,
401
+ cordovaVersionRange : p . SupportedVersion
398
402
}
399
- } ) ;
400
403
401
- return versions ;
404
+ return pluginVersion ;
405
+ } ) ;
402
406
}
407
+
403
408
private promptForVersion ( pluginName : string , versions : any [ ] ) : IFuture < string > {
404
409
return ( ( ) => {
405
410
return versions . length > 1 ? this . promptForVersionCore ( pluginName , versions ) . wait ( ) : versions [ 0 ] . value ;
@@ -500,7 +505,7 @@ export class PluginsService implements IPluginsService {
500
505
private selectPluginVersion ( version : string , plugin : IPlugin , options ?: { excludeCurrentVersion : boolean } ) : IFuture < string > {
501
506
return ( ( ) : string => {
502
507
let pluginName = plugin . data . Name ;
503
- let versions = this . getPluginVersions ( pluginName ) ;
508
+ let versions = this . getPluginVersions ( plugin ) ;
504
509
if ( version ) {
505
510
if ( ! _ . any ( versions , v => v . value === version ) ) {
506
511
this . $errors . failWithoutHelp ( "Invalid version %s. The valid versions are: %s." , version , versions . map ( v => v . value ) . join ( ", " ) ) ;
0 commit comments