@@ -49,19 +49,14 @@ export const programFactory = (params: ProgramFactoryParams): ProgramFactory =>
49
49
const virtualMap : VirtualMap = new Map ( ) ;
50
50
51
51
const projectRoot = path . dirname ( params . configPath ) ;
52
- const tslibPath = path . join ( projectRoot , 'node_modules/typescript/lib/' ) ;
53
- const system = createFSBackedSystem ( vfsMap , projectRoot , ts , tslibPath ) ;
52
+ const system = createFSBackedSystem ( vfsMap , projectRoot , ts , resolveDefaultLibsPath ( params ) ) ;
54
53
const config = resolveConfig ( params , system ) ;
55
54
56
- for ( const { filename, contents } of resolveLibs ( params ) ) {
57
- if ( contents ) system . writeFile ( path . join ( tslibPath , filename ) , contents ) ;
58
- }
59
-
60
55
const rootNames = new Set ( config . fileNames ) ;
61
56
const options = {
57
+ getDefaultLibFilePath : ts . getDefaultLibFilePath ( config . options ) ,
62
58
...defaultCompilerOptions ,
63
59
...config . options ,
64
- getDefaultLibFilePath : tslibPath ,
65
60
} ;
66
61
const host = createVirtualCompilerHost ( system , options , ts ) ;
67
62
@@ -178,45 +173,31 @@ export const programFactory = (params: ProgramFactoryParams): ProgramFactory =>
178
173
return factory ;
179
174
} ;
180
175
181
- interface LibFile {
182
- filename : string ;
183
- contents : string ;
184
- }
185
-
186
176
const defaultCompilerOptions = {
187
177
target : ts . ScriptTarget . Latest ,
188
178
} satisfies ts . CompilerOptions ;
189
179
190
- const resolveLibs = ( params : ProgramFactoryParams ) : readonly LibFile [ ] => {
191
- const require = createRequire ( params . configPath ) ;
192
- const request = 'typescript/package.json' ;
193
- let tsPath : string ;
194
- try {
195
- tsPath = path . dirname (
196
- require . resolve ( request , {
197
- paths : [
198
- path . join ( path . dirname ( params . configPath ) , 'node_modules' ) ,
199
- path . join ( params . rootPath , 'node_modules' ) ,
200
- ...( require . resolve . paths ( request ) || [ ] ) ,
201
- ] ,
202
- } )
203
- ) ;
204
- } catch ( _error ) {
205
- return [ ] ;
206
- }
207
- const libs = ts . sys . readDirectory (
208
- path . resolve ( tsPath , 'lib' ) ,
209
- /*extensions*/ [ '.d.ts' ] ,
210
- /*exclude*/ [ 'typescript.d.ts' ] ,
211
- /*include*/ [ 'lib.*' ] ,
212
- /*depth*/ 1
213
- ) ;
214
- const output : LibFile [ ] = [ ] ;
215
- for ( const fileName of libs ) {
216
- const contents = ts . sys . readFile ( fileName , 'utf8' ) ;
217
- if ( contents ) output . push ( { filename : path . basename ( fileName ) , contents } ) ;
180
+ const resolveDefaultLibsPath = ( params : ProgramFactoryParams ) : string => {
181
+ const target = ts . getDefaultLibFilePath ( { } ) ;
182
+ if ( ! ts . sys . fileExists ( target ) ) {
183
+ const require = createRequire ( params . configPath ) ;
184
+ const request = 'typescript/package.json' ;
185
+ try {
186
+ return path . dirname (
187
+ require . resolve ( request , {
188
+ paths : [
189
+ path . join ( path . dirname ( params . configPath ) , 'node_modules' ) ,
190
+ path . join ( params . rootPath , 'node_modules' ) ,
191
+ ...( require . resolve . paths ( request ) || [ ] ) ,
192
+ ] ,
193
+ } )
194
+ ) ;
195
+ } catch ( _error ) {
196
+ return path . resolve ( params . rootPath , 'node_modules' , 'typescript' , 'lib' ) ;
197
+ }
198
+ } else {
199
+ return path . dirname ( target ) ;
218
200
}
219
- return output ;
220
201
} ;
221
202
222
203
const resolveConfig = ( params : ProgramFactoryParams , system : ts . System ) : ts . ParsedCommandLine => {
0 commit comments