@@ -43,7 +43,7 @@ const libCache: { [key: string]: ts.SourceFile } = {};
4343/** @internal */
4444export function createVirtualProgram (
4545 input : Record < string , string > ,
46- options ? : CompilerOptions
46+ options : CompilerOptions = { }
4747) : ts . Program {
4848 const compilerHost : ts . CompilerHost = {
4949 fileExists : ( ) => true ,
@@ -86,40 +86,29 @@ export function createVirtualProgram(
8686 return ts . createProgram ( Object . keys ( input ) , options , compilerHost ) ;
8787}
8888
89- export interface VirtualProgramResult {
90- file : TranspiledFile ;
89+ export interface TranspileStringResult {
9190 diagnostics : ts . Diagnostic [ ] ;
91+ file ?: TranspiledFile ;
9292}
9393
9494export function transpileString (
95- content : string ,
95+ main : string ,
9696 options : CompilerOptions = { }
97- ) : VirtualProgramResult {
98- const program = createVirtualProgram ( { "main.ts" : content } , options ) ;
99- const { diagnostics, transpiledFiles } = getTranspileOutput ( { program, options } ) ;
100- const allDiagnostics = ts . sortAndDeduplicateDiagnostics ( [
101- ...ts . getPreEmitDiagnostics ( program ) ,
102- ...diagnostics ,
103- ] ) ;
104-
105- return { file : transpiledFiles . get ( "main.ts" ) , diagnostics : [ ...allDiagnostics ] } ;
97+ ) : TranspileStringResult {
98+ const { diagnostics, transpiledFiles } = transpileVirtualProgram ( { "main.ts" : main } , options ) ;
99+ return { diagnostics, file : transpiledFiles . get ( "main.ts" ) } ;
106100}
107101
108102export function transpileVirtualProgram (
109103 files : Record < string , string > ,
110104 options : CompilerOptions = { }
111- ) : VirtualProgramResult {
112- const mainFileName = Object . keys ( files ) . find ( x => / \b m a i n \. [ a - z ] + $ / . test ( x ) ) ;
113- if ( mainFileName === undefined ) {
114- throw new Error ( 'Virtual program should have a file named "main"' ) ;
115- }
116-
105+ ) : TranspilationResult {
117106 const program = createVirtualProgram ( files , options ) ;
118- const { diagnostics , transpiledFiles } = getTranspileOutput ( { program, options } ) ;
107+ const transpileOutput = getTranspileOutput ( { program, options } ) ;
119108 const allDiagnostics = ts . sortAndDeduplicateDiagnostics ( [
120109 ...ts . getPreEmitDiagnostics ( program ) ,
121- ...diagnostics ,
110+ ...transpileOutput . diagnostics ,
122111 ] ) ;
123112
124- return { file : transpiledFiles . get ( mainFileName ) , diagnostics : [ ...allDiagnostics ] } ;
113+ return { ... transpileOutput , diagnostics : [ ...allDiagnostics ] } ;
125114}
0 commit comments