From fd37f3fbab9b2e4a19c885f468cb13a35baa26c1 Mon Sep 17 00:00:00 2001 From: Tobias Bosch Date: Mon, 30 Oct 2017 11:54:40 -0700 Subject: [PATCH] fix(compiler): always use relative paths to refer to generated code MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Previously we generated imports like `@angular/material/index.ngfactory`, which doesn’t make sense as we don’t ship generated code on npm Closes #20031 --- packages/compiler-cli/src/transformers/compiler_host.ts | 3 ++- .../compiler-cli/test/transformers/compiler_host_spec.ts | 8 ++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/packages/compiler-cli/src/transformers/compiler_host.ts b/packages/compiler-cli/src/transformers/compiler_host.ts index 2796f7a214..08c25472a3 100644 --- a/packages/compiler-cli/src/transformers/compiler_host.ts +++ b/packages/compiler-cli/src/transformers/compiler_host.ts @@ -192,7 +192,8 @@ export class TsCompilerAotCompilerTypeCheckHostAdapter implements ts.CompilerHos const containingFilePackageName = getPackageName(containingFile); let moduleName: string; - if (importedFilePackagName === containingFilePackageName) { + if (importedFilePackagName === containingFilePackageName || + GENERATED_FILES.test(originalImportedFile)) { const rootedContainingFile = relativeToRootDirs(containingFile, this.rootDirs); const rootedImportedFile = relativeToRootDirs(importedFile, this.rootDirs); diff --git a/packages/compiler-cli/test/transformers/compiler_host_spec.ts b/packages/compiler-cli/test/transformers/compiler_host_spec.ts index b5e7e398cf..caf7d4ab29 100644 --- a/packages/compiler-cli/test/transformers/compiler_host_spec.ts +++ b/packages/compiler-cli/test/transformers/compiler_host_spec.ts @@ -90,6 +90,14 @@ describe('NgCompilerHost', () => { .toBe('./a/child'); }); + it('should use a relative import when accessing generated files, even if crossing packages', + () => { + expect(host.fileNameToModuleName( + '/tmp/node_modules/mod2/b.ngfactory.d.ts', + '/tmp/node_modules/mod1/a.ngfactory.d.ts')) + .toBe('../mod2/b.ngfactory'); + }); + it('should support multiple rootDirs when accessing a source file form a source file', () => { const hostWithMultipleRoots = createHost({ options: {