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