@@ -55,6 +55,14 @@ const CORE_TYPES = [
5555 'trimRight'
5656] ;
5757
58+ // Types that are defined in a common layer but are known to be only
59+ // available in native environments should not be allowed in browser
60+ const NATIVE_TYPES = [
61+ 'NativeParsedArgs' ,
62+ 'INativeEnvironmentService' ,
63+ 'INativeWindowConfiguration'
64+ ] ;
65+
5866const RULES = [
5967
6068 // Tests: skip
@@ -73,6 +81,40 @@ const RULES = [
7381 'MessageEvent' ,
7482 'data'
7583 ] ,
84+ disallowedTypes : NATIVE_TYPES ,
85+ disallowedDefinitions : [
86+ 'lib.dom.d.ts' , // no DOM
87+ '@types/node' // no node.js
88+ ]
89+ } ,
90+
91+ // Common: vs/platform/environment/common/argv.ts
92+ {
93+ target : '**/vs/platform/environment/common/argv.ts' ,
94+ disallowedTypes : [ /* Ignore native types that are defined from here */ ] ,
95+ allowedTypes : CORE_TYPES ,
96+ disallowedDefinitions : [
97+ 'lib.dom.d.ts' , // no DOM
98+ '@types/node' // no node.js
99+ ]
100+ } ,
101+
102+ // Common: vs/platform/environment/common/environment.ts
103+ {
104+ target : '**/vs/platform/environment/common/environment.ts' ,
105+ disallowedTypes : [ /* Ignore native types that are defined from here */ ] ,
106+ allowedTypes : CORE_TYPES ,
107+ disallowedDefinitions : [
108+ 'lib.dom.d.ts' , // no DOM
109+ '@types/node' // no node.js
110+ ]
111+ } ,
112+
113+ // Common: vs/platform/windows/common/windows.ts
114+ {
115+ target : '**/vs/platform/windows/common/windows.ts' ,
116+ disallowedTypes : [ /* Ignore native types that are defined from here */ ] ,
117+ allowedTypes : CORE_TYPES ,
76118 disallowedDefinitions : [
77119 'lib.dom.d.ts' , // no DOM
78120 '@types/node' // no node.js
@@ -88,6 +130,7 @@ const RULES = [
88130 // Safe access to global
89131 'global'
90132 ] ,
133+ disallowedTypes : NATIVE_TYPES ,
91134 disallowedDefinitions : [
92135 'lib.dom.d.ts' , // no DOM
93136 '@types/node' // no node.js
@@ -98,6 +141,7 @@ const RULES = [
98141 {
99142 target : '**/vs/**/common/**' ,
100143 allowedTypes : CORE_TYPES ,
144+ disallowedTypes : NATIVE_TYPES ,
101145 disallowedDefinitions : [
102146 'lib.dom.d.ts' , // no DOM
103147 '@types/node' // no node.js
@@ -108,6 +152,7 @@ const RULES = [
108152 {
109153 target : '**/vs/**/browser/**' ,
110154 allowedTypes : CORE_TYPES ,
155+ disallowedTypes : NATIVE_TYPES ,
111156 disallowedDefinitions : [
112157 '@types/node' // no node.js
113158 ]
@@ -117,6 +162,7 @@ const RULES = [
117162 {
118163 target : '**/src/vs/editor/contrib/**' ,
119164 allowedTypes : CORE_TYPES ,
165+ disallowedTypes : NATIVE_TYPES ,
120166 disallowedDefinitions : [
121167 '@types/node' // no node.js
122168 ]
@@ -181,6 +227,7 @@ interface IRule {
181227 skip ?: boolean ;
182228 allowedTypes ?: string [ ] ;
183229 disallowedDefinitions ?: string [ ] ;
230+ disallowedTypes ?: string [ ] ;
184231}
185232
186233let hasErrors = false ;
@@ -199,6 +246,14 @@ function checkFile(program: ts.Program, sourceFile: ts.SourceFile, rule: IRule)
199246 return ; // override
200247 }
201248
249+ if ( rule . disallowedTypes ?. some ( disallowed => disallowed === text ) ) {
250+ const { line, character } = sourceFile . getLineAndCharacterOfPosition ( node . getStart ( ) ) ;
251+ console . log ( `[build/lib/layersChecker.ts]: Reference to '${ text } ' violates layer '${ rule . target } ' (${ sourceFile . fileName } (${ line + 1 } ,${ character + 1 } )` ) ;
252+
253+ hasErrors = true ;
254+ return ;
255+ }
256+
202257 const checker = program . getTypeChecker ( ) ;
203258 const symbol = checker . getSymbolAtLocation ( node ) ;
204259 if ( symbol ) {
0 commit comments