@@ -804,18 +804,35 @@ export function isWebKind(manifest: Manifest): boolean {
804
804
return extensionKind . some ( kind => kind === 'web' ) ;
805
805
}
806
806
807
- const workspaceExtensionPoints : string [ ] = [ 'terminal' , 'debuggers' , 'jsonValidation' ] ;
807
+ const extensionPointExtensionKindsMap = new Map < string , ExtensionKind [ ] > ( ) ;
808
+ extensionPointExtensionKindsMap . set ( 'jsonValidation' , [ 'workspace' , 'web' ] ) ;
809
+ extensionPointExtensionKindsMap . set ( 'debuggers' , [ 'workspace' ] ) ;
810
+ extensionPointExtensionKindsMap . set ( 'terminal' , [ 'workspace' ] ) ;
808
811
809
812
function getExtensionKind ( manifest : Manifest ) : ExtensionKind [ ] {
813
+
814
+ const deducedExtensionKind = deduceExtensionKind ( manifest ) ;
815
+
810
816
// check the manifest
811
817
if ( manifest . extensionKind ) {
812
- return Array . isArray ( manifest . extensionKind )
818
+ const result : ExtensionKind [ ] = Array . isArray ( manifest . extensionKind )
813
819
? manifest . extensionKind
814
820
: manifest . extensionKind === 'ui'
815
821
? [ 'ui' , 'workspace' ]
816
- : [ manifest . extensionKind ] ;
822
+ : [ manifest . extensionKind ] ;
823
+
824
+ // Add web kind if the extension can run as web extension
825
+ if ( deducedExtensionKind . indexOf ( 'web' ) !== - 1 && result . indexOf ( 'web' ) === - 1 ) {
826
+ result . push ( 'web' ) ;
827
+ }
828
+
829
+ return result ;
817
830
}
818
831
832
+ return deducedExtensionKind ;
833
+ }
834
+
835
+ function deduceExtensionKind ( manifest : Manifest ) : ExtensionKind [ ] {
819
836
// Not an UI extension if it has main
820
837
if ( manifest . main ) {
821
838
if ( manifest . browser ) {
@@ -828,22 +845,24 @@ function getExtensionKind(manifest: Manifest): ExtensionKind[] {
828
845
return [ 'web' ] ;
829
846
}
830
847
848
+ let result : ExtensionKind [ ] = [ 'ui' , 'workspace' , 'web' ] ;
849
+
831
850
const isNonEmptyArray = obj => Array . isArray ( obj ) && obj . length > 0 ;
832
- // Not an UI nor web extension if it has dependencies or an extension pack
851
+ // Not an UI extension if extension has dependencies or an extension pack
833
852
if ( isNonEmptyArray ( manifest . extensionDependencies ) || isNonEmptyArray ( manifest . extensionPack ) ) {
834
- return [ 'workspace' ] ;
853
+ result = [ 'workspace' , 'web '] ;
835
854
}
836
855
837
856
if ( manifest . contributes ) {
838
- // Not an UI nor web extension if it has workspace contributions
839
857
for ( const contribution of Object . keys ( manifest . contributes ) ) {
840
- if ( workspaceExtensionPoints . indexOf ( contribution ) !== - 1 ) {
841
- return [ 'workspace' ] ;
858
+ const supportedExtensionKinds = extensionPointExtensionKindsMap . get ( contribution ) ;
859
+ if ( supportedExtensionKinds ) {
860
+ result = result . filter ( extensionKind => supportedExtensionKinds . indexOf ( extensionKind ) !== - 1 ) ;
842
861
}
843
862
}
844
863
}
845
864
846
- return [ 'ui' , 'workspace' , 'web' ] ;
865
+ return result ;
847
866
}
848
867
849
868
export class WebExtensionProcessor extends BaseProcessor {
0 commit comments