@@ -4,10 +4,11 @@ import { CompilerOptions, isBundleEnabled } from "../CompilerOptions";
44import { getLuaLibBundle } from "../LuaLib" ;
55import { normalizeSlashes , trimExtension } from "../utils" ;
66import { getBundleResult } from "./bundle" ;
7- import { getPlugins } from "./plugins" ;
7+ import { getPlugins , Plugin } from "./plugins" ;
88import { resolveDependencies } from "./resolve" ;
99import { getProgramTranspileResult , TranspileOptions } from "./transpile" ;
1010import { EmitFile , EmitHost , ProcessedFile } from "./utils" ;
11+ import * as performance from "../performance" ;
1112
1213export interface TranspilerOptions {
1314 emitHost ?: EmitHost ;
@@ -24,28 +25,52 @@ export interface EmitResult {
2425
2526export class Transpiler {
2627 protected emitHost : EmitHost ;
28+
2729 constructor ( { emitHost = ts . sys } : TranspilerOptions = { } ) {
2830 this . emitHost = emitHost ;
2931 }
3032
3133 public emit ( emitOptions : EmitOptions ) : EmitResult {
3234 const { program, writeFile = this . emitHost . writeFile , plugins : optionsPlugins = [ ] } = emitOptions ;
33- const options = program . getCompilerOptions ( ) as CompilerOptions ;
3435
3536 const { diagnostics : getPluginsDiagnostics , plugins : configPlugins } = getPlugins ( program ) ;
3637 const plugins = [ ...optionsPlugins , ...configPlugins ] ;
3738
38- const { diagnostics, transpiledFiles : freshFiles } = getProgramTranspileResult ( this . emitHost , writeFile , {
39- ...emitOptions ,
40- plugins,
41- } ) ;
39+ const { diagnostics : transpileDiagnostics , transpiledFiles : freshFiles } = getProgramTranspileResult (
40+ this . emitHost ,
41+ writeFile ,
42+ {
43+ ...emitOptions ,
44+ plugins,
45+ }
46+ ) ;
47+
48+ const { emitPlan } = this . getEmitPlan ( program , transpileDiagnostics , freshFiles ) ;
4249
43- const { emitPlan } = this . getEmitPlan ( program , diagnostics , freshFiles ) ;
50+ const emitDiagnostics = this . emitFiles ( program , plugins , emitPlan , writeFile ) ;
51+
52+ return {
53+ diagnostics : getPluginsDiagnostics . concat ( transpileDiagnostics , emitDiagnostics ) ,
54+ emitSkipped : emitPlan . length === 0 ,
55+ } ;
56+ }
57+
58+ private emitFiles (
59+ program : ts . Program ,
60+ plugins : Plugin [ ] ,
61+ emitPlan : EmitFile [ ] ,
62+ writeFile : ts . WriteFileCallback
63+ ) : ts . Diagnostic [ ] {
64+ performance . startSection ( "emit" ) ;
65+
66+ const options = program . getCompilerOptions ( ) as CompilerOptions ;
4467
4568 if ( options . tstlVerbose ) {
4669 console . log ( "Emitting output" ) ;
4770 }
4871
72+ const diagnostics : ts . Diagnostic [ ] = [ ] ;
73+
4974 for ( const plugin of plugins ) {
5075 if ( plugin . beforeEmit ) {
5176 const beforeEmitPluginDiagnostics = plugin . beforeEmit ( program , options , this . emitHost , emitPlan ) ?? [ ] ;
@@ -69,14 +94,17 @@ export class Transpiler {
6994 console . log ( "Emit finished!" ) ;
7095 }
7196
72- return { diagnostics : getPluginsDiagnostics . concat ( diagnostics ) , emitSkipped : emitPlan . length === 0 } ;
97+ performance . endSection ( "emit" ) ;
98+
99+ return diagnostics ;
73100 }
74101
75102 protected getEmitPlan (
76103 program : ts . Program ,
77104 diagnostics : ts . Diagnostic [ ] ,
78105 files : ProcessedFile [ ]
79106 ) : { emitPlan : EmitFile [ ] } {
107+ performance . startSection ( "getEmitPlan" ) ;
80108 const options = program . getCompilerOptions ( ) as CompilerOptions ;
81109
82110 if ( options . tstlVerbose ) {
@@ -113,6 +141,8 @@ export class Transpiler {
113141 } ) ) ;
114142 }
115143
144+ performance . endSection ( "getEmitPlan" ) ;
145+
116146 return { emitPlan } ;
117147 }
118148}
0 commit comments