@@ -2,6 +2,7 @@ namespace evaluator {
22 declare var Symbol : SymbolConstructor ;
33
44 const sourceFile = vpath . combine ( vfs . srcFolder , "source.ts" ) ;
5+ const sourceFileJs = vpath . combine ( vfs . srcFolder , "source.js" ) ;
56
67 function compile ( sourceText : string , options ?: ts . CompilerOptions ) {
78 const fs = vfs . createFromFileSystem ( Harness . IO , /*ignoreCase*/ false ) ;
@@ -32,9 +33,8 @@ namespace evaluator {
3233 // Add "asyncIterator" if missing
3334 if ( ! ts . hasProperty ( FakeSymbol , "asyncIterator" ) ) Object . defineProperty ( FakeSymbol , "asyncIterator" , { value : Symbol . for ( "Symbol.asyncIterator" ) , configurable : true } ) ;
3435
35- function evaluate ( result : compiler . CompilationResult , globals ?: Record < string , any > ) {
36- globals = { Symbol : FakeSymbol , ...globals } ;
37-
36+ export function evaluateTypeScript ( sourceText : string , options ?: ts . CompilerOptions , globals ?: Record < string , any > ) {
37+ const result = compile ( sourceText , options ) ;
3838 if ( ts . some ( result . diagnostics ) ) {
3939 assert . ok ( /*value*/ false , "Syntax error in evaluation source text:\n" + ts . formatDiagnostics ( result . diagnostics , {
4040 getCanonicalFileName : file => file ,
@@ -46,6 +46,12 @@ namespace evaluator {
4646 const output = result . getOutput ( sourceFile , "js" ) ! ;
4747 assert . isDefined ( output ) ;
4848
49+ return evaluateJavaScript ( output . text , globals , output . file ) ;
50+ }
51+
52+ export function evaluateJavaScript ( sourceText : string , globals ?: Record < string , any > , sourceFile = sourceFileJs ) {
53+ globals = { Symbol : FakeSymbol , ...globals } ;
54+
4955 const globalNames : string [ ] = [ ] ;
5056 const globalArgs : any [ ] = [ ] ;
5157 for ( const name in globals ) {
@@ -55,15 +61,11 @@ namespace evaluator {
5561 }
5662 }
5763
58- const evaluateText = `(function (module, exports, require, __dirname, __filename, ${ globalNames . join ( ", " ) } ) { ${ output . text } })` ;
59- // tslint:disable-next-line:no-eval
60- const evaluateThunk = eval ( evaluateText ) as ( module : any , exports : any , require : ( id : string ) => any , dirname : string , filename : string , ...globalArgs : any [ ] ) => void ;
64+ const evaluateText = `(function (module, exports, require, __dirname, __filename, ${ globalNames . join ( ", " ) } ) { ${ sourceText } })` ;
65+ // tslint:disable-next-line:no-eval no-unused-expression
66+ const evaluateThunk = ( void 0 , eval ) ( evaluateText ) as ( module : any , exports : any , require : ( id : string ) => any , dirname : string , filename : string , ...globalArgs : any [ ] ) => void ;
6167 const module : { exports : any ; } = { exports : { } } ;
62- evaluateThunk . call ( globals , module , module . exports , noRequire , vpath . dirname ( output . file ) , output . file , FakeSymbol , ...globalArgs ) ;
68+ evaluateThunk . call ( globals , module , module . exports , noRequire , vpath . dirname ( sourceFile ) , sourceFile , FakeSymbol , ...globalArgs ) ;
6369 return module . exports ;
6470 }
65-
66- export function evaluateTypeScript ( sourceText : string , options ?: ts . CompilerOptions , globals ?: Record < string , any > ) {
67- return evaluate ( compile ( sourceText , options ) , globals ) ;
68- }
6971}
0 commit comments