@@ -8,7 +8,7 @@ import NgOptions from './options';
88import { MetadataWriterHost , TsickleHost } from './compiler_host' ;
99
1010export type CodegenExtension = ( ngOptions : NgOptions , program : ts . Program , host : ts . CompilerHost ) =>
11- Promise < any > ;
11+ Promise < void > ;
1212
1313export function main ( project : string , basePath ?: string , codegen ?: CodegenExtension ) : Promise < any > {
1414 try {
@@ -32,20 +32,22 @@ export function main(project: string, basePath?: string, codegen?: CodegenExtens
3232 codegen = ( ) => Promise . resolve ( null ) ;
3333 }
3434 return codegen ( ngOptions , program , host ) . then ( ( ) => {
35- tsc . typeCheck ( host , program ) ;
35+ // Create a new program since codegen files were created after making the old program
36+ const newProgram = ts . createProgram ( parsed . fileNames , parsed . options , host , program ) ;
37+ tsc . typeCheck ( host , newProgram ) ;
3638
3739 // Emit *.js with Decorators lowered to Annotations, and also *.js.map
38- const tsicklePreProcessor = new TsickleHost ( host ) ;
39- tsc . emit ( tsicklePreProcessor , program ) ;
40+ const tsicklePreProcessor = new TsickleHost ( host , newProgram ) ;
41+ tsc . emit ( tsicklePreProcessor , newProgram ) ;
4042
4143 if ( ! ngOptions . skipMetadataEmit ) {
4244 // Emit *.metadata.json and *.d.ts
4345 // Not in the same emit pass with above, because tsickle erases
4446 // decorators which we want to read or document.
4547 // Do this emit second since TypeScript will create missing directories for us
4648 // in the standard emit.
47- const metadataWriter = new MetadataWriterHost ( host , program ) ;
48- tsc . emit ( metadataWriter , program ) ;
49+ const metadataWriter = new MetadataWriterHost ( host , newProgram ) ;
50+ tsc . emit ( metadataWriter , newProgram ) ;
4951 }
5052 } ) ;
5153 } catch ( e ) {
0 commit comments