1
1
import { createProgram , CompilerOptions , Program , CustomTransformers , getPreEmitDiagnostics , Diagnostic , EmitResult , CompilerHost , ModuleKind , ModuleResolutionKind , ScriptTarget } from "typescript" ;
2
2
import transformer from './transformer.js' ;
3
- import { readFileSync } from "fs" ;
3
+ import { readFile } from "fs/promises " ;
4
4
import { createVirtualCompilerHost } from "./virtual-fs.js" ;
5
5
import { resolve , dirname } from "path" ;
6
6
import { fileURLToPath } from "url" ;
@@ -13,12 +13,21 @@ import { fileURLToPath } from "url";
13
13
const loadTypeScriptLibFiles = async ( ) => {
14
14
const tsPath = await import . meta. resolve ( 'typescript' ) ;
15
15
const tsLibPath = resolve ( dirname ( fileURLToPath ( tsPath ) ) , '' ) ;
16
- const libFiles = {
17
- 'lib.es2015.d.ts' : readFileSync ( resolve ( tsLibPath , 'lib.es2015.d.ts' ) , 'utf-8' ) ,
18
- 'lib.dom.d.ts' : readFileSync ( resolve ( tsLibPath , 'lib.dom.d.ts' ) , 'utf-8' ) ,
19
- 'lib.es5.d.ts' : readFileSync ( resolve ( tsLibPath , 'lib.es5.d.ts' ) , 'utf-8' ) ,
16
+
17
+ const libFilePaths = {
18
+ 'lib.es2015.d.ts' : resolve ( tsLibPath , 'lib.es2015.d.ts' ) ,
19
+ 'lib.dom.d.ts' : resolve ( tsLibPath , 'lib.dom.d.ts' ) ,
20
+ 'lib.es5.d.ts' : resolve ( tsLibPath , 'lib.es5.d.ts' ) ,
20
21
} ;
21
- return libFiles ;
22
+
23
+ const fileContents = await Promise . all (
24
+ Object . entries ( libFilePaths ) . map ( async ( [ fileName , filePath ] ) => {
25
+ const content = await readFile ( filePath , 'utf-8' ) ;
26
+ return [ fileName , content ] as const ;
27
+ } )
28
+ ) ;
29
+
30
+ return Object . fromEntries ( fileContents ) ;
22
31
} ;
23
32
24
33
/**
@@ -130,16 +139,18 @@ export class Compiler {
130
139
*/
131
140
static async withVirtualFs ( fileNames : string [ ] , options : CompilerOptions ) : Promise < Compiler > {
132
141
// Load source files
133
- const sourceFiles = fileNames . reduce ( ( acc , fileName ) => {
134
- acc [ fileName ] = readFileSync ( fileName , 'utf-8' ) ;
135
- return acc ;
136
- } , { } as { [ path : string ] : string } ) ;
142
+ const sourceFiles = await Promise . all (
143
+ fileNames . map ( async ( fileName ) => {
144
+ const content = await readFile ( fileName , 'utf-8' ) ;
145
+ return [ fileName , content ] as const ;
146
+ } )
147
+ ) ;
137
148
138
149
// Load TypeScript lib files
139
150
const libFiles = await loadTypeScriptLibFiles ( ) ;
140
151
141
152
// Combine source files and lib files
142
- const files = { ...sourceFiles , ...libFiles } ;
153
+ const files = { ...Object . fromEntries ( sourceFiles ) , ...libFiles } ;
143
154
144
155
const host = createVirtualCompilerHost ( {
145
156
files,
0 commit comments