1
+ namespace ts . projectSystem {
2
+ describe ( "unittests:: tsserver:: plugins loading" , ( ) => {
3
+ function createHostWithPlugin ( files : readonly File [ ] ) {
4
+ const host = createServerHost ( files ) ;
5
+ const pluginsLoaded : string [ ] = [ ] ;
6
+ host . require = ( _initialPath , moduleName ) => {
7
+ pluginsLoaded . push ( moduleName ) ;
8
+ return {
9
+ module : ( ) => ( {
10
+ create ( info : server . PluginCreateInfo ) {
11
+ return Harness . LanguageService . makeDefaultProxy ( info ) ;
12
+ }
13
+ } ) ,
14
+ error : undefined
15
+ } ;
16
+ } ;
17
+ return { host, pluginsLoaded } ;
18
+ }
19
+
20
+ it ( "With local plugins" , ( ) => {
21
+ const expectedToLoad = [ "@myscoped/plugin" , "unscopedPlugin" ] ;
22
+ const notToLoad = [ "../myPlugin" , "myPlugin/../malicious" ] ;
23
+ const aTs : File = { path : "/a.ts" , content : `class c { prop = "hello"; foo() { return this.prop; } }` } ;
24
+ const tsconfig : File = {
25
+ path : "/tsconfig.json" ,
26
+ content : JSON . stringify ( {
27
+ compilerOptions : { plugins : [ ...expectedToLoad , ...notToLoad ] . map ( name => ( { name } ) ) }
28
+ } )
29
+ } ;
30
+ const { host, pluginsLoaded } = createHostWithPlugin ( [ aTs , tsconfig , libFile ] ) ;
31
+ const service = createProjectService ( host ) ;
32
+ service . openClientFile ( aTs . path ) ;
33
+ assert . deepEqual ( pluginsLoaded , expectedToLoad ) ;
34
+ } ) ;
35
+
36
+ it ( "With global plugins" , ( ) => {
37
+ const expectedToLoad = [ "@myscoped/plugin" , "unscopedPlugin" ] ;
38
+ const notToLoad = [ "../myPlugin" , "myPlugin/../malicious" ] ;
39
+ const aTs : File = { path : "/a.ts" , content : `class c { prop = "hello"; foo() { return this.prop; } }` } ;
40
+ const tsconfig : File = {
41
+ path : "/tsconfig.json" ,
42
+ content : "{}"
43
+ } ;
44
+ const { host, pluginsLoaded } = createHostWithPlugin ( [ aTs , tsconfig , libFile ] ) ;
45
+ const service = createProjectService ( host , /*parameters*/ undefined , { globalPlugins : [ ...expectedToLoad , ...notToLoad ] } ) ;
46
+ service . openClientFile ( aTs . path ) ;
47
+ assert . deepEqual ( pluginsLoaded , expectedToLoad ) ;
48
+ } ) ;
49
+ } ) ;
50
+ }
0 commit comments