diff --git a/packages/compiler-cli/src/ngtsc/shims/src/factory_generator.ts b/packages/compiler-cli/src/ngtsc/shims/src/factory_generator.ts index d328db939b..66136dc250 100644 --- a/packages/compiler-cli/src/ngtsc/shims/src/factory_generator.ts +++ b/packages/compiler-cli/src/ngtsc/shims/src/factory_generator.ts @@ -12,7 +12,7 @@ import * as ts from 'typescript'; import {relativePathBetween} from '../../util/src/path'; import {ShimGenerator} from './host'; -import {isNonDeclarationTsFile} from './util'; +import {generatedModuleName, isNonDeclarationTsFile} from './util'; const TS_DTS_SUFFIX = /(\.d)?\.ts$/; const STRIP_NG_FACTORY = /(.*)NgFactory$/; @@ -64,8 +64,13 @@ export class FactoryGenerator implements ShimGenerator { ...varLines, ].join('\n'); } - return ts.createSourceFile( + const genFile = ts.createSourceFile( genFilePath, sourceText, original.languageVersion, true, ts.ScriptKind.TS); + if (original.moduleName !== undefined) { + genFile.moduleName = + generatedModuleName(original.moduleName, original.fileName, '.ngfactory'); + } + return genFile; } static forRootFiles(files: ReadonlyArray): FactoryGenerator { diff --git a/packages/compiler-cli/src/ngtsc/shims/src/summary_generator.ts b/packages/compiler-cli/src/ngtsc/shims/src/summary_generator.ts index 799c3187c6..bbb8e35266 100644 --- a/packages/compiler-cli/src/ngtsc/shims/src/summary_generator.ts +++ b/packages/compiler-cli/src/ngtsc/shims/src/summary_generator.ts @@ -9,7 +9,7 @@ import * as ts from 'typescript'; import {ShimGenerator} from './host'; -import {isNonDeclarationTsFile} from './util'; +import {generatedModuleName, isNonDeclarationTsFile} from './util'; export class SummaryGenerator implements ShimGenerator { private constructor(private map: Map) {} @@ -43,8 +43,13 @@ export class SummaryGenerator implements ShimGenerator { varLines.push(`export const ɵempty = null;`); } const sourceText = varLines.join('\n'); - return ts.createSourceFile( + const genFile = ts.createSourceFile( genFilePath, sourceText, original.languageVersion, true, ts.ScriptKind.TS); + if (original.moduleName !== undefined) { + genFile.moduleName = + generatedModuleName(original.moduleName, original.fileName, '.ngsummary'); + } + return genFile; } static forRootFiles(files: ReadonlyArray): SummaryGenerator { diff --git a/packages/compiler-cli/src/ngtsc/shims/src/util.ts b/packages/compiler-cli/src/ngtsc/shims/src/util.ts index e7285663db..d791258db6 100644 --- a/packages/compiler-cli/src/ngtsc/shims/src/util.ts +++ b/packages/compiler-cli/src/ngtsc/shims/src/util.ts @@ -6,9 +6,24 @@ * found in the LICENSE file at https://angular.io/license */ +import * as path from 'path'; +import * as ts from 'typescript'; + const TS_FILE = /\.tsx?$/; const D_TS_FILE = /\.d\.ts$/; export function isNonDeclarationTsFile(file: string): boolean { return TS_FILE.exec(file) !== null && D_TS_FILE.exec(file) === null; } + +export function generatedModuleName( + originalModuleName: string, originalFileName: string, genSuffix: string): string { + let moduleName: string; + if (originalFileName.endsWith('/index.ts')) { + moduleName = originalModuleName + '/index' + genSuffix; + } else { + moduleName = originalModuleName + genSuffix; + } + + return moduleName; +} diff --git a/packages/compiler-cli/src/ngtsc/shims/test/BUILD.bazel b/packages/compiler-cli/src/ngtsc/shims/test/BUILD.bazel new file mode 100644 index 0000000000..505ca31152 --- /dev/null +++ b/packages/compiler-cli/src/ngtsc/shims/test/BUILD.bazel @@ -0,0 +1,24 @@ +package(default_visibility = ["//visibility:public"]) + +load("//tools:defaults.bzl", "jasmine_node_test", "ts_library") + +ts_library( + name = "test_lib", + testonly = True, + srcs = glob([ + "**/*.ts", + ]), + deps = [ + "//packages:types", + "//packages/compiler-cli/src/ngtsc/shims", + ], +) + +jasmine_node_test( + name = "test", + bootstrap = ["angular/tools/testing/init_node_no_angular_spec.js"], + deps = [ + ":test_lib", + "//tools/testing:node_no_angular", + ], +) diff --git a/packages/compiler-cli/src/ngtsc/shims/test/util_spec.ts b/packages/compiler-cli/src/ngtsc/shims/test/util_spec.ts new file mode 100644 index 0000000000..568204abfa --- /dev/null +++ b/packages/compiler-cli/src/ngtsc/shims/test/util_spec.ts @@ -0,0 +1,25 @@ +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +import {generatedModuleName} from '../src/util'; + +describe('shim utilities', () => { + describe('generatedModuleName', () => { + it('should generate a correct module name for index files', () => { + expect(generatedModuleName('@angular/core', '/angular/packages/core/index.ts', '.ngfactory')) + .toBe('@angular/core/index.ngfactory'); + }); + + it('should generate a correct module name for non-index files', () => { + expect(generatedModuleName( + '@angular/core/src/application_ref', + '/angular/packages/core/src/application_ref.ts', '.ngsummary')) + .toBe('@angular/core/src/application_ref.ngsummary'); + }); + }); +});