diff --git a/packages/compiler-cli/src/ngtsc/core/src/compiler.ts b/packages/compiler-cli/src/ngtsc/core/src/compiler.ts index 7d7c1d22c7..dbb5d8607a 100644 --- a/packages/compiler-cli/src/ngtsc/core/src/compiler.ts +++ b/packages/compiler-cli/src/ngtsc/core/src/compiler.ts @@ -731,7 +731,7 @@ export class NgCompiler { const templateTypeChecker = new TemplateTypeChecker( this.tsProgram, this.typeCheckingProgramStrategy, traitCompiler, - this.getTypeCheckingConfig(), refEmitter, reflector, this.incrementalDriver); + this.getTypeCheckingConfig(), refEmitter, reflector, this.host, this.incrementalDriver); return { isCore, diff --git a/packages/compiler-cli/src/ngtsc/typecheck/src/checker.ts b/packages/compiler-cli/src/ngtsc/typecheck/src/checker.ts index 9ee90723a1..af33def912 100644 --- a/packages/compiler-cli/src/ngtsc/typecheck/src/checker.ts +++ b/packages/compiler-cli/src/ngtsc/typecheck/src/checker.ts @@ -39,6 +39,7 @@ export class TemplateTypeChecker { private typeCheckingStrategy: TypeCheckingProgramStrategy, private typeCheckAdapter: ProgramTypeCheckAdapter, private config: TypeCheckingConfig, private refEmitter: ReferenceEmitter, private reflector: ReflectionHost, + private compilerHost: ts.CompilerHost, private priorBuild: IncrementalBuild) {} /** @@ -49,7 +50,7 @@ export class TemplateTypeChecker { this.files.clear(); const ctx = - new TypeCheckContext(this.config, this.originalProgram, this.refEmitter, this.reflector); + new TypeCheckContext(this.config, this.compilerHost, this.refEmitter, this.reflector); // Typecheck all the files. for (const sf of this.originalProgram.getSourceFiles()) { diff --git a/packages/compiler-cli/src/ngtsc/typecheck/src/context.ts b/packages/compiler-cli/src/ngtsc/typecheck/src/context.ts index 2e92257e18..d71e339742 100644 --- a/packages/compiler-cli/src/ngtsc/typecheck/src/context.ts +++ b/packages/compiler-cli/src/ngtsc/typecheck/src/context.ts @@ -113,7 +113,7 @@ export class TypeCheckContext { private fileMap = new Map(); constructor( - private config: TypeCheckingConfig, private program: ts.Program, + private config: TypeCheckingConfig, private compilerHost: ts.CompilerHost, private refEmitter: ReferenceEmitter, private reflector: ReflectionHost) {} /** @@ -320,7 +320,8 @@ export class TypeCheckContext { domSchemaChecker: new RegistryDomSchemaChecker(sourceManager), oobRecorder: new OutOfBandDiagnosticRecorderImpl(sourceManager), typeCheckFile: new TypeCheckFile( - TypeCheckShimGenerator.shimFor(sfPath), this.config, this.refEmitter, this.reflector), + TypeCheckShimGenerator.shimFor(sfPath), this.config, this.refEmitter, this.reflector, + this.compilerHost), hasInlines: false, sourceManager, }; diff --git a/packages/compiler-cli/src/ngtsc/typecheck/src/type_check_file.ts b/packages/compiler-cli/src/ngtsc/typecheck/src/type_check_file.ts index 619bc13156..e88a560465 100644 --- a/packages/compiler-cli/src/ngtsc/typecheck/src/type_check_file.ts +++ b/packages/compiler-cli/src/ngtsc/typecheck/src/type_check_file.ts @@ -34,10 +34,11 @@ export class TypeCheckFile extends Environment { constructor( readonly fileName: AbsoluteFsPath, config: TypeCheckingConfig, refEmitter: ReferenceEmitter, - reflector: ReflectionHost) { + reflector: ReflectionHost, compilerHost: ts.CompilerHost) { super( config, new ImportManager(new NoopImportRewriter(), 'i'), refEmitter, reflector, - ts.createSourceFile(fileName, '', ts.ScriptTarget.Latest, true)); + ts.createSourceFile( + compilerHost.getCanonicalFileName(fileName), '', ts.ScriptTarget.Latest, true)); } addTypeCheckBlock( @@ -49,7 +50,7 @@ export class TypeCheckFile extends Environment { } render(): string { - let source: string = this.importManager.getAllImports(this.fileName) + let source: string = this.importManager.getAllImports(this.contextFile.fileName) .map(i => `import * as ${i.qualifier} from '${i.specifier}';`) .join('\n') + '\n\n'; diff --git a/packages/compiler-cli/src/ngtsc/typecheck/test/test_utils.ts b/packages/compiler-cli/src/ngtsc/typecheck/test/test_utils.ts index feec2875c1..145e4194c2 100644 --- a/packages/compiler-cli/src/ngtsc/typecheck/test/test_utils.ts +++ b/packages/compiler-cli/src/ngtsc/typecheck/test/test_utils.ts @@ -302,7 +302,7 @@ export function typecheck( const programStrategy = new ReusedProgramStrategy(program, host, options, []); const templateTypeChecker = new TemplateTypeChecker( - program, programStrategy, checkAdapter, fullConfig, emitter, reflectionHost, + program, programStrategy, checkAdapter, fullConfig, emitter, reflectionHost, host, NOOP_INCREMENTAL_BUILD); templateTypeChecker.refresh(); return templateTypeChecker.getDiagnosticsForFile(sf); diff --git a/packages/compiler-cli/src/ngtsc/typecheck/test/type_constructor_spec.ts b/packages/compiler-cli/src/ngtsc/typecheck/test/type_constructor_spec.ts index e843a1fc7f..4bbe9af427 100644 --- a/packages/compiler-cli/src/ngtsc/typecheck/test/type_constructor_spec.ts +++ b/packages/compiler-cli/src/ngtsc/typecheck/test/type_constructor_spec.ts @@ -43,7 +43,7 @@ runInEachFileSystem(() => { const host = new NgtscCompilerHost(getFileSystem()); const file = new TypeCheckFile( _('/_typecheck_.ts'), ALL_ENABLED_CONFIG, new ReferenceEmitter([]), - /* reflector */ null!); + /* reflector */ null!, host); const sf = file.render(); expect(sf).toContain('export const IS_A_MODULE = true;'); }); @@ -73,10 +73,10 @@ TestClass.ngTypeCtor({value: 'test'}); new AbsoluteModuleStrategy(program, checker, moduleResolver, reflectionHost), new LogicalProjectStrategy(reflectionHost, logicalFs), ]); - const ctx = new TypeCheckContext(ALL_ENABLED_CONFIG, program, emitter, reflectionHost); + const ctx = new TypeCheckContext(ALL_ENABLED_CONFIG, host, emitter, reflectionHost); const TestClass = getDeclaration(program, _('/main.ts'), 'TestClass', isNamedClassDeclaration); - const pendingFile = makePendingFile(reflectionHost); + const pendingFile = makePendingFile(reflectionHost, host); ctx.addInlineTypeCtor( pendingFile, getSourceFileOrError(program, _('/main.ts')), new Reference(TestClass), { fnName: 'ngTypeCtor', @@ -109,8 +109,8 @@ TestClass.ngTypeCtor({value: 'test'}); new AbsoluteModuleStrategy(program, checker, moduleResolver, reflectionHost), new LogicalProjectStrategy(reflectionHost, logicalFs), ]); - const pendingFile = makePendingFile(reflectionHost); - const ctx = new TypeCheckContext(ALL_ENABLED_CONFIG, program, emitter, reflectionHost); + const pendingFile = makePendingFile(reflectionHost, host); + const ctx = new TypeCheckContext(ALL_ENABLED_CONFIG, host, emitter, reflectionHost); const TestClass = getDeclaration(program, _('/main.ts'), 'TestClass', isNamedClassDeclaration); ctx.addInlineTypeCtor( @@ -152,8 +152,8 @@ TestClass.ngTypeCtor({value: 'test'}); new AbsoluteModuleStrategy(program, checker, moduleResolver, reflectionHost), new LogicalProjectStrategy(reflectionHost, logicalFs), ]); - const pendingFile = makePendingFile(reflectionHost); - const ctx = new TypeCheckContext(ALL_ENABLED_CONFIG, program, emitter, reflectionHost); + const pendingFile = makePendingFile(reflectionHost, host); + const ctx = new TypeCheckContext(ALL_ENABLED_CONFIG, host, emitter, reflectionHost); const TestClass = getDeclaration(program, _('/main.ts'), 'TestClass', isNamedClassDeclaration); ctx.addInlineTypeCtor( @@ -184,7 +184,8 @@ TestClass.ngTypeCtor({value: 'test'}); } }); -function makePendingFile(reflector: ReflectionHost): PendingFileTypeCheckingData { +function makePendingFile( + reflector: ReflectionHost, compilerHost: ts.CompilerHost): PendingFileTypeCheckingData { const manager = new TemplateSourceManager(); return { domSchemaChecker: new RegistryDomSchemaChecker(manager), @@ -192,6 +193,7 @@ function makePendingFile(reflector: ReflectionHost): PendingFileTypeCheckingData oobRecorder: new NoopOobRecorder(), sourceManager: manager, typeCheckFile: new TypeCheckFile( - absoluteFrom('/typecheck.ts'), ALL_ENABLED_CONFIG, new ReferenceEmitter([]), reflector) + absoluteFrom('/typecheck.ts'), ALL_ENABLED_CONFIG, new ReferenceEmitter([]), reflector, + compilerHost) }; } \ No newline at end of file